KR_Net_HTTP - somaz94/DevOps-Engineer GitHub Wiki

๋„คํŠธ์›Œํฌ HTTP & HTTPS (Q1-Q5)

HTTP & HTTPS (1~5๋ฒˆ)


Q1. HTTP์™€ HTTPS์˜ ๋™์ž‘ ์›๋ฆฌ ์ฐจ์ด๋ฅผ ์ƒ์„ธํžˆ ์„ค๋ช…ํ•˜์„ธ์š”.

HTTP ๋™์ž‘ ๊ณผ์ •:

  • โ‘  ํด๋ผ์ด์–ธํŠธ๊ฐ€ HTTP ์š”์ฒญ ๋ฉ”์‹œ์ง€ ์ „์†ก (GET, POST ๋“ฑ ๋ฉ”์„œ๋“œ + URI)
  • โ‘ก ์„œ๋ฒ„๊ฐ€ ์š”์ฒญ ์ฒ˜๋ฆฌ ํ›„ HTTP ์‘๋‹ต ๋ฉ”์‹œ์ง€ ๋ฐ˜ํ™˜ (์ƒํƒœ ์ฝ”๋“œ + ์‘๋‹ต ๋ณธ๋ฌธ)
  • โ‘ข ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์‘๋‹ต ํ•ด์„ ๋ฐ ์ถ”๊ฐ€ ์š”์ฒญ ๊ฐ€๋Šฅ (HTML, CSS, JavaScript ๋“ฑ)
  • โ‘ฃ ํ‰๋ฌธ ์ „์†ก์œผ๋กœ ์ค‘๊ฐ„์ž ๊ณต๊ฒฉ์— ์ทจ์•ฝ

HTTPS ๋™์ž‘ ๊ณผ์ • (TLS Handshake):

  • โ‘  ํด๋ผ์ด์–ธํŠธ๊ฐ€ HTTPS ์„œ๋ฒ„์— ์ ‘์†, ClientHello ๋ฉ”์‹œ์ง€ ์ „์†ก (์ง€์› ์•”ํ˜ธํ™” ์Šค์œ„ํŠธ ๋ชฉ๋ก)
  • โ‘ก ์„œ๋ฒ„๊ฐ€ ServerHello + SSL/TLS ์ธ์ฆ์„œ ์ „์†ก (๊ณต๊ฐœํ‚ค ํฌํ•จ)
  • โ‘ข ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์ธ์ฆ์„œ ๊ฒ€์ฆ (CA์˜ ๊ณต๊ฐœํ‚ค๋กœ ์„œ๋ช… ํ™•์ธ)
  • โ‘ฃ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์„ธ์…˜ ํ‚ค(๋Œ€์นญํ‚ค) ์ƒ์„ฑ ํ›„ ์„œ๋ฒ„์˜ ๊ณต๊ฐœํ‚ค๋กœ ์•”ํ˜ธํ™”ํ•˜์—ฌ ์ „์†ก
  • โ‘ค ์„œ๋ฒ„๊ฐ€ ๋น„๊ณต๊ฐœํ‚ค๋กœ ์„ธ์…˜ ํ‚ค ๋ณตํ˜ธํ™”
  • โ‘ฅ ์ดํ›„ ์„ธ์…˜ ํ‚ค๋ฅผ ์‚ฌ์šฉํ•œ ๋Œ€์นญํ‚ค ์•”ํ˜ธํ™” ํ†ต์‹ 
  • โ‘ฆ Finished ๋ฉ”์‹œ์ง€ ๊ตํ™˜ ํ›„ ์•”ํ˜ธํ™”๋œ ๋ฐ์ดํ„ฐ ์ „์†ก

์ฃผ์š” ์ฐจ์ด์ :

  • HTTP: ํฌํŠธ 80, ํ‰๋ฌธ ์ „์†ก, ๋น ๋ฆ„, ๋ณด์•ˆ ์ทจ์•ฝ
  • HTTPS: ํฌํŠธ 443, ์•”ํ˜ธํ™” ์ „์†ก, TLS Handshake ์˜ค๋ฒ„ํ—ค๋“œ, ๊ธฐ๋ฐ€์„ฑ/๋ฌด๊ฒฐ์„ฑ/์ธ์ฆ ๋ณด์žฅ

Q2. HTTP ๋ฉ”์„œ๋“œ์˜ ๋ฉฑ๋“ฑ์„ฑ(Idempotent)๊ณผ ์•ˆ์ „์„ฑ(Safe)์„ ์„ค๋ช…ํ•˜์„ธ์š”.

