HTTP와 HTTPS

HTTP와 HTTPS

κ°œμš”

HTTP(HyperText Transfer Protocol)λŠ” μ›Ήμ—μ„œ ν΄λΌμ΄μ–ΈνŠΈμ™€ μ„œλ²„ κ°„ 데이터λ₯Ό μ£Όκ³ λ°›κΈ° μœ„ν•œ μ• ν”Œλ¦¬μΌ€μ΄μ…˜ 계측 ν”„λ‘œν† μ½œμž…λ‹ˆλ‹€. HTTPSλŠ” HTTP에 TLS/SSL μ•”ν˜Έν™”λ₯Ό μΆ”κ°€ν•˜μ—¬ λ³΄μ•ˆμ„ κ°•ν™”ν•œ ν”„λ‘œν† μ½œμž…λ‹ˆλ‹€.

λ‚œμ΄λ„: ⭐⭐⭐

ν•™μŠ΅ λͺ©ν‘œ: - HTTP μš”μ²­/응닡 ꡬ쑰 이해 - HTTP λ©”μ„œλ“œμ™€ μƒνƒœ μ½”λ“œ μˆ™μ§€ - HTTP 버전별 차이점 νŒŒμ•… - HTTPS와 TLS/SSL λ™μž‘ 원리 이해


λͺ©μ°¨

  1. HTTP 기초
  2. HTTP λ©”μ„œλ“œ
  3. HTTP μƒνƒœ μ½”λ“œ
  4. HTTP 헀더
  5. HTTP 버전 비ꡐ
  6. HTTPS와 TLS/SSL
  7. μΈμ¦μ„œ
  8. μ—°μŠ΅ 문제
  9. λ‹€μŒ 단계
  10. 참고 자료

1. HTTP 기초

HTTP 톡신 ꡬ쑰

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”                              β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚   ν΄λΌμ΄μ–ΈνŠΈ   β”‚                              β”‚     μ„œλ²„     β”‚
β”‚  (λΈŒλΌμš°μ €)   β”‚                              β”‚  (μ›Ή μ„œλ²„)   β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€                              β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚              β”‚  ──── HTTP μš”μ²­ ────────▢   β”‚              β”‚
β”‚   GET /index β”‚  (λ©”μ„œλ“œ, URL, 헀더, λ°”λ””)    β”‚   Nginx      β”‚
β”‚              β”‚                              β”‚   Apache     β”‚
β”‚              β”‚  ◀──── HTTP 응닡 ────────   β”‚              β”‚
β”‚   HTML νŽ˜μ΄μ§€ β”‚  (μƒνƒœμ½”λ“œ, 헀더, λ°”λ””)       β”‚              β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜                              β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
        β”‚                                            β”‚
        β”‚           TCP μ—°κ²° (κΈ°λ³Έ 포트 80)            β”‚
        β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

HTTP νŠΉμ„±

νŠΉμ„± μ„€λͺ…
λΉ„μ—°κ²°μ„± (Connectionless) μš”μ²­-응닡 ν›„ μ—°κ²° μ’…λ£Œ (HTTP/1.0)
λ¬΄μƒνƒœ (Stateless) 각 μš”μ²­μ€ 독립적, 이전 μƒνƒœ 미보관
ν…μŠ€νŠΈ 기반 μ‚¬λžŒμ΄ 읽을 수 μžˆλŠ” ν˜•μ‹
μš”μ²­-응닡 ν΄λΌμ΄μ–ΈνŠΈ μš”μ²­, μ„œλ²„ 응닡

HTTP μš”μ²­ ꡬ쑰

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ μš”μ²­ 라인 (Request Line)                                 β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ GET /api/users HTTP/1.1                                 β”‚
β”‚ β””β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”˜                                β”‚
β”‚ λ©”μ„œλ“œ   URI     버전                                    β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ 헀더 (Headers)                                          β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ Host: api.example.com                                   β”‚
β”‚ User-Agent: Mozilla/5.0                                 β”‚
β”‚ Accept: application/json                                β”‚
β”‚ Content-Type: application/json                          β”‚
β”‚ Authorization: Bearer eyJhbGciOiJ...                    β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ 빈 쀄 (CRLF)                                            β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ λ°”λ”” (Body) - 선택적                                     β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ {"name": "John", "email": "john@example.com"}           β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

HTTP 응닡 ꡬ쑰

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ μƒνƒœ 라인 (Status Line)                                  β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ HTTP/1.1 200 OK                                         β”‚
β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”˜ β””β”˜                                        β”‚
β”‚   버전   μƒνƒœμ½”λ“œ μ‚¬μœ                                     β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ 헀더 (Headers)                                          β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ Content-Type: application/json                          β”‚
β”‚ Content-Length: 128                                     β”‚
β”‚ Date: Mon, 27 Jan 2026 10:30:00 GMT                     β”‚
β”‚ Server: nginx/1.24.0                                    β”‚
β”‚ Cache-Control: no-cache                                 β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ 빈 쀄 (CRLF)                                            β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ λ°”λ”” (Body)                                             β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ {"id": 1, "name": "John", "status": "active"}           β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

curl둜 HTTP μš”μ²­ 확인

# κΈ°λ³Έ GET μš”μ²­
curl http://example.com

# 헀더 포함 좜λ ₯
curl -i http://example.com

# μš”μ²­/응닡 상세 확인
curl -v http://example.com

# ν—€λ”λ§Œ 좜λ ₯
curl -I http://example.com

# JSON POST μš”μ²­
curl -X POST http://api.example.com/users \
  -H "Content-Type: application/json" \
  -d '{"name": "John"}'

2. HTTP λ©”μ„œλ“œ

