HTTP/2.0이란?

이민석's avatar
Sep 19, 2024
HTTP/2.0이란?

HTTPS, HTTP/2.0

  1. HTTP/1.0이란?

  2. HTTP/2.0 등장

  3. HTTP/2.0의 장점 - Binary Framing

  4. HTTP/2.0의 장점 - Stream Prioritization

  5. HTTP/2.0의 장점 - Buffer Overflow

HTTP/1.1이란?

HTTP는 Hypertest Transfer Protocol의 약자로 클라이언트*와 서버*가 정보를 요청하고 보내는 데 사용하는 방법 중 하나입니다.

클라이언트(Client)* : 웹 사이트에 접속하는 사용자를 의미하며, 이 글을 보고 있는 당신(의 컴퓨터) 이라고 이해하여도 무방할 것 같습니다.
서버(Server)* : 웹 사이트에 접속할 때, 그 사이트에 대한 정보를 반환해주는 주체라고 이해하여도 무방할 것 같습니다.,

이와 관련해서 많은 내용들을 이미 HTTP/1.0이란? 게시글에서 논의하였습니다.

HTTP/2.0 등장

HTTP/1.0이 1997년에 만들어지고 십수년이 지나 HTTP/2.0은 2015년에 개발되었습니다. 해당 HTTP/2.0은 HTTP/1.0~/1.1이 해결하지 못한 여러 문제를 해결하였습니다.

일반적으로 HTTP/2.0은 HTTP/1.1보다 훨씬 빠르고 효율적으로 작동하며, 이를 위해서 아래의 기술들이 도입되어 있습니다.

  1. Binary Framing Layer

  2. Stream Prioritization

HTTP/2.0 장점 - Binary Framing Layer

HTTPS라고 불리는 HTTP/2.0에서 TLS/SSL 암호화가 적용된 것은 웹 개발자라면 누구나 아는 사실입니다.

하지만 이 암호화가 Binary Framing Layer에서 적용되었으며 나아가 해당 Layer가 어떻게 작동하고 어떤 장점을 제공하는지는 잘 모를 것입니다.

  • HTTP/1.1에서 모든 요청/응답은 플레인 텍스트로 구성되어 있습니다.

  • HTTP/2.0에서는 모든 요청/응답은 인코딩하고 더 작은 저보 패킷으로 잘라서 데이터 전송의 유연성을 높입니다.

    • 이는 프레임*, 메세지*, 커넥션*으로 계층화됩니다

    • HoL 차단 문제를 해결하기 위해서 Multiplexing이 사용됩니다.

앞서 HTTP/1.0의 작동 과정에서 본 요청은 실제로 더 많은 정보를 담고 있습니다.

POST /index.html HTTP/1.1
Host: www.example.com
Content-Type: application/json
Content-Length: 15

{ "msg": "hello" }

HTTP/2.0에서는 POST부터 Content-Length까지를 Header Frame으로 { “msg”: “hello” } 를 Data Frame으로 구분합니다.

HTTP/2.0에서는 요청/응답이 하나의 스트림*에 포함되어 처리됩니다. 그리고 여러개의 스트림*이 모여서 하나의 커넥션*을 구성합니다.

즉 요청/응답 메세지*는 하나의 스트림*으로 다뤄지며,
이러한 스트림*들이 모여서 하나의 커넥션* 내에서 병렬적으로 처리됩니다.

즉 HTTP/2.0은 병렬의 스트림이 실행가능한
멀티플랙싱(Multiplexing)* 기술이 도입되어 있는 것이다.

가장 세부적인 레벨에 있는 프레임(Frame)들은 단일 채널(Channel)에 인터리빙(Interleaving)됩니다. 파편화된 프레임들이 단일 채널을 통과하여 도착지점에서 재조립됩니다.

이러한 멀티플렉싱은 다른 메세지의 완료를 기다릴 필요가 없어져서 HTTP/1.0의 HoL 문제를 해결합니다.

HTTP/2.0 장점 - Stream Prioritization

HTTP/2.0에서는 Binary Framing Layer가 존재합니다.
해당 Layer는 메세지*병렬 스트림*으로 처리합니다.

따라서 각 스트림* 간의 우선순위가 존재합니다.
클라이언트가 서버에 동시 요청을 보낼때 각 스트림에는 1~256 사이의 가중치(Wt)*를 부여합니다.

또한 각 스트림은 고유키(ID)*를 가지며 이를 이용하여 다른 스트림에 대한 종속성을 부모아이디(PID)*의 형태로 명시합니다. 부모 아이디가 없는(nil)* 경우에는 루트 스트림으로 간주합니다.

스트림은 부모아이디(PID)*로 인한 운선순위로 먼저 처리되며,
같은 부모아이디(PID)*를 공유하는 스트림이 있을 경우에는 가중치(Wt)*를 기준으로 우선순위를 정합니다.

결론

기본적인 HTTP/2.0에 대해서 학습하였습니다.

HTTP/1.1이 가진 HoL를 해결하기 위해서 Binary Framing Layer(with Multiplexing), Stream Prioritization이 적용되었습니다.

HTTP/1.1의 Not Encrypted문제는 HTTPS에서 해결되었습니다.

참고 자료

Share article
RSSPowered by inblog