HTTP 완벽 가이드 - HTTP/2.0

송현진·2025년 9월 13일

Network

목록 보기
12/16

HTTP/1.1은 웹의 표준으로 오랫동안 사용되었지만 성능 면에서 한계가 분명했다. 특히 지연(latency) 문제와 커넥션 관리 문제 때문에 웹페이지 로딩 속도가 느려졌다.

  • 요청당 하나의 커넥션 제한 → 다중 연결, 파이프라이닝의 한계
  • 헤더 중복 전송, 텍스트 기반 메시지 → 비효율

이런 문제를 해결하기 위해 구글의 SPDY 프로토콜을 기반으로 발전한 것이 HTTP/2.0이다.

출처 : https://mark-kim.blog/HTTP2_0/

HTTP/2.0의 핵심 목표

  • 성능 개선: 지연 최소화, 대역폭 최적화
  • 하위 호환성: 기존 HTTP API 유지 (메서드, 상태코드, URI 등 동일)
  • 이진 프로토콜: 텍스트가 아닌 바이너리 프레이밍
  • 멀티플렉싱: 하나의 커넥션에서 여러 요청/응답을 동시에 처리

주요 특징

1. 이진 프레이밍(Binary Framing)

HTTP/1.1은 텍스트 기반 프로토콜이어서 메시지를 파싱하는 데 비용이 크고 오탈자나 구분자 처리 문제도 있었다. HTTP/2.0은 이러한 한계를 없애기 위해 모든 통신을 이진 형식으로 인코딩된 프레임 단위로 나눈다.

  • 프레임(Frame): HTTP/2.0 전송의 최소 단위. 요청과 응답은 헤더 프레임, 데이터 프레임 등으로 나뉘어 전송된다.
  • 스트림(Stream): 프레임들이 모여 하나의 요청/응답을 표현하는 논리적 단위. 각 스트림은 고유 ID를 가지며 하나의 TCP 연결 안에서 여러 스트림이 독립적으로 동시에 존재할 수 있다.
  • 메시지(Message): 클라이언트의 요청이나 서버의 응답처럼 하나의 의미 있는 단위. 헤더와 데이터 프레임의 집합으로 구성된다.

즉, HTTP/2.0은 텍스트 줄바꿈 기반 프로토콜에서 이진 프레임 기반 구조로 바뀌면서 파싱 오류 가능성을 줄이고 더 정밀한 제어가 가능해졌다.

2. 멀티플렉싱(Multiplexing)

HTTP/1.1에서는 하나의 연결에 대해 요청을 순차적으로 처리해야 해서 대기 시간이 길어졌다. 파이프라이닝을 통해 어느 정도 개선하려 했지만 여전히 응답이 순서에 묶이는 HOL(Head-of-Line) 블로킹 문제가 존재했다. HTTP/2.0은 하나의 TCP 커넥션 위에서 여러 개의 스트림을 동시에 처리할 수 있게 하여 병렬성을 크게 높였다. 즉, 이미지, CSS, JS와 같은 여러 리소스를 동시에

3. 헤더 압축(HPACK)

HTTP 요청과 응답에는 User-Agent, Cookie, Accept-Language 같은 헤더가 반복적으로 포함된다. HTTP/1.1에서는 이 헤더들이 매 요청마다 그대로 전송되어 대역폭 낭비가 컸다. HTTP/2.0은 HPACK이라는 전용 압축 방식을 도입해 중복된 헤더를 테이블에 저장하고 재사용한다. 이를 통해 불필요한 데이터 전송을 줄이고 네트워크 효율성을 크게 개선했다.

4. 서버 푸시(Server Push)

기존 HTTP는 반드시 클라이언트가 요청해야만 서버가 응답을 보냈다. HTTP/2.0은 서버가 클라이언트의 요청을 예측해 추가 리소스를 선제적으로 전송할 수 있도록 했다. 예를 들어 HTML 문서를 요청했을 때 해당 문서가 반드시 참조하는 CSS나 JS 파일을 서버가 미리 푸시해 주면 클라이언트는 별도의 요청을 기다릴 필요가 없어 로딩 속도가 빨라진다. 다만 불필요한 리소스를 과도하게 푸시하면 오히려 성능이 떨어질 수 있어 신중한 활용이 필요하다.

5. 스트림 우선순위(Stream Prioritization)

모든 리소스가 동일한 중요도를 가지는 것은 아니다. 사용자가 웹페이지를 열 때, 레이아웃을 구성하는 CSS나 핵심 스크립트가 이미지보다 더 빠르게 로드되어야 한다. HTTP/2.0은 각 스트림에 우선순위(priority)를 부여할 수 있어 중요한 리소스부터 네트워크 자원을 집중시킬 수 있다. 이를 통해 사용자 체감 성능을 더 높일 수 있다.

HTTP/1.1 대비 변화

구분HTTP/1.1HTTP/2.0
전송 단위텍스트 기반 메시지이진 프레임
병렬 처리파이프라이닝, 연결 다중화 한계멀티플렉싱 지원
헤더반복 전송HPACK 압축
서버 응답요청 기반서버 푸시 가능
성능HOL 블로킹, 지연 문제병렬 스트림, 지연 최소화

📝 배운점

HTTP/2.0은 HTTP/1.1의 한계를 보완하기 위해 기존 HTTP 인터페이스는 그대로 유지하면서 전송 방식을 혁신한 프로토콜이라는 점이 인상 깊었다. 특히 이진 프레이밍을 통해 통신 단위를 세분화하고 멀티플렉싱과 헤더 압축으로 성능을 극대화한 부분은 웹 성능 최적화의 핵심 아이디어였다. 또한 서버 푸시와 스트림 우선순위 같은 기능은 단순한 성능 향상을 넘어 사용자 경험(UX)까지 고려한 설계라는 점에서 의미가 있다. 다만 TCP 위에서 동작하기 때문에 근본적인 HOL 블로킹 문제는 남아 있으며 이를 해결하려는 시도가 HTTP/3와 QUIC이라는 사실을 알게 된 것도 큰 학습 포인트였다.


참고

profile
개발자가 되고 싶은 취준생

0개의 댓글