HTTP/2의 특징에 대해 설명해주세요.
분야: 프론트엔드
HTTP 2.0이라고도 불리는 HTTP/2는 기존 HTTP/1.1의 성능 한계를 개선하기 위해 등장한 프로토콜입니다. 로드 속도를 향상시키고 네트워크 자원을 효율적으로 사용할 수 있도록 여러 기능들이 추가되었습니다.
먼저, 가장 핵심적인 변화는 Multiplexing입니다. HTTP/1.1에서도 Pipelining을 통해 하나의 TCP 연결을 여러 요청에 재사용할 수는 있었습니다. 하지만 각 요청에 대한 응답이 순차적으로 처리되어야 했기 때문에 동시에 여러 요청을 병렬적으로 처리하는 데는 한계가 있었습니다. 반면, HTTP/2는 하나의 연결 안에서 여러 요청과 응답을 서로 독립적인 스트림으로 처리할 수 있도록 설계되어, 완전한 병렬 처리가 가능해졌습니다. 이로 인해 리소스 로딩 속도가 크게 개선됐습니다.
다음 주요 특징은 헤더 압축입니다. HTTP/1.1은 매 요청마다 거의 동일한 헤더 정보를 반복적으로 전송했기 때문에, 네트워크 상에서 많은 양의 데이터가 불필요하게 오가는 문제가 있었습니다. HTTP/2에서는 HPACK이라는 압축 방식을 적용하여, 이러한 중복을 줄이고 Huffman coding을 통해 데이터 전송량을 줄였습니다.
또한, HTTP/2는 서버 푸시 기능을 제공합니다. 이는 클라이언트가 특정 HTML 문서를 요청했을 때, 서버가 해당 페이지에 필요하다고 예상되는 CSS나 JavaScript 파일 등을 클라이언트가 요청하지 않았더라도 미리 함께 전송하는 기능입니다. 이를 통해 초기 페이지 렌더링 속도를 개선할 수 있는 장점이 있습니다.
HTTP/1.1의 Pipelining이 무엇인지 보충 설명해주실 수 있나요? 🤔
Pipelining은 클라이언트가 한 번의 연결에 여러 요청을 연달아 보내고, 서버는 그 요청들을 처리해 순서대로 응답을 주는 방식입니다. Pipelining은 keep-alive 연결 위에서 작동합니다.
Pipelining 덕분에 클라이언트는 첫 번째 응답을 기다리지 않고 두 번째, 세 번째 요청을 보낼 수 있게 되어 성능이 일부 개선됐습니다. 하지만, 서버가 응답을 반드시 요청 순서대로 반환해야 하므로 여전히 HOL Blocking 문제로 인한 성능 이슈가 존재합니다.