원문: https://yozm.wishket.com/magazine/detail/1686/
웹 개발자라면 알고 있어야 할 HTTP의 진화 과정 | 요즘IT
하나의 웹 사이트에서 왜 이렇게 다른 버전의 HTTP가 사용되고 있는 걸까요? 각 버전에는 무슨 차이가 있는 걸까요? 왜 HTTP의 버전은 1, 2, 3으로 딱 나누어 떨어지지 않을까요? 그래서 오늘은 HTTP의
yozm.wishket.com
배경 지식
TCP: 신뢰성 있는 데이터 전송을 위한 연결형 서비스. 응답자와 수신자 쌍방이 연결상태인지를 확인한 후, 연결상태라면 데이터를 전송함. 신뢰도를 갖추고자 다음 기능이 기본적으로 구현되어 있음.
- 흐름 제어: 요청과 응답 측의 데이터 처리 속도 조절하여 한 쪽이 몰리는 경우를 방지
- 혼잡 제어: 네트워크 내 패킷 수를 조절하여 서버의 부하를 막는다.
- 데이터 순서 보장
- 데이터 재전송 기능
UDP: 데이터 전송에 대한 보장 없이 보내는 쪽에서 일방적으로 데이터를 전송하는 비연결형 서비스.
HTTP/1.0
기본적인 기능을 갖춘 표준화된 http 통신
HTTP/1.1
Keep-Alive: TCP 핸드셰이크 과정을 새로 거치지 않도록 연결 상태를 유지하는데, 이 때 서버에 부하가 일어나지 않도록 연결에 두는 시간 제한
Pipelining: 응답 이전에 여러 요청을 연달아 보내는 방식
TCP의 쟁점
1. HOLB(Head of Line Blocking): 서버가 항상 요청받은 순서대로 응답해야한다는 규칙으로 인해 발생하는 문제
1-1: 서버가 응답 중간에 오류가 발생하면 그 다음 요청이 전송되지 못하는 문제
1-2. 재전송 시 정해진 패킷 순서대로 다시 패킷을 처리하다보니 병목 현상 발생
2. (혼잡 제어 기능) 전송 속도를 처음엔 느리게 보내다 천천히 속도를 올리는 방식 -> 네트워크 환경이 좋을 때는 전송 지연 유발
HTTP/2
SPDY: TCP 위에서 응답 다중화를 담당하는 프로토콜로, TLS가 필수이다.
응답 다중화: TCP 연결을 스트림(연결 단위), 메시지(하나의 요청과 응답을 구성하는 단위), 프레임(메시지를 구성하는 단위)으로 세분화
이진 프로토콜: 데이터를 바이너리로 변환하여 효율적인 전송이 가능해짐.
헤더 필드 압축(HPACK): 달라진 부분만 다시 전송하는 허프만 코딩 기법을 사용하여 헤더 중복으로 인한 낭비를 줄임.
HTTP/3
QUIC: UDP 기반으로 TCP의 신뢰성 보장 기능을 직접 구현한 프로토콜. 패킷 재전송, 혼잡 제어, 흐름 제어 기능이 구현됨.
0-RTT: 상호 연결에 필요한 연결 정보를 캐싱해두는 기능.
연결 다중화: HTTP/2에서의 스트림이 독립적으로 동작,
연결 별 고유 Connection ID가 존재
'Articles' 카테고리의 다른 글
[번역, 요약] Writing Good Unit Tests; Don’t Mock Database Connections (from blog.boot.dev) (0) | 2022.09.06 |
---|