[2주차 개념 스터디]-HTTP1.0/HTTP2.0

이누의 벨로그·2021년 8월 12일
0

HTTP

목록 보기
1/4

HTTP의 진화

HTTP는 1989년, 제네바의 CERN에서 일하던 Tim Berners-Lee에 의해서 제안되었다. 가장 초기에 HTTP는 4개의 빌딩 블록으로 구성되었는데, 각각

  • 하이퍼텍스트 문서를 표현하기 위한 텍스트 형식의 하이퍼텍스트 마크업 언어 (HTML).
  • 문서 같은 것을 교환하기 위한 간단한 프로토콜인 하이퍼텍스트 전송 프로토콜 (HTTP).
  • 문서를 디스플레이(그리고 우발적으로 수정)하기 위한 클라이언트인 월드 와이드 웹(WorldWideWeb)이라고 불리는 첫번째 브라우저.
  • 문서에 접근하도록 해주는, httpd의 초기 버전.

이었다. 96년에 release된 1.0은, 상태 코드 및 HTTP 헤더를 요청과 응답 모두를 위해 도입하여, 메타데이터 전송을 허용하고 프로토콜을 극도로 유연하고 확장 가능하도록 만들어주었다. 이 새로운 HTTP 헤더의 도움으로, 평이한 HTML 파일들 외에 다른 문서들을 전송하는 기능이 추가되었다.

HTTP는 기본적으로 Connectionless, 즉 연결을 매번 끈혹 새로 생성하는 구조인데, 이는 네트워크 비용측면에서 최초 연결을 하기 위해 많은 비용을 소비하게 된다.
HTTP1.1은 이를 개선하기 위해 connection을 재사용하는 Keep-alive을 지원하였다. 이는 한번의 커넥션에서, 지정한 시간 내에 access가 이루어진다면 커넥션을 끊지 않고 재사용하여 요청을 처리하는 것으로, 이를 통해 정적인 페이지에서의 로딩 시간을 50%가량 줄일 수 있었다. 하지만, 서버에 요청 인원이 늘어날 수록 모든 요청마다 연결을 유지해야 했기 때문에 제한된 서버 자원에 손실을 발생시켰고, 이를 방지하기 위해 connection에 timeout, 최대요청수 등의 설정을 부여하여 초과요청을 방지하였지만 여전히 요청 인원이 늘어날 수록 성능이 저하되는 결과를 낳았다.

또한, 파이프라이닝을 추가하여 첫번째 요청에 대한 응답이 완전히 전송되기 전에 두번째 요청을 전송하는 것을 가능케 하여 레이턴시를 낮췄다. 파이프라이능은 한가지의 문제점을 남겼는데, 바로 응답의 동기성을 보장하기 위하여 앞의 요청을 처리하는데 소요되는 시간 때문에 뒤의 요청들이 지연되는 Head Of Line Blocking, 즉 HOL Blocking이 발생한다는 것이다.


이렇듯 HTTP1.1에서 도입된 성능향상을 위한 장치들에도 불구하고, HTTP는 성능면에서 많은 문제점들이 해결되지 않고 있었고, 이는 기본적으로 연결당 하나의 요청과 응답을 처리하기 때문에 동시에 여러개의 리소스를 주고받는 것이 불가능하고 요청과 응답이 순차적으로 이루어지기 때문이었다.
2010년도 들어서, 구글은 더 빠른 웹을 실행하기 위해 HTTP를 고속화한 SPDY라는 새로운 프로토콜을 구현하였다. 다만 이는, HTTP를 대체하는 프로토콜 아니라 HTTP를 통한 전송을 재정의하는 형태로 구현되었는데 이는 HTTP/2 초안의 참고 규격이 되게 된다.

HTTP 2.0은 다음과 같은 특징을 지닌다.

Multiplexed Streams

HTTP/2는 Multiplexed Streams를 이용하여 Connection 한 개로 동시에 여러 개의 메시지를 주고 받을 수 있으며 응답은 순서에 상관없이 Stream으로 주고 받는다. 즉 다중화 프로토콜이며, 순서를 제거해주고 HTTP/1.x 프로토콜의 제약사항을 막아준다.

Header Compression

전송된 데이터의 분명한 중복과 그런 데이터로부터 유발된 불필요한 오버헤드를 제거하면서, 연속된 요청 사이의 매우 유사한 내용으로 존재하는 헤더들을 압축시킨다.

Server Push

서버로 하여금 사전에 클라이언트 캐시를 서버 푸쉬라고 불리는 메커니즘에 의해, 필요하게 될 데이터로 채워넣도록 허용합니다.

profile
inudevlog.com으로 이전해용

0개의 댓글