HTTP/3와 QUIC의 개념적 정의
HTTP/3는 IETF RFC 9114 표준으로 정의되는 HTTP의 최신 버전으로, QUIC 전송 프로토콜 위에서 HTTP 의미론을 매핑하는 방식입니다. QUIC(Quick UDP Internet Connections)는 RFC 9000에 정의된 UDP 기반의 스테이트풀 전송 계층 프로토콜로, TCP와 TLS의 기능을 통합하면서도 사용자 공간에서 실행되어 더 빠른 프로토콜 진화를 가능하게 합니다.
TCP 기반 HTTP/2와의 구조적 차이
HTTP/2는 TCP 위의 단일 바이트 스트림을 기반으로 멀티플렉싱을 구현하므로, 하나의 패킷 손실이 모든 활성 스트림에 영향을 미치는 Head-of-Line 블로킹 문제가 발생합니다. 반면 HTTP/3는 QUIC의 독립적인 스트림 구조를 활용하여 패킷 손실이 해당 스트림에만 영향을 주고, 다른 스트림들은 계속 진행되도록 설계되었습니다. QUIC은 스트림별 신뢰성과 순서 보장을 제공하면서도 스트림 간에는 순서 보장이 없어, HTTP/3 프레이밍 계층이 스트림별로 독립적으로 동작할 수 있습니다.
연결 설정 및 보안의 통합 구조
HTTP/3 연결은 QUIC 연결 단계에서 TLS 1.3 핸드셰이크를 통합하여 수행됩니다. 초기 연결 설정은 0-RTT(zero round-trip time) 또는 1-RTT 핸드셰이크로 처리되며, 재개(resumption)시에는 사전 저장된 설정값을 사용하여 즉시 데이터 전송이 가능합니다. QUIC의 연결 ID 메커니즘은 클라이언트 IP 주소 변경(WiFi에서 모바일 데이터로 전환 등)시에도 기존 연결을 유지할 수 있게 하며, 이는 모바일 환경에서 TCP의 근본적인 제약을 극복하는 핵심 설계입니다.
스트림 멀티플렉싱과 흐름 제어 메커니즘
HTTP/3에서 모든 요청은 클라이언트가 시작하는 양방향 QUIC 스트림을 사용하며, 각 스트림은 독립적인 흐름 제어와 오류 복구를 거칩니다. 제어 정보는 별도의 단방향 스트림을 통해 전달되어 데이터 흐름과 분리되며, QPACK(QUIC HPACK)을 통한 헤더 압축은 스트림 간의 순서 독립성을 보장하는 별도의 인코더/디코더 스트림을 활용합니다. 서버 푸시는 MAX_PUSH_ID 프레임으로 클라이언트가 세밀하게 제어할 수 있습니다.