CS Repo 49

HTTP란?

본 내용은 "HTTP 완벽 가이드" 내용을 참고하여 기록한 정리본입니다. 게시할 내용리소스란 무엇인가?리소스는 어디서 오는가?웹 트랜잭션의 동작 원리HTTP 메시지의 기본 형식HTTP 기저의 TCP 네트워크 전송여러 종류의 HTTP 프로토콜HTTP 버전 종류웹의 구성요소HTTP란?HTTP는 신뢰성 있는 데이터 전송을 위해 설계된 프로토콜이다. 데이터의 파괴, 중복, 왜곡을 방지하는 여러 메커니즘이 내재되어 있어, 웹 상에서 정보가 안정적으로 주고받을 수 있도록 한다.웹 클라이언트와 서버웹 클라이언트리소스를 요청하는 주체로, 사용자가 브라우저를 통해 웹 페이지에 접근할 때 역할을 수행한다.웹 서버클라이언트의 요청에 따라 리소스를 제공하는 시스템이다.웹 콘텐츠웹 서버가 제공하는 다양한 형태의 리소스를 의미한..

도메인 주도 설계(DDD)

1. 개념 및 원칙도메인 주도 설계(Domain-Driven Design)는 소프트웨어의 핵심 비즈니스 도메인에 집중하여 복잡한 도메인 지식을 코드의 도메인 모델로 표현하고 발전시키는 설계 철학이다. 복잡한 비즈니스 로직을 도메인 모델(객체 모델)로 추상화함으로써 비즈니스 현실과 코드 간의 간극을 줄인다. 이를 위해 도메인 전문가와 개발자는 공유하는 보편 언어(Ubiquitous Language)를 구축하여 요구사항 분석부터 설계, 구현까지 동일한 언어로 소통한다. 이 과정에서 모델은 지속적으로 정제되고 리팩토링되어, 요구사항의 의도를 코드에 정확히 반영하게 된다.DDD가 필요한 이유는 복잡한 도메인 문제를 다루는 소프트웨어에서 두드러진다. 전통적인 데이터 중심 설계나, 도메인 객체가 단순히 데이터 저장..

스프링 + 비동기 프로그래밍

비동기 프로그래밍은 시스템의 처리 효율을 높이고 블로킹을 최소화하기 위한 핵심 기법이다. 동기 호출로 인한 블로킹 문제를 해결하기 위해 이벤트 드리븐 아키텍처와 같은 패러다임이 채택되며, 이를 통해 처리 흐름을 비동기로 전환하고, 데이터 흐름 제어(backpressure) 및 에러 처리를 체계적으로 관리할 수 있다.이벤트 드리븐 아키텍처이벤트 드리븐 아키텍처란, 상태의 변화가 직접적인 메소드 호출로 이루어지지 않고, 자신의 상태 변화를 외부에 알리는데 중점을 두는 아키텍처 형태를 의미한다.I/O 처리와 zip 요청I/O 작업 시 상류 스트림에서 zip 요청을 받는다. 내부에서 동기 호출이 이루어지면 블로킹이 발생하므로, 비동기 요청을 일관되게 사용하는 것이 바람직하다.이벤트와 콜백 메커니즘이벤트나 콜백을..

동기/비동기 관점에서 바라본 Java IO vs Java NIO

동기/비동기 통신 관련은 해당 글을 참고해주세요. 봉쇄/비봉쇄(Blocking/Non-Blocking), 동기/비동기(Sync/Async), 그리고 이벤트 드리븐 아키텍처통신(파일 I/O, 네트워크I/O) 개념에서 비동기와 논블로킹 개념은 매우 혼동하기 쉬운 주제이다.네트워크를 정확히 모른다는 것은 장님이 코끼리 만지는 격이니, 이번기회에 제대로 정리하고 넘go-gradually.tistory.com 동기 및 비동기 프로그래밍 방식의 관점에서 Java IO와 Java NIO를 살펴보면, 두 기술은 입출력 처리 방식과 구조적인 접근에서 본질적인 차이를 보인다. Java IO는 전통적인 스트림 기반 방식으로 설계되었으며, 모든 입출력 작업이 완료될 때까지 호출 스레드가 대기하는 블로킹 방식을 채택한다. 반..

"프로그래밍 패러다임" 이란?

프로그래밍 패러다임은 소프트웨어 설계와 구현 방법론을 구체화하는 개념이며, 각 패러다임은 문제 해결 접근 방식에 따른 특징과 이점을 갖는다. 다양한 패러다임이 존재하며, 아래와 같이 체계적으로 분류할 수 있다.명령형 프로그래밍 (Imperative Programming)컴퓨터에게 수행해야 할 작업을 명령어의 순차적 집합으로 지시하는 방식이다.절차적 프로그래밍 (Procedural Programming): 명령형 프로그래밍의 한 갈래로, 작업을 함수나 서브루틴 단위로 나누어 순차적으로 수행한다. 예를 들어, C 언어와 Pascal이 이에 해당한다.구조적 프로그래밍 (Structured Programming): 코드의 흐름을 제어 구조(조건문, 반복문 등)를 통해 명확하게 구성함으로써 가독성과 유지보수를 향..

CAP 이론, 그리고 BASE 원칙이란?

