Waylog Blog

HTTP의 진화: HTTP/1.1부터 HTTP/3까지

Network

웹의 혈관인 HTTP 프로토콜은 더 빠르게, 더 효율적으로 데이터를 나르기 위해 끊임없이 진화해 왔습니다. 우리가 매일 쓰는 웹 브라우저 뒤단에서 일어난 혁신적인 변화들을 살펴봅니다.

1. HTTP/1.1 : 표준의 정립 (1997)

가장 오랫동안 사용된 버전입니다.

  • Keep-Alive: TCP 연결을 맺고 끊는 비용을 아끼기 위해 연결을 재사용합니다.
  • Pipelining: 요청을 순차적으로 보내되 응답을 기다리지 않고 미리 보낼 수 있습니다. (하지만 HOL Blocking 문제로 잘 안 쓰임)
  • 단점: HOL(Head of Line) Blocking. 앞선 요청의 응답이 늦어지면 뒤의 요청들도 줄줄이 막힙니다. 또한 헤더(Header)가 매 요청마다 중복되어 전송되어 무겁습니다.

2. HTTP/2 : 성능의 도약 (2015)

구글의 SPDY 프로토콜을 기반으로 만들어졌습니다. 텍스트가 아닌 바이너리 프레이밍(Binary Framing) 계층을 도입했습니다.

  • Multiplexing (다중화): 하나의 TCP 연결로 여러 개의 스트림(Stream)을 동시에 주고받을 수 있습니다. HOL Blocking 문제를 애플리케이션 계층에서 해결했습니다.
  • Header Compression (HPACK): 중복되는 헤더를 압축하여 전송량을 줄였습니다.
  • Server Push: 클라이언트가 요청하지 않아도 필요한 리소스(CSS, JS 등)를 서버가 미리 밀어 넣어줄 수 있습니다.

3. HTTP/3 : TCP를 버리다 (2022~)

HTTP/2는 여전히 TCP 위에서 동작하기 때문에, 패킷 손실이 발생하면 TCP 레벨에서의 재전송 대기 때문에 전체 스트림이 느려지는 문제(TCP HOL Blocking)가 있었습니다. 그래서 HTTP/3은 TCP를 버리고 UDP 기반의 QUIC 프로토콜을 채택했습니다.

  • 빠른 연결 설정 (0-RTT): 첫 연결 시 핸드셰이크 과정을 획기적으로 줄였습니다.
  • 독립적인 스트림: UDP는 순서를 보장하지 않으므로, 하나의 스트림에서 패킷이 손실되어도 다른 스트림에 영향을 주지 않습니다.
  • 네트워크 전환 대처: Wi-Fi에서 LTE로 바뀌어도 연결 식별자(Connection ID)를 유지하므로 끊김이 없습니다.

웹 속도 최적화는 이제 코드 레벨을 넘어 프로토콜 레벨로 내려오고 있습니다.