이는 HTTP/1.1의 Head-Of-Line Blocking
문제를 해결
단일 TCP 연결 내에서 여러 스트림을 독립적으로 생성하고 각 스트림은 고유한 스트림 ID를 가짐
데이터는 작은 프레임 단위로 나누어지며 순서와 상관없이 전송된 후 수신 측에서 재조립
허프만 코딩(Huffman Coding) 알고리즘
을 활용하여 압축 효율을 극대화함허프만 코딩(Huffman Coding) 알고리즘
1. 빈도수 계산:
- 문자열에서 각 문자의 출현 빈도를 계산
2. 우선순위 큐 생성:
- 각 문자를 빈도수에 따라 정렬하여 우선순위 큐에 삽입. 빈도가 낮은 문자가 높은 우선순위를 가짐
3. 트리 생성:
- 두 개의 빈도가 가장 낮은 노드를 선택하여 이들을 자식 노드로 하는 새로운 부모 노드를 생성. 이 부모 노드의 빈도수는 두 자식 노드 빈도의 합
- 이 과정을 반복하여 모든 노드가 하나의 트리로 결합될 때까지 계속. 최종적으로 생성된 트리가 허프만 트리
4. 코드 할당:
- 허프만 트리의 루트에서 리프 노드까지의 경로를 따라 각 문자에 대한 코드를 할당. 좌측 경로는 ‘0’, 우측 경로는 ‘1’로 할당하여 문자를 이진 코드로 변환
- 빈도가 높은 문자는 트리의 상위에 위치하게 되어 짧은 코드가 할당되고, 빈도가 낮은 문자는 트리의 하위에 위치하여 긴 코드가 할당
문자열: "this is an example for huffman encoding"
빈도수 계산:
t: 1, h: 2, i: 2, s: 2, a: 2, n: 3, e: 2, x: 1, m: 2, p: 1, l: 1, f: 2, o: 1, r: 1, u: 1, c: 1, d: 1, g: 1, ' ': 6
우선순위 큐:
빈도가 낮은 순서로 정렬: t, x, p, l, o, r, u, c, d, g, h, i, s, a, e, m, f, n, ' '
트리 생성 및 코드 할당:
트리를 구성하여 각 문자에 이진 코드를 할당합니다. 예를 들어:
' ': 11, t: 11010, h: 010, i: 011, s: 100, n: 101, ...
최종 허프만 코드:
"this is an example for huffman encoding" => 110100101100011011100010110000110011011011100010011100001010011011101011001000101101010110010101001011010111000111110100111010011010011011100101011011
서버 푸시 : 서버가 클라이언트가 요청하지 않은 리소스를 미리 전송할 수 있음
예를들어, HTML 문서를 요청한 클라이언트에게 필요한 CSS 파일이나 JavaScript 파일을 미리 전송할 수 있음
이를 통해 페이지 로딩 시간을 단축할 수 있음
스트림 우선순위 : 클라이언트가 각 스트림에 우선순위를 부여하여 중요한 리소스를 먼저 받을 수 있게 함
가상의 채널
을 의미전송 계층 : HTTP/2는 TCP를 기반으로 하지만, HTTP/3은 UDP를 기반으로 하는 QUIC을 사용
연결 설정 시간 :
1-RTT
: 새로운 연결을 설정할 때, QUIC는 한 번의 왕복 시간(1-RTT)만으로 보안 연결을 설정0-RTT
: 이전에 연결된 상태라면, QUIC는 0-RTT(Zero Round Trip Time)를 지원하여 새로운 연결 설정 없이도 데이터를 즉시 전송할 수 있음멀티플렉싱 : HTTP/2와 마찬가지로 멀티플렉싱을 지원하지만 QUIC 기반이기 때문에 패킷 손실이 하나의 스트림에만 영향을 미침
보안 : QUIC는 TLS 1.3 암호화를 기본적으로 포함하고 있어 보안 설정이 간편하며 보안 연결이 더 빠르게 설정
인터넷 통신의 보안을 강화하기 위한 최신 프로토콜
TLS는 원래 SSL(Secure Sockets Layer)로 알려졌으며 데이터가 전송되는 동안 이를 암호화하여 안전하게 보호하는 역할을 함
TLS 1.3 핸드세이크 과정
클라이언트 헬로(Client Hello)
↓
클라이언트가 서버에 연결을 요청하며
지원하는 암호화 스위트 목록과 함께 클라이언트 랜덤 값을 보냄
↓
서버 헬로(Server Hello)
↓
서버가 클라이언트의 요청에 응답하며
선택된 암호화 스위트와 서버 랜덤 값을 보냄
서버는 클라이언트와 서버가 공유하는
프리마스터 시크릿을 생성하기 위한 키 교환 메시지도 보냄
↓
키 교환 및 완료
↓
클라이언트와 서버는 키 교환 메시지를 기반으로 세션 키를 생성
이후 클라이언트와 서버는 “Finished” 메시지를 주고받으며 핸드세이크가 완료
버전 | 특징 | 장점 | 단점 |
---|---|---|---|
HTTP/1.0 | - 최초의 HTTP 표준 - 단일 요청-응답 연결 | - 간단하고 구현이 쉬움 - 초기 웹 지원 | - 연결당 하나의 요청 - 비효율적인 연결 재사용 |
HTTP/1.1 | - 지속 연결 - 청크 전송 인코딩 - 호스트 헤더 필드 | - 연결 재사용 - 더 나은 성능과 효율성 | - 헤드 오브 라인 블로킹 문제 - 제한된 멀티플렉싱 |
HTTP/2 | - 이진 프로토콜 - 헤더 압축(HPACK) - 멀티플렉싱 - 서버 푸시 | - 성능 향상 - 효율적인 리소스 사용 - 빠른 페이지 로드 | - 복잡한 구현 - TCP의 한계(TCP HOL 블로킹) |
HTTP/3 | - QUIC 기반(UDP 사용) - 헤더 압축(QPACK) - 0-RTT 지원 - 개선된 멀티플렉싱 | - 빠른 연결 설정(1-RTT, 0-RTT) - 향상된 성능과 보안 - 패킷 손실의 개별 스트림 영향 감소 | - 복잡한 프로토콜 - 방화벽 및 NAT 장비와의 호환성 문제 가능 |