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에 비해 네트워크 성능을 크게 개선하여 웹 페이지 로딩 속도를 향상시키고, 대역폭 사용을 최적화하며, 보안성을 강화했습니다.