HTTP/2 멀티플렉싱, 무엇이 달라졌나

HTTP/1.1의 한계와 멀티플렉싱의 정의 HTTP/1.1에서는 하나의 TCP 연결로 요청을 보내면 응답이 올 때까지 다음 요청을 보낼 수 없었습니다. 이를 해결하려고 브라우저는 도메인당 6~8개의 TCP 연결을 동시에 열어 병렬로 요청을 처리했지만, 연결 수 자체에 한계가 있고 각 연결마다 TCP 핸드셰이크 비용이 발생했습니다. 만약 앞선 요청의 응답이 늦어지면 뒤에 대기 중인 요청까지 막히는 ‘Head-of-Line Blocking’ 현상도 문제였습니다. … 더 읽기

Chunked Transfer Encoding이란? 개념과 동작 원리

Chunked Transfer Encoding이란? HTTP 통신에서 서버가 응답 데이터를 클라이언트에게 보낼 때, 보통은 응답 본문의 전체 크기를 미리 알려줘야 합니다. 이때 사용하는 헤더가 Content-Length입니다. 하지만 서버가 응답을 만드는 시점에 전체 데이터 크기를 알 수 없는 경우도 많습니다. 예를 들어 실시간으로 생성되는 로그 스트림이나, 데이터베이스에서 대량의 결과를 순차적으로 조회해 전송하는 경우가 그렇습니다. 이런 상황을 위해 HTTP/1.1에서는 ‘Chunked … 더 읽기

HTTP Keep-Alive란? 연결을 재사용하는 이유

HTTP Keep-Alive란 무엇인가 웹 브라우저가 서버에 데이터를 요청할 때마다 매번 새로운 TCP 연결을 맺는다면 어떻게 될까요? 마치 편지를 한 통 보낼 때마다 우체국에 가서 새로 계약을 맺는 것과 같아서, 실제 내용을 주고받는 시간보다 연결을 준비하는 시간이 더 오래 걸릴 수 있습니다. HTTP Keep-Alive는 이런 비효율을 줄이기 위해 한 번 맺은 TCP 연결을 끊지 않고 여러 … 더 읽기

Semantic Versioning, 버전 번호에 담긴 규칙

Semantic Versioning이란? 프로젝트를 진행하다 보면 라이브러리 버전이 1.2.3, 2.0.0처럼 세 개의 숫자로 표시된 것을 자주 보게 됩니다. 이 규칙을 ‘Semantic Versioning(유의적 버전, 줄여서 SemVer)’이라고 부릅니다. 버전 번호를 아무렇게나 올리는 것이 아니라, 그 변화가 어떤 의미를 가지는지 숫자 자체에 담아내는 약속입니다. 형식은 ‘MAJOR.MINOR.PATCH’이며, 각 자리마다 규칙이 정해져 있습니다. MAJOR: 기존 코드와 호환되지 않는 큰 변경이 있을 … 더 읽기

의존성 주입(Dependency Injection)이란? 개념과 원리 쉽게 이해하기

의존성 주입이란? 의존성 주입(Dependency Injection, DI)은 객체가 직접 필요한 다른 객체를 생성하지 않고, 외부에서 만들어진 객체를 전달받아 사용하는 설계 방식입니다. 여기서 ‘의존성’이란 어떤 클래스가 동작하기 위해 필요로 하는 다른 클래스나 모듈을 의미합니다. 즉 A라는 클래스가 B라는 클래스의 기능을 사용해야 한다면, A는 B에 의존하고 있는 것입니다. 보통 이런 의존성은 클래스 내부에서 직접 new 키워드로 생성하는 경우가 … 더 읽기

Repository 패턴, 왜 쓰는가

Repository 패턴이란? Repository 패턴은 데이터베이스나 외부 저장소에 접근하는 로직을 애플리케이션의 비즈니스 로직과 분리하기 위한 설계 패턴입니다. 쉽게 말하면, ‘데이터를 어떻게 가져올 것인가’와 ‘가져온 데이터를 어떻게 사용할 것인가’를 나누는 것입니다. 서비스 코드에서 직접 SQL을 작성하거나 ORM 객체를 다루는 대신, Repository라는 중간 계층을 통해서만 데이터에 접근하도록 강제합니다. 비유하자면 Repository는 도서관의 사서와 같습니다. 이용자는 책이 어느 서가에 있는지, … 더 읽기

Copy-on-Write란? fork()가 빠른 이유

Copy-on-Write의 정의 Copy-on-Write(COW, 쓰기 시 복사)는 리소스를 복사해야 할 때 실제로 즉시 복사하지 않고, 원본 데이터를 공유하다가 누군가 ‘쓰기(write)’ 작업을 시도하는 순간에만 복사를 수행하는 최적화 기법입니다. 즉, 읽기만 하는 동안에는 굳이 데이터를 두 벌로 만들 필요가 없다는 아이디어에서 출발합니다. 비유하자면 도서관에서 책을 빌려 여러 사람이 함께 ‘보는’ 상황과 비슷합니다. 다들 그냥 읽기만 한다면 원본 책 … 더 읽기

가상 메모리(Virtual Memory) 쉽게 이해하기

가상 메모리란? 가상 메모리는 프로그램이 실제 물리 메모리(RAM)의 용량이나 위치를 신경 쓰지 않고도 마치 자신만의 독립된 메모리 공간을 가진 것처럼 동작할 수 있게 해주는 메모리 관리 기법입니다. 운영체제는 각 프로세스에게 ‘가상 주소 공간’이라는 논리적인 주소 체계를 제공하고, 이 가상 주소를 실제 물리 메모리 주소로 변환해주는 역할을 합니다. 비유하자면 아파트 단지의 ‘동/호수 표기’와 비슷합니다. 입주민은 101동 … 더 읽기

SSO(Single Sign-On)란 무엇인가

SSO의 정의 SSO(Single Sign-On)는 하나의 계정으로 한 번만 로그인하면 여러 개의 서비스나 시스템에 다시 로그인하지 않고 접근할 수 있게 해주는 인증 방식입니다. 회사에서 사용하는 메일, 그룹웨어, 사내 포털 등을 각각 로그인하지 않고 한 번의 인증으로 모두 이용할 수 있다면 그것이 바로 SSO 덕분입니다. 비유하자면 호텔에서 발급받은 하나의 마스터키로 객실, 헬스장, 조식당을 모두 출입할 수 있는 … 더 읽기

Refresh Token은 어떻게 동작할까

Refresh Token이란 무엇인가 웹 서비스에 로그인하면 서버는 사용자를 식별하기 위해 Access Token을 발급합니다. 하지만 Access Token은 탈취되었을 때 피해를 줄이기 위해 보통 수명이 짧게 설정됩니다(예: 15분~1시간). 문제는 사용자가 매번 짧은 시간마다 로그인을 다시 해야 한다면 불편하다는 점입니다. 이때 등장하는 것이 Refresh Token입니다. Refresh Token은 Access Token보다 훨씬 긴 수명(예: 2주~1개월)을 가지며, Access Token이 만료되었을 때 … 더 읽기