"HTTP 의 가장 오래된 성능 승리 둘이 여전히 가장 큰 거: body 압축, 연결 재사용. 둘 다 wire 위 negotiate; 둘 다 활성에 거의 비용 영."
Content 압축 — negotiate, 투명
HTTP body 압축이 header 둘로 negotiate:
Accept-Encoding(request) — client 가 decode 할 수 있는 압축:gzip, br, zstd, identity.Content-Encoding(response) — server 가 실제 쓴 거.
브라우저가 항상 Accept-Encoding 보냄. Server 가 best 지원 encoding 선택하고 보내기 전 body 압축. Client 가 투명 decompress — application 코드가 decoded 텍스트 봄.
현역 algorithm 셋:
- gzip — 보편 지원 (모든 HTTP client 와 server). Text content 에 50-70% 감소. 빠른 encode/decode. 안전 기본.
- Brotli (br) — 더 좋은 압축 (text 에 gzip 보다 15-25% 더), 비교 가능한 decode 속도, 더 느린 고품질 encode. 2026 년 거의 보편 지원 (모든 현대 브라우저 + 대부분 CDN).
- Zstandard (zstd) — 더 새로움, 중간 품질에 매우 빠름, HTTP 지원 성장 중 보편 아직 아님.
Static 사전 압축, 동적 per-request 압축
Encoding 과 decoding 사이 비용 비대칭 중요:
- Static asset — 최고 품질 Brotli 로 build time 사전 압축. Accept-Encoding 허용 시 .br 파일 직접 ship. 1회 CPU 비용을 모든 request 에 분할상환.
- 동적 response — 중간 품질 gzip 이나 Brotli (level 4-6) 로 per-request 압축. CPU/bandwidth tradeoff 가 보통 ~1KB 넘는 text/JSON 에 압축 선호.
이미 압축된 content (이미지, 비디오, .tar.gz) 압축 안 함 — 이득 영, CPU 낭비, 재압축이 가끔 크기 증가.
Keep-Alive — 안 버리는 연결
HTTP/1.0 기본은 "TCP 연결 열고, request 하나 보내고, response 하나 받고, 닫기." TCP handshake (1 RTT) + TLS handshake (1-2 RTTs) 가 모든 request 먹음. 60 asset 가진 페이지면 180+ RTT 의 순수 연결 setup.
HTTP/1.1 의 Connection: keep-alive (기본) 가 response 후 TCP 연결 열어둠, 후속 request 가 재사용. 한 handshake 를 N request 에 분할상환. 숫자: 100ms RTT 의 remote server 가 request 당 ~300ms (HTTP/1.0) 에서 다른 거 안 바꾸고 request 당 ~100ms (HTTP/1.1 keep-alive) 됨.
HTTP/2 가 multiplexing 으로 더 (다음 lesson) — 한 연결이 여러 parallel request 운반. HTTP/3 가 QUIC 와 함께 연결 migration 추가 (폰이 세션 안 잃고 Wi-Fi 에서 LTE 로 전환 가능).
Connection-header gotcha
1. 모든 response 에 Connection: close. 일부 legacy server (혹은 proxy) 가 모든 request 후 Connection: close 발신, 새 TCP setup 강제. 찾아; fix.
2. 장기 연결이 server resource 누설. Server 쪽 keep-alive 가 TTL (보통 60-300s) 있음. TTL 후 server 가 idle 연결 닫음. Client 패턴 기반 튜닝.
3. SSL session resumption. Keep-alive 있어도 새 연결이 TLS handshake 발생. 현대 TLS (1.3) 가 session resumption 지원 — 돌아오는 client 가 key exchange 건너뜀. Server 가 활성됐는지 확인.