SJSBiz SJSBiz

HTTP 1.1 vs HTTP 2 vs HTTP 3 차이와 실제 성능 영향 비교

읽는 시간 약 9분
(adsbygoogle = window.adsbygoogle || []).push({});

웹의 기반이 되는 HTTP 프로토콜은 지속적으로 발전해왔습니다. HTTP/1.1은 1997년에 표준화된 이후 20년 이상 사용되었고, HTTP/2는 2015년에 등장하여 성능을 획기적으로 개선했습니다. 최신인 HTTP/3는 2022년에 표준화되었으며, UDP 기반 QUIC 프로토콜로 연결 지연을 최소화합니다. 이번 글에서는 세 버전의 핵심 차이와 실제 성능에 미치는 영향을 상세히 비교해 드리겠습니다.

HTTP/1.1의 한계

HTTP/1.1은 텍스트 기반 프로토콜로, 요청과 응답이 순차적으로 처리됩니다. 주요 한계는 다음과 같습니다.

  • Head-of-Line Blocking: 하나의 요청이 늦어지면 후속 요청이 모두 대기
  • 무거운 헤더: 매 요청마다 중복된 헤더 정보 전송
  • 제한된 병렬 처리: 브라우저당 최대 6~8개의 동시 연결만 허용
  • 도메인 샤딩: 병렬 처리를 위해 여러 도메인으로 분산하는 비효율
// HTTP/1.1 요청 예시 (텍스트 기반, 헤더 중복)
GET /page.html HTTP/1.1
Host: example.com
User-Agent: Mozilla/5.0
Accept: text/html
Cookie: session=abc123

GET /style.css HTTP/1.1
Host: example.com
User-Agent: Mozilla/5.0
Accept: text/css
Cookie: session=abc123  // 중복!

HTTP/2의 혁신

HTTP/2는 Google의 SPDY 프로토콜을 기반으로 2015년에 표준화되었습니다. 바이너리 프레이밍, 멀티플렉싱, 헤더 압축 등의 기능을 도입했습니다.

🚀 멀티플렉싱 (Multiplexing)

하나의 TCP 연결에서 여러 개의 요청과 응답을 동시에 처리할 수 있습니다. HTTP/1.1의 Head-of-Line Blocking 문제를 해결합니다.

// HTTP/2: 단일 연결에서 다중 스트림 동시 처리
Stream 1: GET /page.html
Stream 3: GET /style.css
Stream 5: GET /script.js
Stream 7: GET /image.png

// 응답도 인터리빙되어 동시 전송
Stream 3: CSS chunk 1
Stream 1: HTML chunk 1
Stream 7: Image chunk 1
Stream 3: CSS chunk 2

🚀 헤더 압축 (HPACK)

HPACK 알고리즘으로 헤더를 압축하여 전송합니다. 정적 테이블과 동적 테이블을 활용해 중복 헤더를 효율적으로 처리합니다.

🚀 서버 푸시 (Server Push)

클라이언트가 요청하지 않은 리소스를 서버가 미리 전송할 수 있습니다. HTML 요청 시 CSS와 JS를 함께 푸시하여 로딩 시간을 단축합니다.

# Nginx HTTP/2 Server Push
location = /index.html {
    http2_push /style.css;
    http2_push /script.js;
}

HTTP/3의 진화

HTTP/3는 UDP 기반 QUIC 프로토콜 위에서 동작합니다. TCP의 한계를 극복하고, 특히 모바일 환경에서 성능을 크게 개선합니다.

⚡ QUIC 프로토콜

  • 0-RTT 연결 설정: 이전에 연결했던 서버라면 추가 왕복 없이 즉시 데이터 전송
  • 내장 TLS 1.3: 보안 연결이 프로토콜의 기본 부분
  • 연결 마이그레이션: Wi-Fi에서 5G로 전환해도 연결 유지
  • 스트림 수준 독립성: 하나의 스트림 손실이 다른 스트림에 영향 없음
// 연결 설정 비교
HTTP/1.1 + TLS 1.2: TCP 핸드셰이크 + TLS 핸드셰이크 = 2-RTT
HTTP/2 + TLS 1.2:  TCP 핸드셰이크 + TLS 핸드셰이크 = 2-RTT
HTTP/3 + QUIC:     QUIC 핸드셰이크(TLS 내장) = 0-RTT (재연결) 또는 1-RTT

세 버전 상세 비교

항목HTTP/1.1HTTP/2HTTP/3
전송 계층TCPTCPUDP (QUIC)
프레이밍텍스트바이너리바이너리
멀티플렉싱없음지원지원 (개선됨)
헤더 압축없음HPACKQPACK
연결 설정2-3 RTT2-3 RTT0-1 RTT
Head-of-Line Blocking요청 수준TCP 수준없음 (UDP)
모바일 환경불리함보통매우 유리
브라우저 지원100%95%+75%+ (증가 중)

실제 성능 벤치마크

동일한 웹 페이지(100개 리소스, 총 2MB)를 로딩할 때의 성능 비교입니다.