์•ˆ์ „ํ•œ ๋ฉ”์„œ๋“œ (Safe Methods):

  • ์„œ๋ฒ„ ์ƒํƒœ๋ฅผ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š๋Š” ์ฝ๊ธฐ ์ „์šฉ ๋ฉ”์„œ๋“œ
  • GET, HEAD, OPTIONS, TRACE
  • ์—ฌ๋Ÿฌ ๋ฒˆ ํ˜ธ์ถœํ•ด๋„ ์„œ๋ฒ„ ๋ฆฌ์†Œ์Šค์— ์˜ํ–ฅ ์—†์Œ

๋ฉฑ๋“ฑํ•œ ๋ฉ”์„œ๋“œ (Idempotent Methods):

  • ๋™์ผํ•œ ์š”์ฒญ์„ ์—ฌ๋Ÿฌ ๋ฒˆ ์ˆ˜ํ–‰ํ•ด๋„ ๊ฒฐ๊ณผ๊ฐ€ ๋™์ผ
  • GET, HEAD, PUT, DELETE, OPTIONS, TRACE
  • POST, PATCH๋Š” ๋น„๋ฉฑ๋“ฑ์ : ๋งค๋ฒˆ ์ƒˆ๋กœ์šด ๋ฆฌ์†Œ์Šค ์ƒ์„ฑ ๋˜๋Š” ๋‹ค๋ฅธ ๊ฒฐ๊ณผ

์‹ค๋ฌด ์˜ˆ์‹œ:

GET /users/123       โ†’ ์•ˆ์ „ + ๋ฉฑ๋“ฑ (์—ฌ๋Ÿฌ ๋ฒˆ ์กฐํšŒํ•ด๋„ ๋™์ผ)
POST /users          โ†’ ๋น„์•ˆ์ „ + ๋น„๋ฉฑ๋“ฑ (๋งค๋ฒˆ ์ƒˆ ์‚ฌ์šฉ์ž ์ƒ์„ฑ)
PUT /users/123       โ†’ ๋น„์•ˆ์ „ + ๋ฉฑ๋“ฑ (๊ฐ™์€ ๋‚ด์šฉ์œผ๋กœ ๋ฎ์–ด์“ฐ๊ธฐ)
DELETE /users/123    โ†’ ๋น„์•ˆ์ „ + ๋ฉฑ๋“ฑ (์ด๋ฏธ ์‚ญ์ œ๋œ ๋ฆฌ์†Œ์Šค ์žฌ์‚ญ์ œ ์‹œ 404์ง€๋งŒ ์ƒํƒœ ๋™์ผ)
PATCH /users/123     โ†’ ๋น„์•ˆ์ „ + ๋น„๋ฉฑ๋“ฑ (์ฆ๊ฐ€ ์—ฐ์‚ฐ ๋“ฑ ๋ˆ„์  ๊ฐ€๋Šฅ)

๋„คํŠธ์›Œํฌ ์žฌ์‹œ๋„ ์ „๋žต:

  • ๋ฉฑ๋“ฑํ•œ ๋ฉ”์„œ๋“œ๋Š” ์ž๋™ ์žฌ์‹œ๋„ ์•ˆ์ „
  • ๋น„๋ฉฑ๋“ฑํ•œ ๋ฉ”์„œ๋“œ๋Š” Idempotency Key ์‚ฌ์šฉ (๊ฒฐ์ œ API ๋“ฑ)

Q3. HTTP/1.1, HTTP/2, HTTP/3์˜ ์ฃผ์š” ์ฐจ์ด์ ๊ณผ ์„ฑ๋Šฅ ๊ฐœ์„  ๋ฐฉ๋ฒ•์€?

HTTP/1.1 (1997):

  • Connection per Request: ์š”์ฒญ๋งˆ๋‹ค ์ƒˆ๋กœ์šด TCP ์—ฐ๊ฒฐ (Keep-Alive๋กœ ์™„ํ™”)
  • Head-of-Line Blocking: ์ด์ „ ์š”์ฒญ ์™„๋ฃŒ ์ „๊นŒ์ง€ ๋Œ€๊ธฐ
  • ํ…์ŠคํŠธ ๊ธฐ๋ฐ˜ ํ”„๋กœํ† ์ฝœ: ํŒŒ์‹ฑ ์˜ค๋ฒ„ํ—ค๋“œ
  • ๊ฐœ์„  ๋ฐฉ๋ฒ•: Pipelining (์ œํ•œ์  ์ง€์›), Domain Sharding (๋‹ค์ค‘ ๋„๋ฉ”์ธ)