μ£Όμš” HTTP λ©”μ„œλ“œ

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚   λ©”μ„œλ“œ    β”‚                    μ„€λͺ…                       β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚    GET     β”‚ λ¦¬μ†ŒμŠ€ 쑰회 (읽기)                             β”‚
β”‚    POST    β”‚ λ¦¬μ†ŒμŠ€ 생성 (μ“°κΈ°)                             β”‚
β”‚    PUT     β”‚ λ¦¬μ†ŒμŠ€ 전체 μˆ˜μ • (λŒ€μ²΄)                         β”‚
β”‚   PATCH    β”‚ λ¦¬μ†ŒμŠ€ 일뢀 μˆ˜μ •                               β”‚
β”‚   DELETE   β”‚ λ¦¬μ†ŒμŠ€ μ‚­μ œ                                    β”‚
β”‚    HEAD    β”‚ ν—€λ”λ§Œ 쑰회 (λ°”λ”” μ—†μŒ)                         β”‚
β”‚  OPTIONS   β”‚ 지원 λ©”μ„œλ“œ 확인                               β”‚
β”‚   TRACE    β”‚ 루프백 ν…ŒμŠ€νŠΈ (디버깅)                          β”‚
β”‚  CONNECT   β”‚ ν”„λ‘μ‹œ 터널 μ—°κ²°                               β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

λ©”μ„œλ“œ 속성

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚   λ©”μ„œλ“œ    β”‚   μ•ˆμ „μ„±    β”‚    λ©±λ“±μ„±     β”‚   μΊμ‹œ κ°€λŠ₯   β”‚
β”‚            β”‚  (Safe)    β”‚ (Idempotent) β”‚ (Cacheable)  β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚    GET     β”‚     O      β”‚      O       β”‚      O       β”‚
β”‚    HEAD    β”‚     O      β”‚      O       β”‚      O       β”‚
β”‚   OPTIONS  β”‚     O      β”‚      O       β”‚      X       β”‚
β”‚    POST    β”‚     X      β”‚      X       β”‚    쑰건뢀    β”‚
β”‚    PUT     β”‚     X      β”‚      O       β”‚      X       β”‚
β”‚   DELETE   β”‚     X      β”‚      O       β”‚      X       β”‚
β”‚   PATCH    β”‚     X      β”‚      X       β”‚      X       β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

* μ•ˆμ „μ„±: μ„œλ²„ μƒνƒœλ₯Ό λ³€κ²½ν•˜μ§€ μ•ŠμŒ
* λ©±λ“±μ„±: μ—¬λŸ¬ 번 싀행해도 κ²°κ³Όκ°€ 동일
* μΊμ‹œ κ°€λŠ₯: 응닡을 μΊμ‹œν•  수 있음

GET vs POST 비ꡐ

νŠΉμ„± GET POST
μš©λ„ 데이터 쑰회 데이터 전솑/생성
데이터 μœ„μΉ˜ URL 쿼리 슀트링 μš”μ²­ λ°”λ””
데이터 크기 URL 길이 μ œν•œ (~2KB) μ œν•œ μ—†μŒ
캐싱 κ°€λŠ₯ 기본적으둜 λΆˆκ°€
λ³΄μ•ˆ URL에 λ…ΈμΆœ μƒλŒ€μ μœΌλ‘œ μ•ˆμ „
뢁마크 κ°€λŠ₯ λΆˆκ°€

RESTful APIμ—μ„œμ˜ λ©”μ„œλ“œ ν™œμš©

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                     RESTful API μ˜ˆμ‹œ                             β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚  μž‘μ—…        β”‚ λ©”μ„œλ“œ   β”‚ μ—”λ“œν¬μΈνŠΈ         β”‚ μ„€λͺ…              β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚  λͺ©λ‘ 쑰회   β”‚ GET     β”‚ /api/users        β”‚ λͺ¨λ“  μ‚¬μš©μž 쑰회   β”‚
β”‚  단일 쑰회   β”‚ GET     β”‚ /api/users/1      β”‚ ID=1 μ‚¬μš©μž 쑰회   β”‚
β”‚  생성       β”‚ POST    β”‚ /api/users        β”‚ μƒˆ μ‚¬μš©μž 생성     β”‚
β”‚  전체 μˆ˜μ •   β”‚ PUT     β”‚ /api/users/1      β”‚ μ‚¬μš©μž 전체 μ—…λ°μ΄νŠΈ β”‚
β”‚  일뢀 μˆ˜μ •   β”‚ PATCH   β”‚ /api/users/1      β”‚ μ‚¬μš©μž 일뢀 μ—…λ°μ΄νŠΈ β”‚
β”‚  μ‚­μ œ       β”‚ DELETE  β”‚ /api/users/1      β”‚ μ‚¬μš©μž μ‚­μ œ        β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

λ©”μ„œλ“œλ³„ μš”μ²­ μ˜ˆμ‹œ

# GET - λ¦¬μ†ŒμŠ€ 쑰회
curl -X GET "http://api.example.com/users?page=1&limit=10"

# POST - λ¦¬μ†ŒμŠ€ 생성
curl -X POST http://api.example.com/users \
  -H "Content-Type: application/json" \
  -d '{
    "name": "홍길동",
    "email": "hong@example.com"
  }'

# PUT - 전체 μˆ˜μ •
curl -X PUT http://api.example.com/users/1 \
  -H "Content-Type: application/json" \
  -d '{
    "name": "홍길동",
    "email": "hong.new@example.com",
    "status": "active"
  }'

# PATCH - 일뢀 μˆ˜μ •
curl -X PATCH http://api.example.com/users/1 \
  -H "Content-Type: application/json" \
  -d '{"status": "inactive"}'

# DELETE - μ‚­μ œ
curl -X DELETE http://api.example.com/users/1

# HEAD - ν—€λ”λ§Œ 쑰회
curl -I http://api.example.com/users/1

# OPTIONS - 지원 λ©”μ„œλ“œ 확인
curl -X OPTIONS http://api.example.com/users

3. HTTP μƒνƒœ μ½”λ“œ

μƒνƒœ μ½”λ“œ λΆ„λ₯˜

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                      HTTP μƒνƒœ μ½”λ“œ λΆ„λ₯˜                          β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚  λΆ„λ₯˜   β”‚ λ²”μœ„      β”‚ 의미                                       β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚  1xx   β”‚ 100-199  β”‚ 정보성 (Informational) - 처리 쀑             β”‚
β”‚  2xx   β”‚ 200-299  β”‚ 성곡 (Success) - μš”μ²­ 성곡                   β”‚
β”‚  3xx   β”‚ 300-399  β”‚ λ¦¬λ‹€μ΄λ ‰μ…˜ (Redirection) - μΆ”κ°€ 쑰치 ν•„μš”     β”‚
β”‚  4xx   β”‚ 400-499  β”‚ ν΄λΌμ΄μ–ΈνŠΈ 였λ₯˜ (Client Error)               β”‚
β”‚  5xx   β”‚ 500-599  β”‚ μ„œλ²„ 였λ₯˜ (Server Error)                     β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