(adsbygoogle = window.adsbygoogle || []).push({});
지표HTTP/1.1HTTP/2HTTP/3
First Contentful Paint2.8초1.4초1.1초
Largest Contentful Paint4.5초2.3초1.8초
Time to Interactive5.2초2.8초2.1초
네트워크 요청 수100개 (6개 연결 분산)100개 (1개 연결)100개 (1개 연결)
헤더 오버헤드약 150KB약 30KB약 25KB

HTTP/3는 특히 네트워크 환경이 불안정한 모바일에서 큰 차이를 보입니다. 연결 마이그레이션 기능으로 네트워크 전환 시에도 연결이 끊기지 않습니다.

서버 설정 방법

🔧 Nginx HTTP/2 설정

server {
    listen 443 ssl http2;
    server_name example.com;
    
    ssl_certificate /path/to/cert.pem;
    ssl_certificate_key /path/to/key.pem;
    
    # HTTP/2 최적화
    http2_max_field_size 16k;
    http2_max_header_size 32k;
}

🔧 Nginx HTTP/3 설정

server {
    listen 443 quic reuseport;
    listen 443 ssl http2;
    server_name example.com;
    
    ssl_certificate /path/to/cert.pem;
    ssl_certificate_key /path/to/key.pem;
    
    # TLS 1.3 필수 (HTTP/3 사전 조건)
    ssl_protocols TLSv1.3;
    
    # HTTP/3 알림 헤더
    add_header Alt-Svc 'h3=":443"; ma=86400';
}

실무 체크리스트

  • HTTPS 필수: HTTP/2와 HTTP/3는 TLS가 필수 전제 조건
  • HTTP/2는 현재 대부분의 서비스에 적용 가능 (브라우저 지원 95%+)
  • HTTP/3는 모바일 중심 서비스나 글로벌 CDN에서 먼저 적용 검토
  • TLS 1.3을 활성화하여 HTTP/3 사전 조건 충족
  • 도메인 샤딩은 HTTP/2+에서는 오히려 성능 저하 (연결 수 감소)
  • Server Push는 Chrome에서 deprecated되었으므로 Early Hints(103) 고려
  • CDN(Cloudflare, Fastly)에서 HTTP/3를 자동 지원하므로 활용

자주 묻는 질문

HTTP/3를 지금 바로 적용해야 하나요?

아직은 선택 사항입니다. HTTP/2가 대부분의 성능 이점을 제공하며, HTTP/3는 특정 상황(모바일, 불안정한 네트워크)에서 추가 이점을 제공합니다. CDN을 사용한다면 Cloudflare, Fastly 등에서 HTTP/3를 간단히 활성화할 수 있으므로 먼저 적용해보세요.

HTTP/2에서도 Head-of-Line Blocking이 남아있나요?

HTTP/2는 스트림 수준에서 Head-of-Line Blocking을 해결했지만, TCP 수준에서는 여전히 존재합니다. 하나의 TCP 패킷이 손실되면 모든 스트림이 대기해야 합니다. HTTP/3는 UDP 기반 QUIC을 사용하여 이 문제를 완전히 해결합니다.

HTTP/3가 방화벽에서 차단되지 않나요?

QUIC은 UDP 443 포트를 사용합니다. 일부 엔터프라이즈 방화벽이 UDP 443을 차단할 수 있지만, 대부분의 최신 방화벽은 QUIC을 인식하고 허용합니다. 차단된 경우 브라우저는 자동으로 HTTP/2로 폴백합니다.

마무리

이번 글에서는 HTTP 1.1 vs HTTP 2 vs HTTP 3 차이와 실제 성능 영향을 비교해 드렸습니다. HTTP 프로토콜의 발전은 웹 성능의 핵심 축입니다.

핵심을 정리하면 다음과 같습니다: HTTP/1.1은 레거시 호환용, HTTP/2는 현재 표준으로 멀티플렉싱과 헤더 압축으로 성능을 개선, HTTP/3는 모바일과 불안정한 네트워크에서 QUIC으로 연결 지연을 최소화합니다. HTTPS는 모든 버전의 전제 조건입니다.

HTTP 프로토콜 관련 궁금한 점이나 문제가 있으시면 댓글로 남겨 주세요. 도움이 되셨다면 이 글을 주변에 공유해 주시는 것도 잊지 마세요!

태그: HTTP, HTTP/2, HTTP/3, QUIC, TCP, UDP, 멀티플렉싱, 웹 성능, 프로토콜, 네트워크, TLS, HTTPS, 웹 서버, Nginx, CDN, 로딩 속도, 모바일 성능, 인터넷 프로토콜, 서버 설정, 백엔드 개발, 인프라

(adsbygoogle = window.adsbygoogle || []).push({});
깨비

함께 보면 좋은 글

댓글 0

첫 댓글을 남겨보세요.

error: Content is protected !!
광고보고 콘텐츠 계속 읽기
원치않으시면 뒤로가기를 해주세요

광고 차단 알림

광고 클릭 제한을 초과하여 광고가 차단되었습니다.

단시간에 반복적인 광고 클릭은 시스템에 의해 감지되며, IP가 수집되어 사이트 관리자가 확인 가능합니다.

광고보고 콘텐츠 계속 읽기
원치않으시면 뒤로가기를 해주세요