에듀테크 프로젝트 대시보드
QUIC & HTTP/3
HTTP/1.1과 HTTP/2는 TCP 위에서 동작한다. TCP는 신뢰성 있는 순서 보장 전송을 해주지만,
연결 수립에 왕복이 필요하고 패킷 하나가 사라지면 전체 스트림이 멈추는 한계가 있다.
QUIC은 이 두 문제를 UDP 위에 새 전송 계층을 직접 구현해서 해결했고,
HTTP/3는 이 QUIC 위에서 동작하는 HTTP다. 아래에서 무엇이 달라졌는지 하나씩 살펴보자.
한 연결 안에서 여러 요청(스트림)을 동시에 보내는 것을 멀티플렉싱이라 한다. TCP는 하나의 순서 보장 바이트 스트림이라, 그 안 어딘가에서 패킷 하나만 사라져도 재전송될 때까지 뒤에 있는 모든 스트림의 데이터가 함께 멈춘다. QUIC은 스트림마다 독립적으로 순서를 보장해서, 사고가 난 스트림만 멈춘다. 버튼을 눌러 스트림 2의 패킷 하나가 사라졌을 때 무슨 일이 벌어지는지 비교해 보자.
TCP 연결은 출발지 IP·포트 + 목적지 IP·포트 4개 값(4-tuple)으로 식별된다.
Wi-Fi에서 LTE로 네트워크를 바꾸면 내 IP가 바뀌므로 이 4-tuple이 깨져 연결이 끊긴다.
QUIC은 대신 Connection ID라는 별도의 값으로 연결을 식별하기 때문에,
IP가 바뀌어도 같은 Connection ID로 끊김 없이 이어갈 수 있다.
| 구분 | HTTP/1.1 | HTTP/2 | HTTP/3 |
|---|---|---|---|
| 전송 계층 | TCP | TCP | QUIC (UDP) |
| 암호화 | 선택 (별도 TLS) | 사실상 필수 (별도 TLS) | 기본 내장 (TLS 1.3) |
| 멀티플렉싱 | 없음 (연결당 1요청) | 단일 스트림 위 멀티플렉싱 | 스트림별 독립 멀티플렉싱 |
| HOL 블로킹 | 있음 (요청 단위) | 있음 (TCP 계층) | 스트림 단위만 영향 |
| 연결 재개 | 매번 새로 | 매번 새로 | 0-RTT 가능 |
| 네트워크 전환 | 연결 끊김 | 연결 끊김 | Connection ID로 유지 |
RFC 9000(QUIC)과 RFC 9114(HTTP/3)로 표준화됐고,
구글·유튜브·페이스북·클라우드플레어 등이 이미 대규모로 사용 중이다.