Interview/Network
HTTP/1.1 과 HTTP/2 비교
김 정출
2024. 9. 29. 10:51
HTTP/1.1 과 HTTP/2 비교
HTTP/1.1과 HTTP/2는 웹에서 데이터를 주고받기 위한 프로토콜로, 둘은 성능과 효율성을 크게 개선한 측면에서 차이가 있습니다. HTTP/2는 HTTP/1.1의 단점을 보완하고, 특히 속도와 효율성에 중점을 두고 설계되었습니다. 아래는 두 프로토콜 간의 주요 차이점들입니다.
1. 연결 방식 (Connection Handling)
- HTTP/1.1:
- 단일 요청/응답 모델: 한 번에 하나의 요청만 처리할 수 있습니다. 즉, 하나의 연결에서 하나의 요청에 대한 응답이 완료된 후에야 다른 요청을 처리할 수 있습니다. 이를 요청-응답 순차 처리라고 합니다.
- 헤더 압축 없음: HTTP/1.1에서는 헤더 데이터가 압축되지 않고, 매번 요청마다 전체 헤더를 전송해야 합니다. 이는 비효율적이며, 특히 중복된 헤더 정보가 많을 때 문제가 됩니다.
- 연결 유지(Keep-Alive): HTTP/1.0에서는 요청마다 새로운 연결을 열었지만, HTTP/1.1부터는 Keep-Alive로 하나의 연결을 유지하여 여러 요청을 처리할 수 있게 되었습니다. 하지만 여전히 요청을 순차적으로 처리해야 하기 때문에 한계가 존재합니다.
- HTTP/2:
- 멀티플렉싱(Multiplexing): 한 연결에서 동시에 여러 요청과 응답을 처리할 수 있습니다. 이는 여러 개의 요청이 병렬로 처리될 수 있음을 의미하며, 성능이 크게 향상됩니다.
- 헤더 압축: HTTP/2에서는 HPACK이라는 헤더 압축 기법을 사용하여 중복 헤더를 줄이고, 헤더 크기를 효율적으로 관리합니다. 이를 통해 대역폭 사용을 최적화할 수 있습니다.
- 하나의 TCP 연결: HTTP/2는 하나의 TCP 연결을 통해 여러 요청을 동시에 처리할 수 있습니다. 즉, 연결을 재활용하고 추가적인 연결을 생성할 필요가 없습니다.
2. 헤더 압축 (Header Compression)
- HTTP/1.1:
- HTTP/1.1은 헤더를 압축하지 않습니다. 따라서, 요청마다 전체 헤더를 그대로 보내야 하고, 그 크기가 클수록 성능 저하가 발생할 수 있습니다. 특히, 각 요청에서 자주 반복되는 정보(예: 쿠키, 유저 에이전트)가 있을 경우, 불필요한 대역폭 사용이 늘어납니다.
- HTTP/2:
- HTTP/2는 HPACK이라는 헤더 압축 방식을 도입하여, 헤더를 효율적으로 압축합니다. 이 방식은 중복된 헤더 필드를 없애고, 변화가 없는 값은 캐시하여 대역폭 사용을 최소화합니다.
- 이를 통해 자주 사용되는 헤더(쿠키 등)의 반복 전송을 줄이고, 네트워크 트래픽을 최적화합니다.
3. 서버 푸시 (Server Push)
- HTTP/1.1:
- HTTP/1.1에서는 서버가 클라이언트 요청을 기다린 후에만 데이터를 전송할 수 있습니다. 즉, 클라이언트가 명시적으로 요청하지 않는 한 서버는 리소스를 미리 전송할 수 없습니다.
- HTTP/2:
- 서버 푸시 기능을 지원합니다. 서버는 클라이언트가 요청하지 않은 리소스(예: 자바스크립트, CSS 파일 등)를 미리 클라이언트에게 전송할 수 있습니다. 이는 클라이언트가 해당 리소스를 나중에 요청할 것이라고 예측하고 미리 보내는 방식입니다.
- 예를 들어, 클라이언트가 HTML 문서를 요청하면, 서버는 예상되는 CSS, JS 파일을 함께 푸시하여 페이지 로딩 속도를 향상시킬 수 있습니다.
4. 우선순위와 스트림 (Prioritization and Streams)
- HTTP/1.1:
- HTTP/1.1은 요청 간의 우선순위를 지정할 수 없고, 모든 요청이 동일하게 처리됩니다. 따라서 큰 리소스(이미지, 동영상) 요청이 먼저 오면 작은 리소스가 대기해야 할 수 있습니다.
- HTTP/2:
- HTTP/2는 요청 간 우선순위를 설정할 수 있습니다. 클라이언트는 특정 리소스에 더 높은 우선순위를 부여하여 먼저 처리하도록 요청할 수 있습니다.
- 또한, HTTP/2는 스트림이라는 개념을 도입하여, 하나의 연결 안에서 여러 데이터 스트림을 생성하고, 각 스트림을 독립적으로 관리할 수 있습니다.
5. 멀티플렉싱 (Multiplexing)
- HTTP/1.1:
- 하나의 연결에서는 한 번에 하나의 요청과 응답만 처리할 수 있습니다. 여러 요청을 병렬로 처리하기 위해서는 다중 연결(즉, 여러 TCP 연결)을 사용해야 합니다. 이는 네트워크 자원의 비효율적인 사용으로 이어집니다.
- HTTP/2:
- 멀티플렉싱을 지원하여 하나의 연결에서 여러 개의 요청과 응답을 동시에 처리할 수 있습니다. 이를 통해 병목 현상이 줄어들고, 네트워크 자원을 효율적으로 사용할 수 있습니다.
- 예를 들어, 하나의 큰 이미지 파일을 전송하면서 동시에 여러 작은 CSS 파일을 병렬로 전송할 수 있습니다.
6. 성능 및 효율성
- HTTP/1.1:
- HTTP/1.1에서는 요청이 차례대로 처리되기 때문에, 큰 리소스가 먼저 로드되면 작은 리소스는 대기 상태가 됩니다(헤드 오브 라인 블로킹, Head-of-Line Blocking). 이로 인해 전체 페이지 로딩 속도가 느려질 수 있습니다.
- 브라우저는 이 문제를 해결하기 위해 여러 개의 TCP 연결을 열지만, 이로 인해 추가적인 네트워크 자원이 낭비됩니다.
- HTTP/2:
- 헤드 오브 라인 블로킹 문제를 해결하기 위해 멀티플렉싱을 도입하여 성능을 개선했습니다. 여러 요청을 동시에 처리할 수 있기 때문에, 대기 시간이 줄어들고, 페이지 로딩 속도가 크게 향상됩니다.
- 또한, 연결을 재활용함으로써 TCP 연결 수를 줄여 성능 효율성을 극대화합니다.
7. 보안 (Security)
- HTTP/1.1:
- HTTP/1.1 자체는 보안 프로토콜이 아니며, 보안을 위해서는 HTTPS로 업그레이드해야 합니다. HTTPS는 HTTP/1.1 위에 TLS를 적용한 형태로, 별도의 설정이 필요합니다.
- HTTP/2:
- HTTP/2는 대부분의 구현에서 TLS 암호화를 강제합니다. 특히, 웹 브라우저에서 HTTP/2를 사용할 경우 기본적으로 HTTPS를 사용해야 하며, 이는 보안 측면에서 큰 장점입니다.
요약
특징 HTTP/1.1 HTTP/2
요청-응답 모델 | 단일 요청-응답 | 멀티플렉싱 (동시 다중 요청) |
헤더 처리 | 헤더 압축 없음 | HPACK 헤더 압축 사용 |
연결 방식 | 연결당 단일 요청 처리 | 하나의 연결에서 여러 요청 처리 |
서버 푸시 | 지원하지 않음 | 지원 (서버가 리소스 미리 전송 가능) |
우선순위 설정 | 지원하지 않음 | 요청 우선순위 설정 가능 |
성능 | 다중 연결로 성능 향상 시도 | 멀티플렉싱으로 성능 향상 |
보안 | HTTPS 필요 | 대부분 HTTPS로 사용 |
HTTP/2는 HTTP/1.1에 비해 네트워크 성능을 크게 개선하여 웹 페이지 로딩 속도를 향상시키고, 대역폭 사용을 최적화하며, 보안성을 강화했습니다.