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/3는 UDP 기반의 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.1과 HTTP/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' 카테고리의 다른 글
정적, 동적 서버 (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 |