기록하는 습관

[북스터디] HTTP 완벽 가이드 10장 본문

스터디/HTTP 완벽 가이드

[북스터디] HTTP 완벽 가이드 10장

로그뉴 2021. 7. 2. 14:26

 

HTTP 완벽 가이드 10

 

10.1 HTTP/2.0의 등장 배경 

HTTP/1.0의 메시지 포맷은 구현의 단순성과 접근성에 주안점을 두고 최적화 되었기에, 성능을 희생시킨 면이 있다. 대표적으로 커넥션 하나를 통해 요청 하나를 보내고 응답을 받아야만 다음 요청을 보낼 수 있기 때문에 심각한 회전 지연이 생겼다. 

이 문제를 해결하기 위해, 병렬 커넥션, 파이프라인 커넥션이 도입되었지만 근본적인 해결책은 되지 못했다. 

성능 개선을 위한 여러 아이디어들이 제시가 됐고, 그 중 구글의 SPDY 프로토콜을 기초로 HTTP/2.0이 설계되었다. 

 

SPDY: 비표준 개방형 네트워크 프로토콜로, 기존 HTTP에 속도를 개선하기 위해 여러 가지 기능을 추가. 

  • 헤더를 압축하여 대역폭 절약 
  • 하나의 TCP 커넥션에 여러 요청을 동시에 보내 회전 지연을 줄이는 것 가능 
  • 클라이언트가 요청을 보내지 않아도 서버가 능동적으로 리소스를 푸시하는 기능 

이 모든 것은 회전 지연을 줄이기 위한 것이다. 

 

10.3 HTTP/1.1과의 차이점 

10.3.1 프레임 

HTTP/2.0에서 모든 메시지는 프레임에 담겨 전송된다.  

 

기존에 Plain Text(평문) 사용하고, 개행으로 구별되던 HTTP/1.x 프로토콜과 달리, HTTP/2.0에서는 바이너리 format으로 인코딩 된 Message, Frame으로 구성된다. 

 

10.3.2 스트림과 멀티플렉싱 

HTTP/2.0에서는 하나의 커넥션에 여러 개의 스트림이 동시에 열릴  있다. 따라서 여러 개의 요청을 동시에 보낼 수 있게 된다. 

 

10.3.3 헤더 압축 HTTP Header Data Compression  

이전 Header의 내용과 중복되는 필드를 재전송 하지 않도록 하여, 데이터를 절약한다. 또한 기존에 HTTP Header가 Plain Text(평문)이었지만, HTTP/2.0에서는 Huffman Coding을 사용하는 HPACK이라는 Header 압축방식을 이용하여 데이터 전송 효율을 높였다. 

 

10.3.4 서버 푸시 

서버가 클라이언트에서 어떤 리소스를 요구할 것인지 미리 알 수 있는 상황이라면 클라이언트가 요청하지 않은 JavaScript, CSS, Font, 이미지 파일 등과 같이 필요하게 될 특정 파일들을 서버에서 단일 HTTP 요청 응답 시 함께 전송할 수 있다.  

 

** HTTP 1.x의 HOL(Head of line) Blocking 문제 해결 

HTTP/1.1 까지는  번에 하나의 파일만 전송이 가능했다. 이는 여러 파일을 전송 할 경우, 선행하는 파일의 전송이 늦어지면, 전체 파일 전송의 시간이 늘어나는 문제가 발생하였다. HTTP/2.0에서는 여러 파일을 한 번에 병렬 전송하여, 문제를 해결하였다. 

 

 

 

하나의 커넥션에서 여러 병렬 스트림이 존재할 수 있다. Stream number를 이용해 순서가 바뀌어도 수신측에서  조합 할 수 있다. 

Comments