HTTP/2 (2015):

  • Multiplexing: ํ•˜๋‚˜์˜ TCP ์—ฐ๊ฒฐ์—์„œ ์—ฌ๋Ÿฌ ์ŠคํŠธ๋ฆผ ๋™์‹œ ์ „์†ก
  • Header Compression (HPACK): ํ—ค๋” ์ค‘๋ณต ์ œ๊ฑฐ ๋ฐ ์••์ถ•
  • Server Push: ํด๋ผ์ด์–ธํŠธ ์š”์ฒญ ์ „ ๋ฆฌ์†Œ์Šค ์„ ์ œ ์ „์†ก
  • Binary Framing: ๋ฐ”์ด๋„ˆ๋ฆฌ ํ”„๋ ˆ์ž„์œผ๋กœ ํšจ์œจ์  ํŒŒ์‹ฑ
  • ํ•œ๊ณ„: TCP ๋ ˆ๋ฒจ Head-of-Line Blocking ์—ฌ์ „ํžˆ ์กด์žฌ (ํŒจํ‚ท ์†์‹ค ์‹œ ์ „์ฒด ์ŠคํŠธ๋ฆผ ๋Œ€๊ธฐ)

HTTP/3 (2022):

  • QUIC over UDP: TCP ๋Œ€์‹  QUIC ํ”„๋กœํ† ์ฝœ ์‚ฌ์šฉ
  • Stream-level ๋…๋ฆฝ์„ฑ: ํ•˜๋‚˜์˜ ์ŠคํŠธ๋ฆผ ํŒจํ‚ท ์†์‹ค์ด ๋‹ค๋ฅธ ์ŠคํŠธ๋ฆผ์— ์˜ํ–ฅ ์—†์Œ
  • 0-RTT Connection: ์ด์ „ ์—ฐ๊ฒฐ ์ •๋ณด ์žฌ์‚ฌ์šฉ์œผ๋กœ Handshake ์ƒ๋žต
  • Connection Migration: IP ๋ณ€๊ฒฝ ์‹œ์—๋„ ์—ฐ๊ฒฐ ์œ ์ง€ (๋ชจ๋ฐ”์ผ ํ™˜๊ฒฝ)
  • ๋‚ด์žฅ TLS 1.3: ์•”ํ˜ธํ™” ํ•„์ˆ˜

์„ฑ๋Šฅ ๋น„๊ต:

HTTP/1.1: 6๊ฐœ ๋ณ‘๋ ฌ ์—ฐ๊ฒฐ โ†’ ๋ฆฌ์†Œ์Šค ๋กœ๋”ฉ ์ง๋ ฌํ™”
HTTP/2:   ๋‹จ์ผ ์—ฐ๊ฒฐ Multiplexing โ†’ 2~3๋ฐฐ ๋น ๋ฆ„
HTTP/3:   QUIC ๊ธฐ๋ฐ˜ โ†’ ํŒจํ‚ท ์†์‹ค ํ™˜๊ฒฝ์—์„œ 10~30% ์ถ”๊ฐ€ ๊ฐœ์„ 

Q4. HTTPS์˜ TLS Handshake ๊ณผ์ •๊ณผ ์„ฑ๋Šฅ ์ตœ์ ํ™” ๋ฐฉ๋ฒ•์€?

Full TLS 1.2 Handshake (2-RTT):

Client                                Server
  |                                     |
  |-------- ClientHello --------------->| (์ง€์› ์•”ํ˜ธํ™” ์Šค์œ„ํŠธ, ๋žœ๋ค ๊ฐ’)
  |                                     |
  |<------- ServerHello ----------------| (์„ ํƒ ์•”ํ˜ธํ™” ์Šค์œ„ํŠธ, ์ธ์ฆ์„œ, ๋žœ๋ค ๊ฐ’)
  |<------- Certificate ----------------| (์„œ๋ฒ„ ๊ณต๊ฐœํ‚ค)
  |<------- ServerHelloDone ------------|
  |                                     |
  |-------- ClientKeyExchange --------->| (Pre-Master Secret ์•”ํ˜ธํ™” ์ „์†ก)
  |-------- ChangeCipherSpec ---------->|
  |-------- Finished ------------------>|
  |                                     |
  |<------- ChangeCipherSpec -----------|
  |<------- Finished -------------------|
  |                                     |
  |======== Application Data ==========| (์•”ํ˜ธํ™”๋œ HTTP ๋ฐ์ดํ„ฐ)