1xx - 정보성 응닡

μ½”λ“œ 이름 μ„€λͺ…
100 Continue μš”μ²­ 계속 μ§„ν–‰ κ°€λŠ₯
101 Switching Protocols ν”„λ‘œν† μ½œ μ „ν™˜ (WebSocket λ“±)
102 Processing 처리 쀑 (WebDAV)

2xx - 성곡 응닡

μ½”λ“œ 이름 μ„€λͺ… μ‚¬μš© μ˜ˆμ‹œ
200 OK μš”μ²­ 성곡 GET 성곡
201 Created λ¦¬μ†ŒμŠ€ 생성됨 POST 성곡
202 Accepted μš”μ²­ 수락됨 (비동기 처리) 비동기 μž‘μ—…
204 No Content 성곡, 응닡 λ°”λ”” μ—†μŒ DELETE 성곡
206 Partial Content 일뢀 μ½˜ν…μΈ  λ²”μœ„ μš”μ²­

3xx - λ¦¬λ‹€μ΄λ ‰μ…˜

μ½”λ“œ 이름 μ„€λͺ… μΊμ‹œ
301 Moved Permanently 영ꡬ 이동 μΊμ‹œλ¨
302 Found μž„μ‹œ 이동 μΊμ‹œ μ•ˆλ¨
303 See Other λ‹€λ₯Έ μœ„μΉ˜ (GET으둜 λ³€κ²½) μΊμ‹œ μ•ˆλ¨
304 Not Modified λ³€κ²½ μ—†μŒ (μΊμ‹œ μ‚¬μš©) -
307 Temporary Redirect μž„μ‹œ 이동 (λ©”μ„œλ“œ μœ μ§€) μΊμ‹œ μ•ˆλ¨
308 Permanent Redirect 영ꡬ 이동 (λ©”μ„œλ“œ μœ μ§€) μΊμ‹œλ¨

4xx - ν΄λΌμ΄μ–ΈνŠΈ 였λ₯˜

μ½”λ“œ 이름 μ„€λͺ…
400 Bad Request 잘λͺ»λœ μš”μ²­ (문법 였λ₯˜)
401 Unauthorized 인증 ν•„μš”
403 Forbidden μ ‘κ·Ό κΈˆμ§€ (κΆŒν•œ μ—†μŒ)
404 Not Found λ¦¬μ†ŒμŠ€ μ—†μŒ
405 Method Not Allowed ν—ˆμš©λ˜μ§€ μ•Šμ€ λ©”μ„œλ“œ
408 Request Timeout μš”μ²­ μ‹œκ°„ 초과
409 Conflict 좩돌 (λ™μ‹œ μˆ˜μ • λ“±)
413 Payload Too Large μš”μ²­ λ°”λ”” λ„ˆλ¬΄ 큼
414 URI Too Long URI λ„ˆλ¬΄ κΉ€
415 Unsupported Media Type μ§€μ›ν•˜μ§€ μ•ŠλŠ” λ―Έλ””μ–΄ νƒ€μž…
422 Unprocessable Entity 처리 λΆˆκ°€λŠ₯ν•œ μ—”ν‹°ν‹°
429 Too Many Requests μš”μ²­ 횟수 초과 (Rate Limit)

5xx - μ„œλ²„ 였λ₯˜

μ½”λ“œ 이름 μ„€λͺ…
500 Internal Server Error μ„œλ²„ λ‚΄λΆ€ 였λ₯˜
501 Not Implemented κ΅¬ν˜„λ˜μ§€ μ•ŠμŒ
502 Bad Gateway κ²Œμ΄νŠΈμ›¨μ΄ 였λ₯˜
503 Service Unavailable μ„œλΉ„μŠ€ 이용 λΆˆκ°€
504 Gateway Timeout κ²Œμ΄νŠΈμ›¨μ΄ μ‹œκ°„ 초과

μƒνƒœ μ½”λ“œ 흐름도

                        β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
                        β”‚  HTTP μš”μ²­   β”‚
                        β””β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”˜
                               β”‚
                        β”Œβ”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”
                        β”‚  μš”μ²­ 검증   β”‚
                        β””β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”˜
                               β”‚
           β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
           β”‚                   β”‚                   β”‚
    β”Œβ”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”     β”Œβ”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”     β”Œβ”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”
    β”‚  문법 였λ₯˜   β”‚     β”‚  인증 확인   β”‚     β”‚  κΆŒν•œ 확인   β”‚
    β””β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”˜     β””β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”˜     β””β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”˜
           β”‚                   β”‚                   β”‚
    β”Œβ”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”     β”Œβ”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”     β”Œβ”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”
    β”‚    400      β”‚     β”‚    401      β”‚     β”‚    403      β”‚
    β”‚ Bad Request β”‚     β”‚Unauthorized β”‚     β”‚  Forbidden  β”‚
    β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜     β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜     β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

                        β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
                        β”‚ λ¦¬μ†ŒμŠ€ 쑰회   β”‚
                        β””β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”˜
                               β”‚
                 β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
                 β”‚             β”‚             β”‚
          β”Œβ”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β–Όβ”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”
          β”‚  λ¦¬μ†ŒμŠ€ μ—†μŒ  β”‚  β”‚ 성곡  β”‚  β”‚  μ„œλ²„ 였λ₯˜   β”‚
          β””β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”¬β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”˜
                 β”‚             β”‚             β”‚
          β”Œβ”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β–Όβ”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”
          β”‚    404      β”‚  β”‚  200  β”‚  β”‚    500      β”‚
          β”‚  Not Found  β”‚  β”‚  OK   β”‚  β”‚   Internal  β”‚
          β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

4. HTTP 헀더

