본문 바로가기
Network Study

HTTP, HTTP/2, HTTP/3의 차이점

by xogns93 2024. 9. 30.

HTTP/1.1, HTTP/2, 그리고 HTTP/3는 웹에서 데이터를 전송하는 데 사용되는 프로토콜로, 각각의 버전은 성능과 효율성을 개선하기 위해 진화해왔습니다. 각 버전의 차이를 자세히 알아보면 다음과 같습니다.


1. HTTP/1.1

HTTP/1.1은 현재까지도 많이 사용되는 프로토콜 버전입니다. HTTP/1.0의 문제점을 해결하기 위해 등장했으며, 새로운 웹 환경에 맞게 여러 기능들이 추가되었습니다.

주요 특징:

  • 요청/응답 모델: HTTP/1.1은 요청과 응답이 1:1로 이루어지는 방식입니다. 클라이언트가 요청을 보내면, 서버는 그 요청에 대한 응답을 보내고, 그 과정이 끝나면 연결이 종료됩니다.
  • 지속 연결(persistent connection): HTTP/1.0에서는 요청을 할 때마다 새로운 TCP 연결을 설정해야 했습니다. 하지만 HTTP/1.1에서는 지속 연결이 가능하여, 하나의 TCP 연결을 통해 여러 요청을 처리할 수 있게 했습니다. 이로 인해 성능이 개선되었습니다.
  • 파이프라이닝(pipelining): 여러 요청을 연속해서 보낼 수 있지만, 응답 순서가 엄격히 유지되어야 해서 성능 향상에 큰 효과를 보지 못했고, 일부 구현에서 문제가 발생하여 널리 사용되지는 않았습니다.

한계:

  • 헤드 오브 라인 블로킹(Head-of-line blocking): 한 요청의 응답이 지연되면, 같은 연결을 통해 보낸 모든 요청의 응답이 지연되는 문제가 있습니다.
  • 멀티플렉싱 불가: 한 연결에서 동시에 여러 요청을 처리하지 못하고, 순차적으로 처리해야 하는 제한이 있습니다.

2. HTTP/2

HTTP/2는 HTTP/1.1의 성능 문제를 해결하기 위해 등장했습니다. 이 버전은 속도 향상효율성을 목표로 다양한 최적화 기법이 도입되었습니다.

주요 특징:

  • 멀티플렉싱(Multiplexing): 하나의 TCP 연결에서 여러 요청과 응답을 동시에 처리할 수 있습니다. 이를 통해 요청 하나가 지연되어도 다른 요청들이 영향을 받지 않으며, 병렬 처리가 가능해졌습니다.
  • 헤더 압축: HTTP/2에서는 HPACK이라는 헤더 압축 기술을 사용하여, 요청과 응답의 크기를 줄여 전송 효율을 높입니다. HTTP/1.1에서는 요청마다 반복되는 헤더 정보들이 전송되어 비효율적이었는데, 이를 개선한 것입니다.
  • 서버 푸시(Server Push): 서버는 클라이언트가 요청하지 않았더라도, 클라이언트가 필요할 것으로 예상되는 리소스(예: CSS, JS 파일)를 미리 전송할 수 있습니다. 이로 인해 클라이언트가 자원을 더 빨리 받을 수 있게 됩니다.
  • 지속 연결: HTTP/1.1처럼 TCP 연결을 유지하면서 여러 요청을 처리할 수 있지만, 멀티플렉싱을 통해 더 많은 요청을 동시에 처리할 수 있습니다.

한계:

  • 헤드 오브 라인 블로킹(Head-of-line blocking): HTTP/2는 여전히 TCP 기반이기 때문에, TCP의 헤드 오브 라인 블로킹 문제가 완전히 해결되지는 않았습니다. TCP 연결에서 하나의 패킷이 손실되면 그 패킷을 복구할 때까지 나머지 패킷들도 지연됩니다.

3. HTTP/3

HTTP/3UDP 기반의 QUIC(Quick UDP Internet Connections) 프로토콜을 사용하여, HTTP/2에서 남아 있는 TCP의 한계를 극복하기 위해 개발된 버전입니다.

주요 특징:

  • UDP 기반의 QUIC: HTTP/3는 TCP 대신 UDP를 기반으로 한 QUIC 프로토콜을 사용합니다. QUIC은 TCP의 신뢰성과 UDP의 빠른 전송 속도를 결합하여 설계되었습니다.
  • 헤드 오브 라인 블로킹 해결: TCP에서 발생하는 헤드 오브 라인 블로킹 문제를 해결합니다. QUIC은 패킷 손실이 발생하더라도 나머지 데이터는 별도로 처리할 수 있으므로, 전송 효율이 높아집니다.
  • 빠른 연결 설정: TCP는 3-way handshake라는 과정으로 연결을 설정하지만, QUIC은 이를 단축하여 연결 설정 속도가 훨씬 빠릅니다. 특히, TLS 보안을 내장하여 추가적인 보안 설정 없이도 안전하게 연결을 설정할 수 있습니다.
  • 멀티플렉싱 개선: HTTP/2의 멀티플렉싱 기능은 유지하면서도, QUIC을 사용하여 더욱 효율적으로 요청을 처리할 수 있습니다.
  • 모바일 네트워크에 최적화: 네트워크가 자주 변경되는 모바일 환경에서의 성능이 향상됩니다. TCP 연결은 네트워크가 변경될 때마다 새로 설정해야 하지만, QUIC은 연결을 계속 유지할 수 있습니다.