분산 시스템은 여러 컴퓨터 노드가 하나의 통합된 시스템처럼 동작하도록 구성된 환경이다. 하지만, 네트워크 지연이나 일부 노드의 장애 등 다양한 문제에 직면할 수 있기에, 시스템 설계자는 이러한 제약 조건을 고려한 원칙에 따라 트레이드오프를 명확히 이해하고 선택해야 한다.CAP 이론CAP 이론은 분산 시스템 설계 시 고려해야 할 세 가지 핵심 요소 간의 상호작용을 설명한다.Consistency (일관성)모든 노드가 동일한 데이터를 동시에 반영하여, 사용자에게 항상 최신의 일관된 정보를 제공하는 상태를 유지한다.Availability (가용성)시스템이 모든 요청에 대해 항상 응답할 수 있도록 보장한다. 일부 노드에 장애가 발생하더라도 전체 시스템은 계속 운영된다.Partition Tolerance (분할 허..

백엔드 개발자가 알아야 할 소프트웨어 공학 관련 면접 질문

1. 마이크로서비스 아키텍처(MSA) vs 모놀리식 아키텍처마이크로서비스 아키텍처 (MSA)마이크로서비스 아키텍처는 애플리케이션을 독립적인 서비스 단위로 분리하여 운영하는 방식을 의미한다.장점독립적 배포 및 확장: 각 서비스는 별도로 배포 및 확장이 가능하여, 필요에 따라 개별적으로 조정할 수 있다.장애 격리: 하나의 서비스에 장애가 발생해도 전체 시스템에 미치는 영향을 최소화할 수 있다.기술 선택의 유연성: 서비스마다 최적의 기술 스택을 선택할 수 있어 개발 환경에 유연하게 대응할 수 있다.단점운영 및 모니터링 부담 증가: 서비스 수가 늘어남에 따라 운영, 모니터링 및 로깅 체계가 복잡해진다.테스트 난이도 상승: 분산 환경에서의 통합 테스트 및 서비스 간 상호작용 테스트가 어려워진다.구현 및 운영 복잡..

백엔드 개발자가 알아야 할 기초 보안 - 인증, 인가, OAuth, OpenID Connect

1. 인증과 인가인증 (Authentication)정의: 사용자가 주장하는 신원을 확인하는 절차이다.목적: 사용자로부터 제공된 정보를 바탕으로, 실제로 해당 사용자인지 검증한다.인가 (Authorization)정의: 인증된 사용자가 특정 리소스에 접근할 권한이 있는지를 확인하는 절차이다.목적: 인증을 마친 사용자에게 적절한 접근 권한을 부여하여 시스템 자원의 보안을 유지한다.2. 암호화 방식 및 특징대칭 키 암호화원리: 암호화와 복호화에 동일한 키를 사용한다.장점: 연산 속도가 빠르며 대용량 데이터 암호화에 효율적이다.단점: 키의 분배와 관리가 취약하여, 키 노출 시 전체 보안에 심각한 영향을 미친다.공개 키 암호화원리: 서로 상보적인 공개 키와 개인 키를 사용하여 암호화와 복호화를 수행한다.장점: 키 ..

OSI 7 Layer, TCP/IP 4 Layer, 그리고 HTTP와 HTTPS

1. 계층 모델1.1 OSI 7계층OSI 7계층은 네트워크 통신의 각 기능을 계층별로 분리하여 정의한 모델이다. 각 계층은 아래와 같이 역할을 수행한다.물리 계층 실제 전송 매체를 통해 비트 단위의 데이터 전송을 담당한다.전기 신호, 광 신호, 무선 주파수 등을 사용하여 데이터 전송이 이루어진다.데이터 링크 계층 물리 계층에서 전송된 데이터를 프레임 단위로 관리하며, 오류 검출 및 수정 기능을 수행한다.MAC 주소 등을 이용한 노드 간의 통신을 지원한다.네트워크 계층 데이터를 패킷 단위로 관리하며, 최적의 경로를 선택해 목적지까지 전달하는 라우팅 기능을 담당한다.IP 주소를 사용하여 패킷의 출발지와 도착지를 지정한다.전송 계층 종단 간 데이터 전송의 신뢰성과 순서를 보장하기 위한 연결 설정, 데이..

프로세스와 스레드, 교착 상태

아래 내용은 면접을 대비한, 간단하게 정리된 프로세스와 스레드, 교착 상태에 대한 내용이다.프로세스와 스레드프로세스정의: 실행 중인 프로그램의 독립된 인스턴스이다.특징:각 프로세스는 별도의 메모리 공간과 시스템 자원을 보유한다.다른 프로세스와의 통신은 주로 IPC(Inter-Process Communication)를 통해 이루어진다.의의: 시스템 안정성과 보안을 위해 프로세스 간의 강한 격리를 제공한다.스레드정의: 하나의 프로세스 내에서 실행되는 경량 작업 단위이다.특징:동일 프로세스 내의 스레드들은 메모리 공간과 자원을 공유한다.스레드 간 전환 비용이 낮아 효율적으로 작업을 수행할 수 있다.한 프로세스 내에서 여러 스레드를 사용하여 병렬 처리가 가능하다.의의: 자원 공유와 빠른 전환을 통해 응용 프로그..