헀더 λΆ„λ₯˜

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                      HTTP 헀더 λΆ„λ₯˜                              β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚  λΆ„λ₯˜              β”‚ μ„€λͺ…                                        β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚  일반 헀더         β”‚ μš”μ²­/응닡 λͺ¨λ‘ μ‚¬μš© (Date, Connection λ“±)    β”‚
β”‚  μš”μ²­ 헀더         β”‚ ν΄λΌμ΄μ–ΈνŠΈ 정보 (Host, User-Agent λ“±)        β”‚
β”‚  응닡 헀더         β”‚ μ„œλ²„ 정보 (Server, Set-Cookie λ“±)            β”‚
β”‚  μ—”ν‹°ν‹° 헀더       β”‚ λ³Έλ¬Έ 정보 (Content-Type, Content-Length λ“±)  β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

μ£Όμš” μš”μ²­ 헀더

헀더 μ„€λͺ… μ˜ˆμ‹œ
Host μš”μ²­ 호슀트 Host: api.example.com
User-Agent ν΄λΌμ΄μ–ΈνŠΈ 정보 User-Agent: Mozilla/5.0
Accept μ›ν•˜λŠ” 응닡 νƒ€μž… Accept: application/json
Accept-Language μ„ ν˜Έ μ–Έμ–΄ Accept-Language: ko-KR,ko;q=0.9
Accept-Encoding 지원 인코딩 Accept-Encoding: gzip, deflate
Authorization 인증 정보 Authorization: Bearer token123
Cookie μΏ ν‚€ 전솑 Cookie: session_id=abc123
Content-Type μš”μ²­ λ°”λ”” νƒ€μž… Content-Type: application/json
Content-Length μš”μ²­ λ°”λ”” 크기 Content-Length: 256
Referer 이전 νŽ˜μ΄μ§€ URL Referer: https://google.com
Origin μš”μ²­ 좜처 Origin: https://example.com

μ£Όμš” 응닡 헀더

헀더 μ„€λͺ… μ˜ˆμ‹œ
Content-Type 응닡 λ°”λ”” νƒ€μž… Content-Type: text/html; charset=utf-8
Content-Length 응닡 λ°”λ”” 크기 Content-Length: 1024
Content-Encoding μ••μΆ• 방식 Content-Encoding: gzip
Cache-Control μΊμ‹œ μ œμ–΄ Cache-Control: max-age=3600
Expires 만료 μ‹œκ°„ Expires: Wed, 27 Jan 2027 10:00:00 GMT
ETag λ¦¬μ†ŒμŠ€ 버전 μ‹λ³„μž ETag: "abc123"
Last-Modified λ§ˆμ§€λ§‰ μˆ˜μ • μ‹œκ°„ Last-Modified: Mon, 01 Jan 2026 00:00:00 GMT
Set-Cookie μΏ ν‚€ μ„€μ • Set-Cookie: id=abc; HttpOnly; Secure
Location λ¦¬λ‹€μ΄λ ‰νŠΈ μœ„μΉ˜ Location: https://example.com/new
Server μ„œλ²„ 정보 Server: nginx/1.24.0

λ³΄μ•ˆ κ΄€λ ¨ 헀더

헀더 μ„€λͺ…
Strict-Transport-Security (HSTS) HTTPS κ°•μ œ
X-Content-Type-Options MIME μŠ€λ‹ˆν•‘ λ°©μ§€
X-Frame-Options ν΄λ¦­μž¬ν‚Ή λ°©μ§€
X-XSS-Protection XSS ν•„ν„° ν™œμ„±ν™”
Content-Security-Policy (CSP) μ½˜ν…μΈ  λ³΄μ•ˆ μ •μ±…
Access-Control-Allow-Origin CORS ν—ˆμš© 좜처

캐싱 κ΄€λ ¨ 헀더

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                      HTTP 캐싱 흐름                              β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚                                                                 β”‚
β”‚  [ν΄λΌμ΄μ–ΈνŠΈ]                              [μ„œλ²„]                β”‚
β”‚      β”‚                                        β”‚                 β”‚
β”‚      │──── GET /image.png ────────────────▢  β”‚                 β”‚
β”‚      β”‚                                        β”‚                 β”‚
β”‚      │◀─── 200 OK ──────────────────────────│                 β”‚
β”‚      β”‚     Cache-Control: max-age=3600       β”‚                 β”‚
β”‚      β”‚     ETag: "abc123"                    β”‚                 β”‚
β”‚      β”‚     Last-Modified: Mon, 01 Jan...     β”‚                 β”‚
β”‚      β”‚                                        β”‚                 β”‚
β”‚  [μΊμ‹œ μ €μž₯]                                  β”‚                 β”‚
β”‚      β”‚                                        β”‚                 β”‚
β”‚      │──── GET /image.png ────────────────▢  β”‚                 β”‚
β”‚      β”‚     If-None-Match: "abc123"           β”‚                 β”‚
β”‚      β”‚                                        β”‚                 β”‚
β”‚      │◀─── 304 Not Modified ────────────────│                 β”‚
β”‚      β”‚     (λ°”λ”” μ—†μŒ, μΊμ‹œ μ‚¬μš©)              β”‚                 β”‚
β”‚                                                                 β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Cache-Control μ§€μ‹œμž

μ§€μ‹œμž μ„€λͺ…
no-store μΊμ‹œ μ €μž₯ κΈˆμ§€
no-cache μΊμ‹œ μ‚¬μš© μ „ 검증 ν•„μš”
max-age=N N초 λ™μ•ˆ 유효
s-maxage=N 곡유 μΊμ‹œμ—μ„œ N초 유효
private 개인 μΊμ‹œλ§Œ ν—ˆμš©
public 곡유 μΊμ‹œ ν—ˆμš©
must-revalidate 만료 ν›„ λ°˜λ“œμ‹œ 검증

5. HTTP 버전 비ꡐ