요약 비교

특징 HTTP/1.1 HTTP/2 HTTP/3
프로토콜 TCP 기반 TCP 기반 UDP 기반 (QUIC)
멀티플렉싱 지원하지 않음 지원 지원
헤드 블로킹 발생 TCP 기반으로 여전히 발생 해결됨
헤더 압축 없음 HPACK 압축 QPACK 압축
서버 푸시 없음 지원 지원
연결 설정 속도 느림 (3-way handshake 필요) 느림 (3-way handshake 필요) 빠름 (QUIC 사용)

결론

  • HTTP/1.1은 전통적인 요청/응답 기반의 프로토콜로, 성능 면에서 한계가 있었지만 여전히 많이 사용됩니다.
  • HTTP/2는 멀티플렉싱과 헤더 압축 등 여러 최적화 기법을 도입하여 HTTP/1.1의 성능 문제를 해결했으나, 여전히 TCP 기반의 한계가 존재합니다.
  • HTTP/3는 UDP 기반의 QUIC 프로토콜을 사용하여, 더 빠르고 안정적인 연결과 데이터를 제공하며, 특히 모바일 환경에서의 성능이 크게 향상됩니다.

1. HTTP와 TCP 프로토콜

전통적인 HTTP/1.1HTTP/2는 **TCP(Transmission Control Protocol)**를 기반으로 동작합니다. TCP는 신뢰성 있는 데이터 전송을 보장하기 위해 패킷 손실 복구, 데이터 순서 보장 등의 기능을 제공합니다.

  • TCP 특징:
    • 연결 지향적: 클라이언트와 서버 간에 안정적인 연결을 설정한 후 데이터를 주고받습니다.
    • 신뢰성 보장: 전송된 데이터가 손실되지 않도록 보장하며, 손실된 데이터는 재전송됩니다.
    • 속도: 신뢰성과 안정성을 위해 데이터를 송수신할 때 확인 절차가 필요하므로 다소 느릴 수 있습니다.

이러한 TCP의 특성 덕분에 HTTP는 안정적인 데이터 전송을 보장하지만, 전송 속도나 지연(latency) 문제가 발생할 수 있습니다.

2. HTTP/3와 QUIC(UDP 기반)

HTTP/3는 이전 버전들과 다르게 **UDP(User Datagram Protocol)**를 기반으로 한 QUIC(Quick UDP Internet Connections) 프로토콜을 사용합니다. UDP연결 지향적이지 않고, 신뢰성도 보장하지 않지만, 빠른 속도를 제공하는 프로토콜입니다. 이를 바탕으로 QUIC은 UDP의 단점을 보완하면서, TCP보다 빠른 전송 속도를 제공합니다.

  • QUIC 특징:
    • 빠른 연결 설정: TCP와 달리 연결 설정이 훨씬 빠릅니다. TCP는 연결을 설정하기 위해 3-way handshake라는 과정을 거쳐야 하지만, QUIC은 그 과정을 없애거나 최소화하여 더 빠르게 연결을 설정합니다.
    • 멀티플렉싱 개선: HTTP/2에서도 멀티플렉싱이 가능하지만, TCP는 하나의 스트림에 문제가 생기면 전체 연결에 영향을 줄 수 있습니다. QUIC은 이를 개선하여, 스트림 하나에 문제가 생겨도 다른 스트림에 영향을 주지 않습니다.
    • UDP 기반: UDP는 연결 없이 데이터를 전송하는데, QUIC은 이를 기반으로 하면서도 TCP처럼 신뢰성과 보안을 제공합니다. 따라서 UDP의 빠른 속도에 TCP의 안정성을 결합한 것이 QUIC입니다.

요약

  • HTTP/1.1, HTTP/2: TCP 기반으로 신뢰성 있는 연결과 데이터 전송을 보장하지만 속도가 다소 느릴 수 있습니다.
  • HTTP/3: UDP 기반QUIC 프로토콜을 사용하여, 더 빠르고 효율적인 데이터 전송을 가능하게 합니다.

'Network Study' 카테고리의 다른 글

정적, 동적 서버  (2) 2024.10.07
쿠키, 세션, JSON 웹 토큰(JWT)  (1) 2024.09.30
텍스트 인코딩 방식과 HTTP의 발전  (0) 2024.09.29
HTTP 요청/응답 구조 (프로토콜, 메서드)  (1) 2024.09.27
HTTP와 HTTPS  (2) 2024.09.27