Computer Science/Network
HTTP 버전 별 특징
guwon2
2025. 10. 10. 16:15
HTTP 버전별 변화 정리
HTTP(HyperText Transfer Protocol)란?
웹에서 브라우저와 서버가 데이터를 주고받는 애플리케이션 계층 프로토콜
인터넷이 발전하면서 HTTP는 여러 버전으로 개선되어 왔고, 각 버전에 따라 웹의 구조, 성능, 보안성이 달라진다.
HTTP/1.0
주요 특징
- 1 TCP 연결 = 1 HTTP 요청: 요청마다 새로운 TCP 연결 생성
- RTT(Round Trip Time) 증가: 연결 설정과 해제가 반복되어 지연 발생
- 단순한 요청/응답 구조: 상태를 유지하지 않는 무상태 프로토콜
RTT 증가 문제 해결 방법
당시 개발자들은 성능 향상을 위해 다양한 최적화 기법을 사용함:
1. 이미지 스프라이트(Image Spriting)
/* 여러 이미지를 하나로 합쳐서 HTTP 요청 수 감소 */
.icon-home {
background: url('sprites.png') 0 0;
}
.icon-user {
background: url('sprites.png') -20px 0;
}
2. 코드 압축(Minification)
// 압축 전
function calculateSum(a, b) {
return a + b;
}
// 압축 후
function calculateSum(a,b){return a+b}
3. Base64 인라인 이미지
<!-- 작은 이미지를 Base64로 인코딩하여 HTML에 직접 삽입 -->
<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mP8z8BQDwAEhQGAhKmMIQAAAABJRU5ErkJggg==" alt="1px 투명 이미지">
HTTP/1.1 - 연결 재사용 등장
주요 개선사항
1. Persistent Connection (Keep-Alive)
Connection: keep-alive
Keep-Alive: timeout=5, max=1000
- 하나의 TCP 연결로 여러 HTTP 요청 처리
- 연결 설정/해제 오버헤드 크게 감소
2. HTTP 파이프라이닝
- 여러 요청을 순서대로 전송하고 순차적으로 응답 받기
- 응답 대기 시간 단축
3. 향상된 캐싱
Cache-Control: max-age=3600, public
ETag: "33a64df551425fcc55e4d42a148795d9f25f89d4"
Last-Modified: Wed, 21 Oct 2015 07:28:00 GMT
한계점
HOL(Head Of Line) Blocking
요청 순서: [요청1] → [요청2] → [요청3]
응답 지연: [지연] ← [대기중] ← [대기중]- 첫 번째 요청이 지연되면 뒤따르는 모든 요청이 대기
- 파이프라이닝의 치명적 단점
헤더 중복
GET /api/users HTTP/1.1
Host: api.example.com
User-Agent: Mozilla/5.0...
Accept: application/json
Cookie: session=abc123...
GET /api/posts HTTP/1.1
Host: api.example.com ← 중복
User-Agent: Mozilla/5.0... ← 중복
Accept: application/json ← 중복
Cookie: session=abc123... ← 중복
HTTP/2 - 멀티플렉싱
1. 멀티플렉싱(Multiplexing)
하나의 TCP 연결에서:
스트림1: [요청A] ←→ [응답A]
스트림2: [요청B] ←→ [응답B]
스트림3: [요청C] ←→ [응답C]- 여러 요청/응답이 동시에 처리
- HOL Blocking 문제 해결
2. 헤더 압축 (HPACK)
HTTP/1.1: 500-800 bytes
HTTP/2: 50-100 bytes (85% 압축률)- 중복 헤더 제거
- 허프만 코딩으로 압축
3. 서버 푸시 (Server Push)
// 서버에서 클라이언트 요청 없이 리소스 전송
app.get('/', (req, res) => {
// HTML 요청 시 CSS, JS도 함께 푸시
res.push('/css/style.css');
res.push('/js/app.js');
res.sendFile('index.html');
});
4. 스트림 우선순위
우선순위 높음: CSS, JavaScript
우선순위 중간: HTML, 중요 이미지
우선순위 낮음: 기타 이미지, 폰트실무 적용
Nginx 설정
server {
listen 443 ssl http2;
# HTTP/2 설정
http2_max_concurrent_streams 128;
http2_max_field_size 16k;
# 서버 푸시 설정
location = /index.html {
http2_push /css/main.css;
http2_push /js/app.js;
}
}
HTTPS - 보안의 필수 요소
HTTPS의 중요성
HTTPS는 HTTP에 SSL/TLS 암호화 계층을 추가한 보안 프로토콜
SSL/TLS 핸드셰이크 과정
1. Client Hello (지원하는 암호화 방식 전송)
2. Server Hello (선택된 암호화 방식 + 인증서)
3. 인증서 검증 (CA 확인)
4. 대칭키 교환 (공개키로 암호화)
5. 암호화된 통신 시작HTTPS의 이점
1. 보안 강화
- 기밀성: 데이터 암호화로 도청 방지
- 무결성: 데이터 변조 감지
- 인증: 서버 신원 확인
2. SEO 향상
Google 검색 순위 요소:
HTTPS 사용 시 가산점
HTTP 사용 시 "안전하지 않음" 표시3. 최신 웹 기능 사용
// HTTPS에서만 사용 가능한 기능들
navigator.geolocation.getCurrentPosition(); // 위치 정보
navigator.mediaDevices.getUserMedia(); // 카메라/마이크
if ('serviceWorker' in navigator) { // 서비스 워커
navigator.serviceWorker.register('/sw.js');
}
HTTP/3 - UDP 기반의 패러다임
1. UDP 기반 + QUIC 프로토콜
기존: HTTP/2 over TCP over IP
신규: HTTP/3 over QUIC over UDP over IP2. 연결 설정 최적화
TCP + TLS: 3 RTT (3-way handshake + TLS handshake)
QUIC: 0-1 RTT (연결과 암호화 동시)3. 독립적인 스트림
TCP: 패킷 하나 손실 시 모든 스트림 블로킹
QUIC: 스트림별 독립적 처리, 블로킹 없음주요 특징
1. 빠른 핸드셰이크
// 0-RTT 연결 재개
const response = await fetch('https://api.example.com', {
// 이전 연결 정보로 즉시 데이터 전송
});
2. 연결 마이그레이션
WiFi 연결 (192.168.1.100)
↓ 이동 중
LTE 연결 (203.251.1.50)
↓ QUIC 연결 ID로 세션 유지
끊김 없는 서비스 계속3. 향상된 오류 복구
패킷 손실 감지: 3ms (TCP: 200ms)
재전송 시간: 즉시 (TCP: 지연)HTTP/3 지원 현황
브라우저 지원
- Chrome 87+
- Firefox 88+
- Safari 14+
- Edge 87+
서버 지원
# Nginx HTTP/3 설정 (1.25.0+)
server {
listen 443 quic reuseport;
listen 443 ssl http2;
# HTTP/3 헤더 추가
add_header Alt-Svc 'h3=":443"; ma=86400';
}
버전별 비교
성능 비교표
| 특성 | HTTP/1.0 | HTTP/1.1 | HTTP/2 | HTTP/3 |
|---|---|---|---|---|
| 연결 방식 | 요청마다 새 연결 | Keep-Alive | 멀티플렉싱 | QUIC 멀티플렉싱 |
| HOL Blocking | 심각 | 있음 | 해결됨 | 완전 해결 |
| 헤더 압축 | 없음 | 없음 | HPACK | QPACK |
| 서버 푸시 | 없음 | 없음 | 지원 | 지원 |
| 보안 | 선택 | 선택 | 권장 | 필수 |
| 연결 설정 | 3 RTT | 3 RTT | 3 RTT | 0-1 RTT |
선택 가이드
HTTP/1.1 사용 시기
레거시 시스템 호환성 필요
단순한 API 서버
리소스가 매우 제한적인 환경HTTP/2 도입 시기 (현재 표준)
현대적인 웹 애플리케이션
리소스가 많은 사이트
성능 최적화가 중요한 서비스
HTTPS 사용 중인 사이트HTTP/3 고려 시기
모바일 사용자가 많은 서비스
실시간성이 중요한 애플리케이션
글로벌 서비스 (높은 지연시간)
최신 기술 도입에 적극적인 조직마무리
핵심 포인트 정리
- HTTP/1.0 → 연결당 하나의 요청, RTT 증가 문제
- HTTP/1.1 → Keep-Alive로 연결 재사용, 여전한 HOL Blocking
- HTTP/2 → 멀티플렉싱으로 HOL Blocking 해결, 헤더 압축
- HTTPS → 보안과 SEO의 필수 요소
- HTTP/3 → UDP 기반으로 근본적 성능 향상