HTTP 버전 λ°œμ „

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                    HTTP 버전 λ°œμ „ κ³Όμ •                            β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚                                                                 β”‚
β”‚  HTTP/0.9 (1991)                                               β”‚
β”‚  └── GET만 지원, 헀더 μ—†μŒ                                       β”‚
β”‚       β”‚                                                         β”‚
β”‚       β–Ό                                                         β”‚
β”‚  HTTP/1.0 (1996)                                               β”‚
β”‚  └── 헀더 μΆ”κ°€, μƒνƒœ μ½”λ“œ, POST/HEAD                             β”‚
β”‚       β”‚                                                         β”‚
β”‚       β–Ό                                                         β”‚
β”‚  HTTP/1.1 (1997)                                               β”‚
β”‚  └── 지속 μ—°κ²°, νŒŒμ΄ν”„λΌμ΄λ‹, Host 헀더 ν•„μˆ˜                      β”‚
β”‚       β”‚                                                         β”‚
β”‚       β–Ό                                                         β”‚
β”‚  HTTP/2 (2015)                                                  β”‚
β”‚  └── λ°”μ΄λ„ˆλ¦¬ ν”„λ‘œν† μ½œ, λ©€ν‹°ν”Œλ ‰μ‹±, 헀더 μ••μΆ•                      β”‚
β”‚       β”‚                                                         β”‚
β”‚       β–Ό                                                         β”‚
β”‚  HTTP/3 (2022)                                                  β”‚
β”‚  └── QUIC (UDP 기반), ν–₯μƒλœ μ—°κ²° μ„€μ •                            β”‚
β”‚                                                                 β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

HTTP/1.1 vs HTTP/2 vs HTTP/3

νŠΉμ„± HTTP/1.1 HTTP/2 HTTP/3
ν”„λ‘œν† μ½œ ν…μŠ€νŠΈ λ°”μ΄λ„ˆλ¦¬ λ°”μ΄λ„ˆλ¦¬
전솑 계측 TCP TCP QUIC (UDP)
λ©€ν‹°ν”Œλ ‰μ‹± X O O
헀더 μ••μΆ• X HPACK QPACK
μ„œλ²„ ν‘Έμ‹œ X O O
μ—°κ²°λ‹Ή μš”μ²­ 순차적 λ™μ‹œ 닀쀑 λ™μ‹œ 닀쀑
HOL Blocking 있음 TCP μˆ˜μ€€μ— 있음 μ—†μŒ

HTTP/1.1 μ—°κ²° 방식

HTTP/1.0 (λΉ„μ—°κ²°)           HTTP/1.1 (지속 μ—°κ²°)

μš”μ²­ 1 ──────▢              μš”μ²­ 1 ──────▢
      ◀────── 응닡 1              ◀────── 응닡 1
[μ—°κ²° μ’…λ£Œ]                  μš”μ²­ 2 ──────▢
μš”μ²­ 2 ──────▢                    ◀────── 응닡 2
      ◀────── 응닡 2        μš”μ²­ 3 ──────▢
[μ—°κ²° μ’…λ£Œ]                        ◀────── 응닡 3
μš”μ²­ 3 ──────▢              [μ—°κ²° μœ μ§€ ν›„ μ’…λ£Œ]
      ◀────── 응닡 3
[μ—°κ²° μ’…λ£Œ]

β€» 3번의 TCP μ—°κ²°           β€» 1번의 TCP μ—°κ²°

HTTP/2 λ©€ν‹°ν”Œλ ‰μ‹±

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                      HTTP/2 λ©€ν‹°ν”Œλ ‰μ‹±                           β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚                                                                 β”‚
β”‚  HTTP/1.1 (순차 처리)      β”‚  HTTP/2 (λ™μ‹œ 처리)                 β”‚
β”‚                           β”‚                                     β”‚
β”‚  μš”μ²­1 ──────────────▢    β”‚  μš”μ²­1 ────▢                        β”‚
β”‚  응닡1 ◀──────────────    β”‚  μš”μ²­2 ────▢ (λ™μ‹œ)                 β”‚
β”‚  μš”μ²­2 ──────────────▢    β”‚  μš”μ²­3 ────▢ (λ™μ‹œ)                 β”‚
β”‚  응닡2 ◀──────────────    β”‚  응닡2 ◀────                        β”‚
β”‚  μš”μ²­3 ──────────────▢    β”‚  응닡1 ◀────                        β”‚
β”‚  응닡3 ◀──────────────    β”‚  응닡3 ◀────                        β”‚
β”‚                           β”‚                                     β”‚
β”‚  β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€   β”‚  β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€                   β”‚
β”‚       κΈ΄ μ‹œκ°„              β”‚     짧은 μ‹œκ°„                        β”‚
β”‚                           β”‚                                     β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

HTTP/3와 QUIC

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                    HTTP/3 (QUIC 기반)                            β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚                                                                 β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”      β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”                           β”‚
β”‚  β”‚  HTTP/2     β”‚      β”‚  HTTP/3     β”‚                           β”‚
β”‚  β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€      β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€                           β”‚
β”‚  β”‚    TLS      β”‚      β”‚    QUIC     │◀─ TLS 1.3 λ‚΄μž₯            β”‚
β”‚  β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€      β”‚   (μ•”ν˜Έν™”)   β”‚                           β”‚
β”‚  β”‚    TCP      β”‚      β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€                           β”‚
β”‚  β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€      β”‚    UDP      β”‚                           β”‚
β”‚  β”‚    IP       β”‚      β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€                           β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜      β”‚    IP       β”‚                           β”‚
β”‚                       β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜                           β”‚
β”‚                                                                 β”‚
β”‚  QUIC μž₯점:                                                     β”‚
β”‚  - 0-RTT μ—°κ²° (μž¬μ—°κ²° μ‹œ)                                        β”‚
β”‚  - νŒ¨ν‚· 손싀 μ‹œ λ‹€λ₯Έ 슀트림 영ν–₯ μ—†μŒ                              β”‚
β”‚  - μ—°κ²° λ§ˆμ΄κ·Έλ ˆμ΄μ…˜ (IP λ³€κ²½ μ‹œμ—λ„ μ—°κ²° μœ μ§€)                    β”‚
β”‚                                                                 β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

6. HTTPS와 TLS/SSL

