TIL - HTTP

박지민·2022년 10월 10일
0

CS

목록 보기
1/1
post-thumbnail

HTTP

0. HTTP란 뭔가요?

  HTTP는 HyperText Transfer Protocol의 약자로 데이터를 주고받기 위해 정의한 통신 프로토콜입니다. HTTP는 애플리케이션 계층으로서 웹 서비스 통신에 사용됩니다. HTTP/1.0부터 시작해서 발전을 거듭해 현재 HTTP/3입니다.

1. HTTP의 가장 큰 특징은 뭔가요?

  HTTP는 상태가 없는 (stateless) 프로토콜입니다. 여기서 상태가 없다는 말은 데이터를 주고 받기 위한 각각의 데이터 요청이 서로 독립적으로 관리가 된다는 말입니다. 이전에 보냈던 데이터 요청과 다음에 보낼 데이터 요청이 서로 관련이 없다는 의미이며 이러한 특징 덕분에 서버는 세션과 같은 별도의 추가 정보를 관리하지 않아도 되고, 다수의 요청 처리 및 서버의 부하를 줄일 수 있는 성능 상의 이점이 생깁니다. HTTP 프로토콜은 일반적으로 TCP/IP 통신 위에서 동작하며 기본 포트는 80번입니다.

2. HTTP/1.0

  HTTP/1.0은 기본적으로 한 연결당 하나의 요청을 처리하도록 설계되었습니다. 이러한 특징 때문에 서버로부터 파일을 가져올 때마다 TCP의 3-Way-Handshake를 계속 열어야 하기 때문에 RTT가 증가하는 단점이 있었습니다. 뿐만 아니라 TCP 자체의 흐름 제어와 혼잡 제어 알고리즘으로 인해 네트워크 성능이 100% 나오지 않기도 했습니다. 매번 연결할 때마다 RTT가 증가하니 서버에 부담이 많이 가고 사용자 응답 시간이 길어져 이를 해결하기 위해 이미지 스플리팅, 코드 압축, 이미지 Base64 인코딩을 사용하곤 했습니다.

2.1 RTT란?

  RTT (Round Trip Time, 왕복 시간)는 패킷망(인터넷) 위에서 패킷을 보내고자 하는 측에서 패킷을 목적지에 보낼 때, 패킷이 목적지에 도달하고 나서 해당 패킷에 대한 응답이 출발지로 다시 돌아오기까지의 시간. 즉, RTT는 패킷 왕복 시간입니다. 네트워크 성능을 측정할 때, RTT는 네트워크 연결의 속도와 안정성을 진단할 때 일반적으로 사용됩니다.

3. HTTP/1.1

  HTTP/1.0에서 발전한 것으로 매번 TCP 연결을 하는 서이 아니라 한 번 TCP를 초기화 한 이후에 keep-alive(연결을 유지하는 시간을 제한)라는 옵션으로 여러 개의 파일을 송수신할 수 있게 바뀌었습니다. 하지만 문서 안에 포함된 다수의 리소스(이미지, css 파일 script 파일)를 처리하려면 요청할 리소스 개수에 비례해서 대기 시간이 길어지는 단점이 있었고 HTTP/1.1의 해더에는 쿠키 등 많은 메타데이터가 들어 있고 압축이 되지 않아 무거웠습니다.

3.1 HOL Blocking

  HOL Blocking(Head Of Line Blocking)은 네트워크에서 같은 큐에 잇는 패킷이 그 첫 번째 패킷에 의해 지연될 때 발생하는 성능 저하 현상을 말합니다.

4. HTTP/2

  HTTP/2는 SPDY 프로토콜에서 파생된 HTTP/1.x보다 지연 시간을 줄이고 응답 시간을 더 빠르게 할 수 있으며 멀티플렉싱, 헤더 압축, 서버 푸시, 요청의 우선순위를 처리하는 프로토콜입니다.

4.1 멀티 플렉싱

  여러 개의 스트림(시간이 지남에 따라 사용할 수 있게 되는 일련의 데이터 요소를 가리키는 데이터 흐름)을 사용하여 송수신 한다는 것을 의미하며 이를 통해 특정 스트림의 패킷이 손실되었다고 하더라도 해당 스트림에만 영향을 미치고 나머지 스트림은 멀쩡하게 동작할 수 있습니다. 애플리케이션에서 받아온 메세지를 동립된 프레임으로 조각내어 서로 송수신한 이후 다시 조립하며 데이터를 주고받으며 이를 통해 단일 연결을 사용하여 병렬로 여러 요청을 받을 수 있고 HOL Blocking을 해결할 수 있습니다.

4.2 헤더 압축

  허프만 코딩(문자열을 문자 단위로 쪼개 빈도수를 세어 빈도가 높은 정보는 적은 비트를 수를 사용하여 표현하고 빈도가 낮은 정보는 비트 수를 많이 사용하여 표현해서 전체 데이터의 표현에 필요한 비트양을 줄이는 원리) 압축 알고리즘을 사용하는 HPACK 압축 형식을 가집니다.

4.3 서버 푸시

  HTTP/2는 클라이언트 요청 없이 서버가 바로 리소스를 푸시할 수 있습니다.

4.4 HTTP/1.1 vs HTTP/2.0

비교HTTP/1.1HTTP/2.0
요청, 응답커넥션당 하나커넥션당 N개(다중 요청/응답 가능)
동시전송불가가능
속도1.1에 비해 약 50% 정도 빠름

5. HTTP/3

  HTTP/3는 기존에 TCP에서 동작하기 때문에 발생하는 문제를 해결하기위해 등장했습니다. TCP는 신뢰성을 지향하기 때문에 데이터 손실이 발생하면 재전송을 수행하게 되는데 TCP는 패킷을 정확한 순서대로 처리해야 되서 재선송을 수행하고 대기하는 과정에서 병목현상이 발생했습니다. 즉, TCP 자체의 HOL Blocking을 해결할 수 없었습니다. 또한 TCP는 혼잡 제어를 수행하기 때문에 전송 속도를 낮은 상태에서 천천히 높이는 방식으로 속도 제어를 취합니다. 이는 네트워크 상황이 좋을 때는 불필요한 지연을 발생시키고 프로토콜 자체의 불필요한 헤더 등도 고칠 수가 없었습니다. 위와 같은 문제들을 해결하기 위해 HTTP/3는 QUIC(TCP의 신뢰성 보장을 위해 제공되는 기능들을 UDP 기반으로 직접 구현하여 성능을 개선한 것) 프로토콜 위에서 동작합니다. 0-RTT 기능을 제공하고 연결 다중화를 지원하며 각 스트림이 동립적으로 동작합니다.

6.HTTPS

  HTTPS는 애플리케이션 계층과 전송 계층 사이에 신뢰 계층인 SSL(Secure Socket Layer)/TLS(Transport Layer Security) 계층을 넣은 신뢰할 수 있는 HTTP 요청을 말합니다. HTTPS는 전송 계층에서 보한을 제공하는 프로토콜로 클라이언트와 서버가 통신할 때 SSL/TLS를 통해 제3자가 메세지를 도청하고나 못하도록 하며 공격자가 서버인척 하며 사용자 정보를 가로채는 네트워크상의 '인터셉터'를 방지할 수 있습니다.

profile
프론트엔드 개발자

0개의 댓글