HTTP 프로토콜이란?
HTTP(Hypertext Transfer Protocol)는 웹에서 데이터를 주고받기 위한 통신 규약입니다. 웹의 발전과 함께 HTTP도 진화해왔으며, 각 버전별로 성능과 기능이 크게 개선되었습니다.
HTTP/1.X (1996년 ~ 1999년)
- 주요 특징:
- 지속적 연결(Persistent connections) 도입
- 파이프라이닝(Pipelining) 지원
- 청크 전송 인코딩
- 캐시 제어 메커니즘
- 한계점:
- Head-of-line blocking 문제 (한 요청이 완료될 때까지 다음 요청 대기)
- 단순한 요청-응답 모델 (한 번에 하나의 요청만 처리 가능)
- 여러 자산(이미지, 스크립트 등) 로딩 시 많은 요청-응답 필요
- 요청 우선순위 지정 불가
- 텍스트 기반 헤더로 인한 오버헤드
HTTP/2 (2015년)
- 주요 개선사항:
- 바이너리 프레이밍 레이어 도입
- 텍스트 대신 바이너리 형식 사용으로 효율성 향상
- 멀티플렉싱으로 동시 요청/응답 처리
- 단일 연결에서 여러 요청/응답을 동시에 처리
- Head-of-line blocking 문제 해결
- HPACK을 통한 헤더 압축
- 물리전송량 감소
- 서버 푸시 기능
- 클라이언트 요청 전에 서버가 리소스를 미리 전송
- 스트림 우선순위 지정
- 중요 리소스 우선 처리 가능
- 바이너리 프레이밍 레이어 도입
- 장점:
- 단일 연결에서 여러 자산을 효율적으로 전송
- 네트워크 리소스 활용도 향상
HTTP/3 (최신)
- 주요 특징
- TCP 대신 QUIC 프로토콜 사용
- UDP 기반 전송
- 연결 마이그레이션 지원
- IP 주소 변경 시에도 연결 유지 - TLS 1.3 기반 내장 암호화
- Head-of-line blocking 개선
- 개별 스트림 레벨에서 패킷 손실 처리 - O-RTT 연결설정
- 더 빠른 연결 설정
- 이전 방문 서버에 대한 연결 시간 단축 - 더 나은 혼잡 제어
버전별 성능 비교
페이지 로딩 시간
- HTTP/1.1: 기준
- HTTP/2: 약 30-50% 향상
- HTTP/3: HTTP/2 대비 약 10-20% 추가 향상
주요 차이점
기능 | HTTP/1.1 | HTTP/2 | HTTP/3 |
멀티플렉싱 | ❌ | ☑️ | ☑️ |
헤더 압축 | ❌ | ☑️ | ☑️ |
서버 푸시 | ❌ | ☑️ | ☑️ |
연결 마이그레이션 | ❌ | ❌ | ☑️ |
0-RTT | ❌ | ❌ | ☑️ |
더보기
실제 적용 가이드
실제 적용 가이드
HTTP/2 적용 방법
- 서버 설정 변경
- SSL 인증서 설치 (HTTP/2는 HTTPS 필요)
- 웹서버 설정 (Nginx/Apache) 업데이트
HTTP/3 적용 방법
- QUIC 프로토콜 지원 확인
- TLS 1.3 설정
- CDN 서비스 활용 (Cloudflare 등)
주의사항
- HTTP/2는 대부분의 현대 브라우저에서 지원
- HTTP/3은 아직 일부 환경에서 제한적 지원
- UDP 기반 통신으로 인한 방화벽 설정 필요
현황
- HTTP/3은 2022년 7월 표준으로 채택
- 약 70% 이상의 웹 트래픽이 HTTP/3으로 전환 중
- 대부분의 주요 브라우저가 지원 (Chrome, Edge, Firefox)
- Safari는 부분적 지원 상태
개발자 관점
- 비교라는 말은 틀렸다. 표준의 진화, 발전의 관점으로 보아야 한다.
- HTTP/1.1에서 HTTP/2로의 전환은 비교적 용이 (TCP 기반으로 HTTP/2는 이미 널리 채택)
- UDP 패킷 사용으로 인한 연결 문제 가능성 ( HTTP/2에서 HTTP/3으로의 전환은 QUIC과 UDP 지원 필요)
- TLS 1.3 지원 필요 : HTTP/2와 HTTP/3은 HTTP/1.1과의 하위 호환성 유지
출처: https://dev.to/accreditly/http1-vs-http2-vs-http3-2k1c
출처: accreditly.io/articles/the-differences-between-http-11-http2-and-http3