HTTPS κ°œμš”

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                    HTTP vs HTTPS                                 β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚                                                                 β”‚
β”‚  HTTP (Port 80)           β”‚  HTTPS (Port 443)                   β”‚
β”‚                           β”‚                                     β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”          β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”                    β”‚
β”‚  β”‚    HTTP     β”‚          β”‚  β”‚    HTTP     β”‚                    β”‚
β”‚  β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€          β”‚  β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€                    β”‚
β”‚  β”‚    TCP      β”‚          β”‚  β”‚  TLS/SSL    │◀─ μ•”ν˜Έν™” 계측       β”‚
β”‚  β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€          β”‚  β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€                    β”‚
β”‚  β”‚    IP       β”‚          β”‚  β”‚    TCP      β”‚                    β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜          β”‚  β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€                    β”‚
β”‚                           β”‚  β”‚    IP       β”‚                    β”‚
β”‚  평문 전솑                 β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜                    β”‚
β”‚  데이터 λ…ΈμΆœ μœ„ν—˜          β”‚                                     β”‚
β”‚                           β”‚  μ•”ν˜Έν™”λœ 전솑                       β”‚
β”‚                           β”‚  데이터 보호                         β”‚
β”‚                                                                 β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

TLS/SSL 역사

버전 연도 μƒνƒœ
SSL 2.0 1995 폐기 (λ³΄μ•ˆ μ·¨μ•½)
SSL 3.0 1996 폐기 (POODLE 취약점)
TLS 1.0 1999 폐기 ꢌμž₯
TLS 1.1 2006 폐기 ꢌμž₯
TLS 1.2 2008 μ‚¬μš© 쀑
TLS 1.3 2018 ꢌμž₯ (ν˜„μž¬ μ΅œμ‹ )

TLS ν•Έλ“œμ…°μ΄ν¬ (TLS 1.2)

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                  TLS 1.2 ν•Έλ“œμ…°μ΄ν¬                               β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚                                                                 β”‚
β”‚  [ν΄λΌμ΄μ–ΈνŠΈ]                              [μ„œλ²„]                β”‚
β”‚      β”‚                                        β”‚                 β”‚
β”‚      │──(1) ClientHello ─────────────────▢  β”‚                 β”‚
β”‚      β”‚    - 지원 TLS 버전                     β”‚                 β”‚
β”‚      β”‚    - 지원 μ•”ν˜Έν™” μŠ€μœ„νŠΈ                 β”‚                 β”‚
β”‚      β”‚    - ν΄λΌμ΄μ–ΈνŠΈ λ‚œμˆ˜                   β”‚                 β”‚
β”‚      β”‚                                        β”‚                 β”‚
β”‚      │◀─(2) ServerHello ─────────────────── β”‚                 β”‚
β”‚      β”‚    - μ„ νƒλœ TLS 버전                   β”‚                 β”‚
β”‚      β”‚    - μ„ νƒλœ μ•”ν˜Έν™” μŠ€μœ„νŠΈ               β”‚                 β”‚
β”‚      β”‚    - μ„œλ²„ λ‚œμˆ˜                         β”‚                 β”‚
β”‚      β”‚                                        β”‚                 β”‚
β”‚      │◀─(3) Certificate ─────────────────── β”‚                 β”‚
β”‚      β”‚    - μ„œλ²„ μΈμ¦μ„œ (κ³΅κ°œν‚€ 포함)          β”‚                 β”‚
β”‚      β”‚                                        β”‚                 β”‚
β”‚      │◀─(4) ServerHelloDone ──────────────  β”‚                 β”‚
β”‚      β”‚                                        β”‚                 β”‚
β”‚      │──(5) ClientKeyExchange ───────────▢  β”‚                 β”‚
β”‚      β”‚    - Pre-Master Secret (μ•”ν˜Έν™”)        β”‚                 β”‚
β”‚      β”‚                                        β”‚                 β”‚
β”‚      │──(6) ChangeCipherSpec ────────────▢  β”‚                 β”‚
β”‚      │──(7) Finished ────────────────────▢  β”‚                 β”‚
β”‚      β”‚                                        β”‚                 β”‚
β”‚      │◀─(8) ChangeCipherSpec ───────────────│                 β”‚
β”‚      │◀─(9) Finished ───────────────────────│                 β”‚
β”‚      β”‚                                        β”‚                 β”‚
β”‚      │◀════════ μ•”ν˜Έν™”λœ 톡신 ═══════════════▢│                 β”‚
β”‚                                                                 β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

TLS 1.3 ν•Έλ“œμ…°μ΄ν¬ (κ°„μ†Œν™”)

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚               TLS 1.3 ν•Έλ“œμ…°μ΄ν¬ (1-RTT)                         β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚                                                                 β”‚
β”‚  [ν΄λΌμ΄μ–ΈνŠΈ]                              [μ„œλ²„]                β”‚
β”‚      β”‚                                        β”‚                 β”‚
β”‚      │──(1) ClientHello + KeyShare ──────▢  β”‚                 β”‚
β”‚      β”‚                                        β”‚                 β”‚
β”‚      │◀─(2) ServerHello + KeyShare ─────────│                 β”‚
β”‚      β”‚      Certificate                      β”‚                 β”‚
β”‚      β”‚      Finished                         β”‚                 β”‚
β”‚      β”‚                                        β”‚                 β”‚
β”‚      │──(3) Finished ────────────────────▢  β”‚                 β”‚
β”‚      β”‚                                        β”‚                 β”‚
β”‚      │◀════════ μ•”ν˜Έν™”λœ 톡신 ═══════════════▢│                 β”‚
β”‚                                                                 β”‚
β”‚  β€» 1 RTT (왕볡)λ§Œμ— ν•Έλ“œμ…°μ΄ν¬ μ™„λ£Œ                              β”‚
β”‚  β€» 0-RTT: 이전 μ„Έμ…˜ 재개 μ‹œ 첫 μš”μ²­λΆ€ν„° 데이터 전솑 κ°€λŠ₯           β”‚
β”‚                                                                 β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

