← 아티클 목록

HTTP/2 HTTP/3 차이 — 멀티플렉싱과 QUIC 도입

2027-02-08#HTTP#네트워킹#성능

페이지에 이미지와 JS가 수십 개인데 유독 느릴 때, 원인이 서버가 아니라 HTTP 버전일 수 있습니다. HTTP/1.1은 연결 하나로 요청을 한 번에 하나씩만 처리해서, 앞 응답이 늦으면 뒤가 줄줄이 막힙니다. 이걸 풀려고 나온 게 HTTP/2와 HTTP/3입니다.

세 버전, 무엇이 다른가

HTTP/1.1HTTP/2HTTP/3
전송TCPTCPQUIC(UDP)
동시 요청연결당 1개멀티플렉싱멀티플렉싱
헤더평문 반복HPACK 압축QPACK 압축
HOL 블로킹발생TCP 레벨 잔존해소
TLS선택사실상 필수내장

HTTP/1.1에서 브라우저는 연결을 6개쯤 열어 병렬화를 흉내 냈지만, 각 연결 안에서는 여전히 한 줄로 줄을 섭니다. 이 줄서기를 HOL(Head-of-Line) 블로킹이라 합니다.

HTTP/2 — 한 연결로 여러 요청

HTTP/2는 연결 하나에서 요청을 잘게 쪼갠 스트림으로 동시에 주고받습니다(멀티플렉싱). 연결을 새로 여는 비용이 사라지고 헤더도 압축됩니다.

다만 한계가 있습니다. HTTP/2는 여전히 TCP 위에서 돕니다. 패킷 하나가 유실되면 TCP가 그 패킷을 재전송할 때까지 모든 스트림이 함께 멈춥니다. 애플리케이션 레벨 줄서기는 풀었지만, TCP 레벨 HOL 블로킹은 남은 것입니다.

HTTP/3 — QUIC으로 TCP를 버린다

HTTP/3는 TCP 대신 UDP 기반 QUIC을 씁니다. QUIC은 스트림을 독립적으로 관리해서, 한 스트림에서 패킷이 유실돼도 나머지 스트림은 계속 흐릅니다. TCP HOL 블로킹이 사라집니다. TLS 1.3이 내장돼 핸드셰이크도 빠르고, 네트워크가 와이파이에서 LTE로 바뀌어도 연결을 이어갑니다(연결 마이그레이션).

언제 도입하나

  1. HTTP/2 — 대부분 기본값으로 켜라. nginx·CDN에서 listen 443 ssl http2; 한 줄이면 되고 호환성 문제가 거의 없다.
  2. HTTP/3 — 모바일·고지연·패킷 손실이 많은 환경에서 효과가 크다. CDN(CloudFront, Cloudflare)에서 토글로 켜는 게 가장 쉽다.
  3. 확인 — 실제 어떤 버전으로 응답하는지 본다.
로컬 또는 서버
curl -I --http2 https://example.com    # HTTP/2 협상 확인
curl -I --http3 https://example.com    # HTTP/3(QUIC) 확인

UDP 443 포트가 방화벽에서 막혀 있으면 HTTP/3는 조용히 HTTP/2로 폴백하니, 도입 후엔 실제 협상 버전을 꼭 확인합니다.

요점 정리

  • HTTP/1.1의 병목은 연결당 한 줄 처리(HOL 블로킹).
  • HTTP/2는 멀티플렉싱으로 풀지만 TCP 레벨 HOL은 남는다.
  • HTTP/3는 QUIC(UDP)으로 그마저 해소 — 모바일·고손실 환경에서 강점.
  • HTTP/2는 기본으로, HTTP/3는 CDN 토글로 시작하고 협상 버전을 검증하라.

각 버전의 핸드셰이크와 멀티플렉싱을 패킷 수준에서 확인하는 실습은 네트워크 트랙에서 회원가입 없이 무료로 할 수 있습니다.