Computer Science/Network

HTTP 버전 별 특징

guwon2 2025. 10. 10. 16:15

HTTP 버전별 변화 정리


HTTP(HyperText Transfer Protocol)란?

웹에서 브라우저와 서버가 데이터를 주고받는 애플리케이션 계층 프로토콜

인터넷이 발전하면서 HTTP는 여러 버전으로 개선되어 왔고, 각 버전에 따라 웹의 구조, 성능, 보안성이 달라진다.


HTTP/1.0

주요 특징

  • 1 TCP 연결 = 1 HTTP 요청: 요청마다 새로운 TCP 연결 생성
  • RTT(Round Trip Time) 증가: 연결 설정과 해제가 반복되어 지연 발생
  • 단순한 요청/응답 구조: 상태를 유지하지 않는 무상태 프로토콜

RTT 증가 문제 해결 방법

당시 개발자들은 성능 향상을 위해 다양한 최적화 기법을 사용함:

1. 이미지 스프라이트(Image Spriting)

/* 여러 이미지를 하나로 합쳐서 HTTP 요청 수 감소 */
.icon-home { 
    background: url('sprites.png') 0 0; 
}
.icon-user { 
    background: url('sprites.png') -20px 0; 
}

2. 코드 압축(Minification)

// 압축 전
function calculateSum(a, b) {
    return a + b;
}

// 압축 후
function calculateSum(a,b){return a+b}

3. Base64 인라인 이미지

<!-- 작은 이미지를 Base64로 인코딩하여 HTML에 직접 삽입 -->
<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mP8z8BQDwAEhQGAhKmMIQAAAABJRU5ErkJggg==" alt="1px 투명 이미지">

HTTP/1.1 - 연결 재사용 등장

주요 개선사항

1. Persistent Connection (Keep-Alive)

Connection: keep-alive
Keep-Alive: timeout=5, max=1000
  • 하나의 TCP 연결로 여러 HTTP 요청 처리
  • 연결 설정/해제 오버헤드 크게 감소

2. HTTP 파이프라이닝

  • 여러 요청을 순서대로 전송하고 순차적으로 응답 받기
  • 응답 대기 시간 단축

3. 향상된 캐싱

Cache-Control: max-age=3600, public
ETag: "33a64df551425fcc55e4d42a148795d9f25f89d4"
Last-Modified: Wed, 21 Oct 2015 07:28:00 GMT

한계점

HOL(Head Of Line) Blocking

요청 순서: [요청1] → [요청2] → [요청3]
응답 지연: [지연] ← [대기중] ← [대기중]
  • 첫 번째 요청이 지연되면 뒤따르는 모든 요청이 대기
  • 파이프라이닝의 치명적 단점

헤더 중복

GET /api/users HTTP/1.1
Host: api.example.com
User-Agent: Mozilla/5.0...
Accept: application/json
Cookie: session=abc123...

GET /api/posts HTTP/1.1
Host: api.example.com        ← 중복
User-Agent: Mozilla/5.0...   ← 중복  
Accept: application/json     ← 중복
Cookie: session=abc123...    ← 중복

HTTP/2 - 멀티플렉싱

1. 멀티플렉싱(Multiplexing)

하나의 TCP 연결에서:
스트림1: [요청A] ←→ [응답A]
스트림2: [요청B] ←→ [응답B]  
스트림3: [요청C] ←→ [응답C]
  • 여러 요청/응답이 동시에 처리
  • HOL Blocking 문제 해결

2. 헤더 압축 (HPACK)

HTTP/1.1: 500-800 bytes
HTTP/2:   50-100 bytes (85% 압축률)
  • 중복 헤더 제거
  • 허프만 코딩으로 압축

3. 서버 푸시 (Server Push)

// 서버에서 클라이언트 요청 없이 리소스 전송
app.get('/', (req, res) => {
    // HTML 요청 시 CSS, JS도 함께 푸시
    res.push('/css/style.css');
    res.push('/js/app.js');
    res.sendFile('index.html');
});

4. 스트림 우선순위

우선순위 높음: CSS, JavaScript
우선순위 중간: HTML, 중요 이미지  
우선순위 낮음: 기타 이미지, 폰트

실무 적용

Nginx 설정

server {
    listen 443 ssl http2;

    # HTTP/2 설정
    http2_max_concurrent_streams 128;
    http2_max_field_size 16k;

    # 서버 푸시 설정
    location = /index.html {
        http2_push /css/main.css;
        http2_push /js/app.js;
    }
}