μ•”ν˜Έν™” μ’…λ₯˜

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                      μ•”ν˜Έν™” 방식                                 β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚                                                                 β”‚
β”‚  λŒ€μΉ­ν‚€ μ•”ν˜Έν™” (Symmetric)                                       β”‚
β”‚  ─────────────────────────                                      β”‚
β”‚  - 같은 ν‚€λ‘œ μ•”ν˜Έν™”/λ³΅ν˜Έν™”                                        β”‚
β”‚  - λΉ λ₯Έ 속도                                                    β”‚
β”‚  - 예: AES, ChaCha20                                           β”‚
β”‚                                                                 β”‚
β”‚      평문 ──[ν‚€]──▢ μ•”ν˜Έλ¬Έ ──[ν‚€]──▢ 평문                        β”‚
β”‚                                                                 β”‚
β”‚  λΉ„λŒ€μΉ­ν‚€ μ•”ν˜Έν™” (Asymmetric)                                    β”‚
β”‚  ─────────────────────────                                      β”‚
β”‚  - κ³΅κ°œν‚€/κ°œμΈν‚€ 쌍 μ‚¬μš©                                          β”‚
β”‚  - 느린 속도, ν‚€ κ΅ν™˜μ— μ‚¬μš©                                      β”‚
β”‚  - 예: RSA, ECDSA                                               β”‚
β”‚                                                                 β”‚
β”‚      평문 ──[κ³΅κ°œν‚€]──▢ μ•”ν˜Έλ¬Έ ──[κ°œμΈν‚€]──▢ 평문                 β”‚
β”‚                                                                 β”‚
β”‚  TLSμ—μ„œμ˜ ν™œμš©                                                  β”‚
β”‚  ─────────────                                                  β”‚
β”‚  1. λΉ„λŒ€μΉ­ν‚€λ‘œ μ„Έμ…˜ ν‚€ κ΅ν™˜                                       β”‚
β”‚  2. λŒ€μΉ­ν‚€(μ„Έμ…˜ ν‚€)둜 μ‹€μ œ 데이터 μ•”ν˜Έν™”                           β”‚
β”‚                                                                 β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

7. μΈμ¦μ„œ

μΈμ¦μ„œ ꡬ쑰

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                    X.509 μΈμ¦μ„œ ꡬ쑰                             β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚                                                                 β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”   β”‚
β”‚  β”‚  버전 (Version): V3                                      β”‚   β”‚
β”‚  β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€   β”‚
β”‚  β”‚  일련번호 (Serial Number): 0x1234...                     β”‚   β”‚
β”‚  β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€   β”‚
β”‚  β”‚  μ„œλͺ… μ•Œκ³ λ¦¬μ¦˜ (Signature Algorithm): SHA256withRSA      β”‚   β”‚
β”‚  β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€   β”‚
β”‚  β”‚  λ°œκΈ‰μž (Issuer): CN=Let's Encrypt Authority X3         β”‚   β”‚
β”‚  β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€   β”‚
β”‚  β”‚  유효 κΈ°κ°„ (Validity)                                    β”‚   β”‚
β”‚  β”‚    Not Before: 2026-01-01 00:00:00                      β”‚   β”‚
β”‚  β”‚    Not After:  2026-04-01 00:00:00                      β”‚   β”‚
β”‚  β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€   β”‚
β”‚  β”‚  주체 (Subject): CN=www.example.com                     β”‚   β”‚
β”‚  β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€   β”‚
β”‚  β”‚  κ³΅κ°œν‚€ 정보 (Public Key Info)                           β”‚   β”‚
β”‚  β”‚    Algorithm: RSA                                        β”‚   β”‚
β”‚  β”‚    Key Size: 2048 bits                                   β”‚   β”‚
β”‚  β”‚    Public Key: 30 82 01 0a 02 82 01 01 00...            β”‚   β”‚
β”‚  β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€   β”‚
β”‚  β”‚  ν™•μž₯ (Extensions)                                       β”‚   β”‚
β”‚  β”‚    Subject Alternative Names: www.example.com,           β”‚   β”‚
β”‚  β”‚                               example.com                β”‚   β”‚
β”‚  β”‚    Key Usage: Digital Signature, Key Encipherment        β”‚   β”‚
β”‚  β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€   β”‚
β”‚  β”‚  μ„œλͺ… (Signature): 48 46 2b 88 2d...                     β”‚   β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜   β”‚
β”‚                                                                 β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

μΈμ¦μ„œ 체인

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                    μΈμ¦μ„œ 체인 (Chain of Trust)                   β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚                                                                 β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”   β”‚
β”‚  β”‚              루트 μΈμ¦μ„œ (Root CA)                        β”‚   β”‚
β”‚  β”‚         - 자체 μ„œλͺ… (Self-signed)                        β”‚   β”‚
β”‚  β”‚         - λΈŒλΌμš°μ €/OS에 λ‚΄μž₯                              β”‚   β”‚
β”‚  β”‚         - 예: DigiCert, GlobalSign                       β”‚   β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜   β”‚
β”‚                           β”‚ μ„œλͺ…                                β”‚
β”‚                           β–Ό                                     β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”   β”‚
β”‚  β”‚           쀑간 μΈμ¦μ„œ (Intermediate CA)                   β”‚   β”‚
β”‚  β”‚         - 루트 CAκ°€ μ„œλͺ…                                  β”‚   β”‚
β”‚  β”‚         - 예: Let's Encrypt R3                           β”‚   β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜   β”‚
β”‚                           β”‚ μ„œλͺ…                                β”‚
β”‚                           β–Ό                                     β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”   β”‚
β”‚  β”‚             μ„œλ²„ μΈμ¦μ„œ (End-Entity)                      β”‚   β”‚
β”‚  β”‚         - 쀑간 CAκ°€ μ„œλͺ…                                  β”‚   β”‚
β”‚  β”‚         - 도메인: www.example.com                        β”‚   β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜   β”‚
β”‚                                                                 β”‚
β”‚  검증 μˆœμ„œ: μ„œλ²„ μΈμ¦μ„œ β†’ 쀑간 μΈμ¦μ„œ β†’ 루트 μΈμ¦μ„œ (μ‹ λ’° 확인)    β”‚
β”‚                                                                 β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

μΈμ¦μ„œ μ’…λ₯˜

μ’…λ₯˜ 검증 μˆ˜μ€€ λ°œκΈ‰ μ‹œκ°„ μš©λ„
DV (Domain Validation) 도메인 μ†Œμœ κΆŒλ§Œ λͺ‡ λΆ„ 개인, λΈ”λ‘œκ·Έ
OV (Organization Validation) 쑰직 검증 1-3일 κΈ°μ—…, κΈ°κ΄€
EV (Extended Validation) μ—„κ²©ν•œ 검증 1-2μ£Ό 금육, λŒ€κΈ°μ—…
Wildcard μ„œλΈŒλ„λ©”μΈ 포함 λ‹€μ–‘ *.example.com
Multi-Domain (SAN) μ—¬λŸ¬ 도메인 λ‹€μ–‘ μ—¬λŸ¬ 도메인

