1. 웹 성능 향상을 위한 새로운 기준, HTTP 2.0
웹 페이지를 구성하는 다양한 요소(HTML, CSS, 이미지 등)를 효율적으로 가져와 빠르게 보여주는 것은 웹 개발의 핵심 과제입니다. 과거 HTTP 1.1 프로토콜은 한 번에 하나의 요소만 가져올 수 있어 페이지 로딩 속도가 느리고, 여러 연결을 동시에 열어야 하는 등의 한계점이 있었습니다. 이러한 문제를 해결하기 위해 등장한 것이 바로 HTTP 2.0입니다.
HTTP 2.0은 Google에서 개발한 SPDY 프로토콜을 기반으로 표준화된 프로토콜로, 웹 성능을 획기적으로 향상시켰습니다. 하나의 TCP 연결을 통해 여러 개의 요청을 동시에 처리하고, 헤더를 효율적으로 압축하며, 서버가 필요한 리소스를 미리 전송하는 등 다양한 기능을 제공합니다.
2. HTTP 2.0의 핵심 기능
- 멀티플렉싱: 하나의 TCP 연결을 통해 여러 개의 스트림을 동시에 처리하여 페이지 로딩 속도를 크게 향상시킵니다. 각 스트림은 독립적인 요청과 응답을 담당하며, 우선순위를 부여하여 중요한 리소스를 먼저 처리할 수 있습니다.
- 헤더 압축: HPACK 알고리즘을 사용하여 HTTP 헤더를 효율적으로 압축하여 네트워크 트래픽을 줄이고, 페이지 로딩 속도를 향상시킵니다. 이전에 전송된 헤더 정보를 기반으로 중복되는 부분을 생략하여 헤더 크기를 최소화합니다.
- 서버 푸시: 서버가 클라이언트의 요청을 받기 전에 필요한 리소스를 미리 전송하여 페이지 로딩 시간을 단축시킵니다. 예를 들어, HTML 파일과 함께 해당 파일에서 참조하는 CSS 파일을 미리 전송하여 클라이언트가 별도의 요청을 보내지 않아도 됩니다.
3. HTTP 1.1과의 차이점
HTTP 1.1 | HTTP 2.0 | |
연결 | 하나의 요청당 하나의 TCP 연결 | 하나의 TCP 연결에 여러 스트림 |
헤더 | 각 요청마다 전체 헤더 전송 | 헤더 압축을 통해 중복된 부분 생략 |
멀티플렉싱 | 불가능 | 스트림 기반 멀티플렉싱 |
서버 푸시 | 불가능 | 서버에서 클라이언트로 리소스 미리 전송 |
4. 프레임 구조와 스트림
HTTP 2.0에서는 모든 메시지를 프레임에 담아 전송합니다. 프레임은 길이, 종류, 플래그, 스트림 식별자, 페이로드 등으로 구성됩니다. 프레임의 종류에는 DATA, HEADERS, PRIORITY, RST_STREAM, SETTINGS, PUSH_PROMISE, PING, GOAWAY, WINDOW_UPDATE, CONTINUATION 등이 있습니다. 각 프레임은 특정한 역할을 수행하며, 예를 들어 HEADERS 프레임은 헤더 정보를 전달하고, DATA 프레임은 실제 데이터를 전달합니다.
스트림은 클라이언트와 서버 간의 논리적인 연결 채널로, 하나의 스트림은 하나의 요청과 응답에 해당합니다. HTTP 2.0은 스트림을 통해 멀티플렉싱을 구현하여 여러 요청을 동시에 처리합니다. 스트림은 우선순위를 가지며, 서버는 짝수의 스트림 식별자를, 클라이언트는 홀수의 스트림 식별자를 초기적으로 할당받아 스트림을 관리합니다. 스트림 식별자가 고갈되면 새로운 연결을 맺어 스트림을 생성합니다.
5. 헤더 압축
HPACK 알고리즘은 정적 테이블과 동적 테이블을 활용하여 헤더를 효율적으로 압축합니다. 정적 테이블에는 자주 사용되는 헤더 필드가 미리 저장되어 있고, 동적 테이블에는 통신 중에 자주 사용되는 헤더 필드가 추가됩니다. 이를 통해 헤더 크기를 줄여 네트워크 트래픽을 절약하고, 페이지 로딩 속도를 향상시킵니다. 압축 컨텍스트는 클라이언트와 서버가 공유하는 정보로, 이전에 교환된 헤더 정보를 기반으로 헤더를 압축하고 해제하는 데 사용됩니다.
6. 서버 푸시
서버 푸시는 서버가 클라이언트가 필요로 할 것으로 예상되는 리소스를 미리 전송하는 기능입니다. 이를 통해 페이지 로딩 시간을 단축시킬 수 있지만, 잘못된 예측으로 인해 불필요한 데이터를 전송할 수 있으므로 주의해야 합니다.
PUSH_PROMISE 프레임을 통해 서버는 클라이언트에게 필요할 것으로 예상되는 리소스를 미리 전송할 수 있습니다. 클라이언트는 RST_STREAM 프레임을 보내어 서버 푸시를 거절할 수 있습니다. 서버 푸시는 캐시 가능하고 안전한 리소스에 대해 주로 사용됩니다.
7. 알려진 보안 이슈
- 중개자 캡슐화 공격: HTTP 2.0 메시지를 중간의 프록시가 HTTP 1.1로 변환할 때 메시지 의미가 변질될 가능성이 있습니다.
- 긴 커넥션 유지로 인한 개인정보 누출: 클라이언트와 서버 사이에 커넥션을 오래 유지하면 개인 정보 유출에 악용될 가능성이 있습니다.
'책정리 > HTTP 완벽 가이드' 카테고리의 다른 글
[HTTP 완벽가이드 9장] 웹 로봇 (0) | 2025.01.05 |
---|