HTTPS - 보안의 필수 요소

HTTPS의 중요성

HTTPS는 HTTP에 SSL/TLS 암호화 계층을 추가한 보안 프로토콜

SSL/TLS 핸드셰이크 과정

1. Client Hello (지원하는 암호화 방식 전송)
2. Server Hello (선택된 암호화 방식 + 인증서)
3. 인증서 검증 (CA 확인)
4. 대칭키 교환 (공개키로 암호화)
5. 암호화된 통신 시작

HTTPS의 이점

1. 보안 강화

  • 기밀성: 데이터 암호화로 도청 방지
  • 무결성: 데이터 변조 감지
  • 인증: 서버 신원 확인

2. SEO 향상

Google 검색 순위 요소:
HTTPS 사용 시 가산점
HTTP 사용 시 "안전하지 않음" 표시

3. 최신 웹 기능 사용

// HTTPS에서만 사용 가능한 기능들
navigator.geolocation.getCurrentPosition();  // 위치 정보
navigator.mediaDevices.getUserMedia();       // 카메라/마이크
if ('serviceWorker' in navigator) {          // 서비스 워커
    navigator.serviceWorker.register('/sw.js');
}

HTTP/3 - UDP 기반의 패러다임

1. UDP 기반 + QUIC 프로토콜

기존: HTTP/2 over TCP over IP
신규: HTTP/3 over QUIC over UDP over IP

2. 연결 설정 최적화

TCP + TLS: 3 RTT (3-way handshake + TLS handshake)
QUIC:      0-1 RTT (연결과 암호화 동시)

3. 독립적인 스트림

TCP: 패킷 하나 손실 시 모든 스트림 블로킹
QUIC: 스트림별 독립적 처리, 블로킹 없음

주요 특징

1. 빠른 핸드셰이크

// 0-RTT 연결 재개
const response = await fetch('https://api.example.com', {
    // 이전 연결 정보로 즉시 데이터 전송
});

2. 연결 마이그레이션

WiFi 연결 (192.168.1.100)
    ↓ 이동 중
LTE 연결 (203.251.1.50)
    ↓ QUIC 연결 ID로 세션 유지
끊김 없는 서비스 계속

3. 향상된 오류 복구

패킷 손실 감지: 3ms (TCP: 200ms)
재전송 시간: 즉시 (TCP: 지연)

HTTP/3 지원 현황

브라우저 지원

  • Chrome 87+
  • Firefox 88+
  • Safari 14+
  • Edge 87+

서버 지원

# Nginx HTTP/3 설정 (1.25.0+)
server {
    listen 443 quic reuseport;
    listen 443 ssl http2;

    # HTTP/3 헤더 추가
    add_header Alt-Svc 'h3=":443"; ma=86400';
}

버전별 비교

성능 비교표

특성 HTTP/1.0 HTTP/1.1 HTTP/2 HTTP/3
연결 방식 요청마다 새 연결 Keep-Alive 멀티플렉싱 QUIC 멀티플렉싱
HOL Blocking 심각 있음 해결됨 완전 해결
헤더 압축 없음 없음 HPACK QPACK
서버 푸시 없음 없음 지원 지원
보안 선택 선택 권장 필수
연결 설정 3 RTT 3 RTT 3 RTT 0-1 RTT

선택 가이드

HTTP/1.1 사용 시기

레거시 시스템 호환성 필요
단순한 API 서버
리소스가 매우 제한적인 환경

HTTP/2 도입 시기 (현재 표준)

현대적인 웹 애플리케이션
리소스가 많은 사이트
성능 최적화가 중요한 서비스
HTTPS 사용 중인 사이트

HTTP/3 고려 시기

모바일 사용자가 많은 서비스
실시간성이 중요한 애플리케이션
글로벌 서비스 (높은 지연시간)
최신 기술 도입에 적극적인 조직

마무리

핵심 포인트 정리

  1. HTTP/1.0 → 연결당 하나의 요청, RTT 증가 문제
  2. HTTP/1.1 → Keep-Alive로 연결 재사용, 여전한 HOL Blocking
  3. HTTP/2 → 멀티플렉싱으로 HOL Blocking 해결, 헤더 압축
  4. HTTPS → 보안과 SEO의 필수 요소
  5. HTTP/3 → UDP 기반으로 근본적 성능 향상

관련 링크