μΈμ¦μ„œ λ°œκΈ‰ κ³Όμ • (Let's Encrypt)

# Certbot μ„€μΉ˜ (Ubuntu)
sudo apt install certbot python3-certbot-nginx

# μΈμ¦μ„œ λ°œκΈ‰ (Nginx)
sudo certbot --nginx -d example.com -d www.example.com

# μΈμ¦μ„œ λ°œκΈ‰ (Apache)
sudo certbot --apache -d example.com

# μΈμ¦μ„œ κ°±μ‹ 
sudo certbot renew

# μΈμ¦μ„œ 확인
sudo certbot certificates

# μžλ™ κ°±μ‹  (cron)
0 12 * * * /usr/bin/certbot renew --quiet

μΈμ¦μ„œ 확인 λͺ…λ Ήμ–΄

# 도메인 μΈμ¦μ„œ 확인
openssl s_client -connect example.com:443 -servername example.com

# μΈμ¦μ„œ 상세 정보
echo | openssl s_client -connect example.com:443 2>/dev/null | \
  openssl x509 -noout -text

# 만료일 확인
echo | openssl s_client -connect example.com:443 2>/dev/null | \
  openssl x509 -noout -enddate

# 둜컬 μΈμ¦μ„œ 파일 확인
openssl x509 -in certificate.crt -text -noout

8. μ—°μŠ΅ 문제

기초 문제

  1. HTTP λ©”μ„œλ“œ
  2. GETκ³Ό POST의 차이점 3κ°€μ§€λ₯Ό μ„€λͺ…ν•˜μ„Έμš”.
  3. λ©±λ“±μ„±(Idempotent)μ΄λž€ 무엇이며, λ©±λ“±ν•œ λ©”μ„œλ“œλ₯Ό λͺ¨λ‘ λ‚˜μ—΄ν•˜μ„Έμš”.

  4. μƒνƒœ μ½”λ“œ

  5. λ‹€μŒ 상황에 μ μ ˆν•œ μƒνƒœ μ½”λ“œλ₯Ό μ„ νƒν•˜μ„Έμš”:

    • μ‚¬μš©μž 둜그인 μ‹€νŒ¨ (인증 μ‹€νŒ¨)
    • νŽ˜μ΄μ§€λ₯Ό 찾을 수 μ—†μŒ
    • μ„œλ²„ λ‚΄λΆ€ 였λ₯˜ λ°œμƒ
    • POST μš”μ²­μœΌλ‘œ λ¦¬μ†ŒμŠ€ 생성 성곡
  6. 헀더

  7. Cache-Control: no-cache와 no-store의 μ°¨μ΄λŠ”?
  8. ETag ν—€λ”μ˜ μš©λ„λŠ” λ¬΄μ—‡μΈκ°€μš”?

쀑급 문제

  1. HTTP 버전
  2. HTTP/1.1의 HOL(Head-of-Line) Blocking 문제λ₯Ό μ„€λͺ…ν•˜μ„Έμš”.
  3. HTTP/2κ°€ 이 문제λ₯Ό μ–΄λ–»κ²Œ ν•΄κ²°ν•˜λ‚˜μš”?

  4. HTTPS/TLS

  5. HTTPSλ₯Ό μ‚¬μš©ν•˜λ©΄ 얻을 수 μžˆλŠ” λ³΄μ•ˆ 이점 3κ°€μ§€λŠ”?
  6. TLS 1.2와 TLS 1.3의 ν•Έλ“œμ…°μ΄ν¬ RTT μ°¨μ΄λŠ”?

  7. μ‹€μŠ΅ 문제

# λ‹€μŒ curl λͺ…λ Ήμ–΄μ˜ κ²°κ³Όλ₯Ό λΆ„μ„ν•˜μ„Έμš”

# 1. μš”μ²­ 헀더에 무엇이 ν¬ν•¨λ˜μ–΄ μžˆλ‚˜μš”?
curl -v http://example.com

# 2. 이 μš”μ²­μ΄ μ„±κ³΅ν•˜λ©΄ μ–΄λ–€ μƒνƒœ μ½”λ“œλ₯Ό λ°›λ‚˜μš”?
curl -I -X DELETE http://api.example.com/users/1

# 3. 이 μš”μ²­μ—μ„œ Content-Type은 λ¬΄μ—‡μΈκ°€μš”?
curl -X POST http://api.example.com/users \
  -H "Content-Type: application/json" \
  -d '{"name": "test"}'

κ³ κΈ‰ 문제

  1. μΈμ¦μ„œ 체인
  2. 루트 CAκ°€ 직접 μ„œλ²„ μΈμ¦μ„œμ— μ„œλͺ…ν•˜μ§€ μ•Šκ³  쀑간 CAλ₯Ό μ‚¬μš©ν•˜λŠ” μ΄μœ λŠ”?

  3. λ³΄μ•ˆ 헀더

  4. λ‹€μŒ λ³΄μ•ˆ 취약점을 λ°©μ§€ν•˜κΈ° μœ„ν•œ HTTP 헀더λ₯Ό μ œμ‹œν•˜μ„Έμš”:
    • ν΄λ¦­μž¬ν‚Ή (Clickjacking)
    • XSS (Cross-Site Scripting)
    • MIME μŠ€λ‹ˆν•‘

9. λ‹€μŒ 단계

14_Other_Application_Protocols.mdμ—μ„œ DHCP, FTP, SMTP, SSH λ“± λ‹€λ₯Έ μ• ν”Œλ¦¬μΌ€μ΄μ…˜ 계측 ν”„λ‘œν† μ½œμ„ λ°°μ›Œλ΄…μ‹œλ‹€!


10. 참고 자료

RFC λ¬Έμ„œ

온라인 자료

도ꡬ

  • curl - λͺ…령쀄 HTTP ν΄λΌμ΄μ–ΈνŠΈ
  • Postman - API ν…ŒμŠ€νŠΈ 도ꡬ
  • Charles Proxy - HTTP ν”„λ‘μ‹œ/λͺ¨λ‹ˆν„°λ§
  • Wireshark - νŒ¨ν‚· 뢄석
to navigate between lessons