HTTP
HTTP는 애플리케이션 전송계층에서 사용되는 프로토콜로 웹 서비스 통신에 사용됩니다. 이름(HyperText Transfer Protoco)에서 알 수 있듯이, HTML 파일을 주고받을 때 사용하는 통신규약이지만, 현재는 인터넷 서비스에서 컴퓨터끼리 데이터를 주고받을 때 사용되는 통신규약으로 확장되었다고 볼 수 있습니다.
발전
HTTP는 팀버너스리가 팀 내 데이터 공유 목적으로 개발하였습니다. 1991년 HTTP/0.9 버전을 시작으로, 1996년 HTTP/1.0, 1999년 HTTP/1.1 버전, 2015년 HTTP/2이 발표되었습니다. HTTP 3번째 버전인 HTTP/3이 2022년에 표준화되었습니다. HTTP/1.x ~ HTTP/2 버전은 TCP 기반으로, HTTP/3버전은 UDP 기반으로 통신하게 됩니다.
HTTP/1.0
TCP 기반으로 HTTP 통신을 할 때는, 신뢰성을 확보하기 위해서 3-way-handshake 과정을 거치게 됩니다. HTTP/1.0에서는 한번 통신할 때마다 3way-handshake를 계속해서 수행합니다. 즉, 지연시간(데이터가 왕복하는 시간)이 증가하게 됩니다. 그래서 코드 압축, 이미지 Base64인코딩, 이미지 스플리팅을 사용해서 지연시간을 단축해왔습니다.
HTTP/1.1
지연시간문제를 해결하기 위해서 발전한 버전이 HTTP/1.1버전입니다. 매번 3-way-handshake를 수행하는 게 아니라keep-alive 옵션을 통해서 한번 connection을 맺으면 여러 번의 요청-응답을 수행 후 teardown 할 수 있게 되었습니다.
단점도 있습니다. HTTP/1.x 버전까지는 한 번에 하나의 파일 받게 보낼 수 없었는데, 여러 파일을 순차적으로 보낼 경우 앞선 파일이 지연되면 뒤에 파일들도 영향을 받아버리는 성능 저하 현상이 일어날 수 있습니다. 이것을 HOL Blocking이라고 합니다. 또한 헤더의 중복과 데이터량이 많고 압축하지 않아 무거운 헤더를 가지고 있습니다.
HTTP/2
HTTP/1.x 버전이 가진 문제를 개선한 새로운 버전입니다. HTTP/1.1버전이 가진 데이터 병목현상, HOL Blocking을 개선하고자 여러 파일을 병렬 전송(멀티플렉싱)하여 한꺼번에 주고받아 지연시간을 줄입니다. 이럴 경우, 해당 스트림만 문제가 될 뿐, 다른 스트림에는 영향을 주지 않는 안정적인 구조가 됩니다.
HTTP/1.x은 헤더가 무거웠는데 HPACK 압축 형식을 사용하여 헤더를 압축해 용량을 크게 줄이게 됩니다. 서버 푸시도 가능해졌습니다. 예를 들어 html 요청 시, 다음 요청 없이 css, js 파일도 같이 밀어 넣어주는 푸시 기능도 지원합니다.
HTTP/3
세 번째 버전인 HTTP/3은 UDP 기반의 QUIC 프로토콜을 사용합니다. 3버전에서는 3-way-handshake 없이 어떤 신호를 한번 요청-응답하고 바로 본 통신이 가능합니다. 또한 TLS를 기본으로 사용합니다.
댓글