TLS 1.3 Handshake (1-RTT):

Client                                Server
  |-------- ClientHello + KeyShare ---->| (์•”ํ˜ธํ™” ํ‚ค ๊ตํ™˜ ๋™์‹œ ์ „์†ก)
  |                                     |
  |<------- ServerHello + KeyShare -----| (์•”ํ˜ธํ™” ํ‚ค + ์ธ์ฆ์„œ)
  |<------- {EncryptedExtensions} ------|
  |<------- {Certificate} --------------|
  |<------- {Finished} -----------------|
  |                                     |
  |-------- {Finished} ---------------->|
  |======== Application Data ==========|

์„ฑ๋Šฅ ์ตœ์ ํ™” ๋ฐฉ๋ฒ•:

1. TLS Session Resumption:

Session ID: ์„œ๋ฒ„๊ฐ€ ์„ธ์…˜ ์ •๋ณด ์ €์žฅ (๋ฉ”๋ชจ๋ฆฌ ๋ถ€๋‹ด)
Session Ticket: ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์•”ํ˜ธํ™”๋œ ํ‹ฐ์ผ“ ์ €์žฅ (stateless)

2. TLS 1.3 0-RTT (Zero Round Trip Time):

  • ์ด์ „ ์—ฐ๊ฒฐ์˜ PSK(Pre-Shared Key) ์žฌ์‚ฌ์šฉ
  • Handshake ์—†์ด ๋ฐ”๋กœ ๋ฐ์ดํ„ฐ ์ „์†ก
  • ๋ณด์•ˆ ํŠธ๋ ˆ์ด๋“œ์˜คํ”„: Replay Attack ์œ„ํ—˜ (๋ฉฑ๋“ฑํ•œ ์š”์ฒญ๋งŒ ์‚ฌ์šฉ)

3. OCSP Stapling:

  • ์„œ๋ฒ„๊ฐ€ ์ธ์ฆ์„œ ์ƒํƒœ๋ฅผ ๋ฏธ๋ฆฌ ํ™•์ธํ•˜์—ฌ ์‘๋‹ต์— ํฌํ•จ
  • ํด๋ผ์ด์–ธํŠธ์˜ CA ์กฐํšŒ ์‹œ๊ฐ„ ์ ˆ์•ฝ

4. HTTP/3 (QUIC):

  • 0-RTT Connection ๊ธฐ๋ณธ ์ง€์›
  • TLS 1.3 ๋‚ด์žฅ

์‹ค๋ฌด ์„ค์ • (Nginx):

ssl_protocols TLSv1.3 TLSv1.2;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
ssl_session_tickets on;
ssl_stapling on;
ssl_stapling_verify on;

Q5. HTTP ์ƒํƒœ ์ฝ”๋“œ๋ณ„ ์‹ค๋ฌด ํ™œ์šฉ๊ณผ ์บ์‹ฑ ์ „๋žต์€?

2xx ์„ฑ๊ณต ์‘๋‹ต:

  • 200 OK: GET ์„ฑ๊ณต, ์‘๋‹ต ๋ณธ๋ฌธ ํฌํ•จ
  • 201 Created: POST๋กœ ๋ฆฌ์†Œ์Šค ์ƒ์„ฑ ์„ฑ๊ณต, Location ํ—ค๋”์— ์ƒˆ URI
  • 204 No Content: ์š”์ฒญ ์„ฑ๊ณตํ•˜์ง€๋งŒ ์‘๋‹ต ๋ณธ๋ฌธ ์—†์Œ (DELETE, PUT ์„ฑ๊ณต ์‹œ)
  • 206 Partial Content: Range ์š”์ฒญ์— ๋Œ€ํ•œ ๋ถ€๋ถ„ ์‘๋‹ต (๋™์˜์ƒ ์ŠคํŠธ๋ฆฌ๋ฐ)

3xx ๋ฆฌ๋‹ค์ด๋ ‰์…˜:

  • 301 Moved Permanently: ์˜๊ตฌ ์ด๋™, ๊ฒ€์ƒ‰ ์—”์ง„์ด ์ƒˆ URL ์ธ๋ฑ์‹ฑ
  • 302 Found: ์ž„์‹œ ์ด๋™, ์›๋ณธ URL ์œ ์ง€
  • 304 Not Modified: ์บ์‹œ๋œ ๋ฆฌ์†Œ์Šค ์œ ํšจ, ๋ณธ๋ฌธ ์ „์†ก ์•ˆ ํ•จ (If-Modified-Since, ETag ํ™œ์šฉ)
  • 307 Temporary Redirect: 302์™€ ์œ ์‚ฌํ•˜์ง€๋งŒ ๋ฉ”์„œ๋“œ ๋ณ€๊ฒฝ ๊ธˆ์ง€ (POST โ†’ POST)
  • 308 Permanent Redirect: 301๊ณผ ์œ ์‚ฌํ•˜์ง€๋งŒ ๋ฉ”์„œ๋“œ ๋ณ€๊ฒฝ ๊ธˆ์ง€

4xx ํด๋ผ์ด์–ธํŠธ ์˜ค๋ฅ˜:

  • 400 Bad Request: ์ž˜๋ชป๋œ ์š”์ฒญ ๋ฌธ๋ฒ•
  • 401 Unauthorized: ์ธ์ฆ ํ•„์š” (WWW-Authenticate ํ—ค๋”)
  • 403 Forbidden: ์ธ์ฆ๋˜์—ˆ์ง€๋งŒ ๊ถŒํ•œ ์—†์Œ
  • 404 Not Found: ๋ฆฌ์†Œ์Šค ์กด์žฌํ•˜์ง€ ์•Š์Œ
  • 405 Method Not Allowed: ํ—ˆ์šฉ๋˜์ง€ ์•Š์€ ๋ฉ”์„œ๋“œ
  • 429 Too Many Requests: Rate Limit ์ดˆ๊ณผ (Retry-After ํ—ค๋”)

5xx ์„œ๋ฒ„ ์˜ค๋ฅ˜:

  • 500 Internal Server Error: ์„œ๋ฒ„ ๋‚ด๋ถ€ ์˜ค๋ฅ˜
  • 502 Bad Gateway: ๊ฒŒ์ดํŠธ์›จ์ด/ํ”„๋ก์‹œ ์˜ค๋ฅ˜
  • 503 Service Unavailable: ์„œ๋ฒ„ ๊ณผ๋ถ€ํ•˜ ๋˜๋Š” ์œ ์ง€๋ณด์ˆ˜ (Retry-After ํ—ค๋”)
  • 504 Gateway Timeout: ๊ฒŒ์ดํŠธ์›จ์ด/ํ”„๋ก์‹œ ํƒ€์ž„์•„์›ƒ

์บ์‹ฑ ์ „๋žต (Cache-Control):

Cache-Control: public, max-age=31536000, immutable
โ†’ ์ •์  ๋ฆฌ์†Œ์Šค (CSS, JS), 1๋…„ ์บ์‹œ, ๋ธŒ๋ผ์šฐ์ € ์žฌ๊ฒ€์ฆ ๋ถˆํ•„์š”

Cache-Control: private, max-age=3600
โ†’ ์‚ฌ์šฉ์ž๋ณ„ ๋ฐ์ดํ„ฐ, 1์‹œ๊ฐ„ ์บ์‹œ, CDN ์บ์‹œ ๋ถˆ๊ฐ€

Cache-Control: no-cache
โ†’ ์บ์‹œ ๊ฐ€๋Šฅํ•˜์ง€๋งŒ ์‚ฌ์šฉ ์ „ ์žฌ๊ฒ€์ฆ ํ•„์š” (ETag, Last-Modified)

Cache-Control: no-store
โ†’ ์บ์‹œ ๊ธˆ์ง€ (๋ฏผ๊ฐํ•œ ์ •๋ณด)

์กฐ๊ฑด๋ถ€ ์š”์ฒญ:

Request:
  If-None-Match: "33a64df551425fcc55e4d42a148795d9f25f89d4"
  If-Modified-Since: Wed, 21 Oct 2023 07:28:00 GMT

Response (์บ์‹œ ์œ ํšจ):
  304 Not Modified
  ETag: "33a64df551425fcc55e4d42a148795d9f25f89d4"
  (๋ณธ๋ฌธ ์—†์Œ, ๋Œ€์—ญํญ ์ ˆ์•ฝ)

๐Ÿ’ก ์šฉ์–ด ์„ค๋ช…:


์ฐธ๊ณ  ์ž๋ฃŒ

โš ๏ธ **GitHub.com Fallback** โš ๏ธ