HTTP ๊ฐœ์š”


  • ๊ฑฐ์˜ ๋ชจ๋“  ํ˜•ํƒœ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ „์†กํ•  ์ˆ˜ ์žˆ๋‹ค.
  • TCP ๊ธฐ๋ฐ˜์˜ HTTP/1.1 ์ด ์ฃผ๋กœ ์“ฐ์ธ๋‹ค.

๋น„ ์—ฐ๊ฒฐ์„ฑ (Connectionless)

  • HTTP ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ์—ฐ๊ฒฐ์„ ์œ ์ง€ํ•˜์ง€ ์•Š๋Š” ๋ชจ๋ธ์ด๋‹ค.
    • ์š”์ฒญ โ†’ ์‘๋‹ต โ†’ ๋ฐ”๋กœ ์—ฐ๊ฒฐ ๋Š์Œ
    • ์„œ๋ฒ„ ์ž์›์„ ๋งค์šฐ ํšจ์œจ์ ์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

ํ•œ๊ณ„์™€ ๊ทน๋ณต

  • TCP/IP ์—ฐ๊ฒฐ์„ ๋งค๋ฒˆ ์ƒˆ๋กœ ๋งบ์–ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— 3 way handshake ์‹œ๊ฐ„์ด ์ถ”๊ฐ€์ ์œผ๋กœ ๋ฐœ์ƒํ•œ๋‹ค.
  • ์ง€๊ธˆ์€ HTTP Persistent Connections ๋กœ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•œ๋‹ค.

HTTP ์™€ HTTPS ์˜ ์ฐจ์ด

  • HTTPS ๋Š” HTTP ์— ๋ณด์•ˆ ๊ณ„์ธต์„ ์ถ”๊ฐ€ํ•œ ๊ฒƒ์ด๋‹ค.
  • HTTPS ๋Š” ์ œ 3์ž ์ธ์ฆ, ๊ณต๊ฐœํ‚ค ์•”ํ˜ธํ™”, ๋น„๋ฐ€ํ‚ค ์•”ํ˜ธํ™”๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

SSL handshake

  • ํด๋ผ์ด์–ธํŠธ๋Š” TCP 3 way handshake ๋ฅผ ์ˆ˜ํ–‰ํ•œ ํ›„ Client Hello ๋ฅผ ์ „์†กํ•œ๋‹ค.
  • ์„œ๋ฒ„๋Š” ์ธ์ฆ์„œ๋ฅผ ๋ณด๋‚ธ๋‹ค.
  • ํด๋ผ์ด์–ธํŠธ๋Š” ๋ฐ›์€ ์ธ์ฆ์„œ๋ฅผ ์‹ ๋ขฐํ•˜๊ธฐ ์œ„ํ•ด์„œ ๋“ฑ๋ก๋œ ์ธ์ฆ๊ธฐ๊ด€์ธ์ง€ ํ™•์ธํ•œ๋‹ค.
  • ์ด ์ธ์ฆ์„œ๋Š” ์ธ์ฆ๊ธฐ๊ด€์˜ ๊ฐœ์ธํ‚ค๋กœ ์•”ํ˜ธํ™” ๋˜์–ด์žˆ๊ณ  ๊ณต๊ฐœํ‚ค๋กœ ๊ฒ€์ฆํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ํด๋ผ์ด์–ธํŠธ๋Š” ์‚ฌ์ดํŠธ์˜ ์ •๋ณด์™€ ์„œ๋ฒ„์˜ ๊ณต๊ฐœํ‚ค๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ๋‹ค.
  • ์„œ๋ฒ„์˜ ๊ณต๊ฐœํ‚ค๋กœ ํ†ต์‹ ์— ์‚ฌ์šฉํ•  ๋น„๋ฐ€ํ‚ค๋ฅผ ์•”ํ˜ธํ™”ํ•ด์„œ ์„œ๋ฒ„์— ๋ณด๋‚ธ๋‹ค.
  • ์„œ๋ฒ„๋Š” ์ด๋ฅผ ๊ฐœ์ธํ‚ค๋กœ ํ™•์ธํ•˜๊ณ  ์ดํ›„ ํ†ต์‹ ์€ ๊ณต์œ ๋œ ๋น„๋ฐ€ํ‚ค๋กœ ์•”ํ˜ธํšŒ๋˜์–ด ํ†ต์‹ ํ•œ๋‹ค.

HTTP/1.0, HTTP/1.1, HTTP/2.0

  • HTTP/1.0
    • keep-alive
  • HTTP/1.1
    • persistent connection
    • pipeline
  • HTTP/2.0

HTTP ๋ฉ”์‹œ์ง€


HTTP ๋ฉ”์‹œ์ง€ ๊ตฌ์กฐ

start-line
header
empty-line (CRLF)
message-body

HTTP ๋ฉ”์‹œ์ง€ ์˜ˆ์‹œ

# HTTP Request ์˜ˆ์‹œ
GET /search?q=hello&hl=ko HTTP/1.1
Host: www.google.com

# HTTP Response ์˜ˆ์‹œ
HTTP/1.1 200 OK
Content-Type: text/html;charset=UTF-8
Content-Length: 3423

<html>
  <body>...</body>
</html>
  • start-line
    • request-line (์š”์ฒญ ๋ฉ”์‹œ์ง€)
      • method request-target HTTP-version ์ˆœ์œผ๋กœ ๊ตฌ์„ฑ
      • e.g. GET /search?q=hello&hl=ko HTTP/1.1
    • status-line (์‘๋‹ต ๋ฉ”์‹œ์ง€)
      • HTTP-version status-code reason-phrase ์ˆœ์œผ๋กœ ๊ตฌ์„ฑ
      • e.g. HTTP/1.1 200 OK
  • header
    • ์š”์ฒญ ๋ฉ”์‹œ์ง€
    • ์‘๋‹ต ๋ฉ”์‹œ์ง€
      • e.g. Content-Type: text/html;charset=UTF-8
  • message-body
    • ์‹ค์ œ ์ „์†กํ•  ๋ฐ์ดํ„ฐ

HTTP ๋ฉ”์„œ๋“œ


GET

  • ๋ฆฌ์†Œ์Šค ์กฐํšŒ์— ์ฃผ๋กœ ์‚ฌ์šฉ๋œ๋‹ค.
  • ์ผ๋ฐ˜์ ์œผ๋กœ Request Body ๋ฅผ ์ž…๋ ฅํ•˜์ง€ ์•Š์œผ๋ฉฐ ๋ ˆ๊ฑฐ์‹œ ์‹œ์Šคํ…œ์˜ ๊ฒฝ์šฐ ์š”์ฒญ์„ ๋ฐ›์•„๋“ค์ด์ง€ ์•Š์„ ์ˆ˜ ์žˆ๋‹ค.
  • ์„œ๋ฒ„์— ์ „๋‹ฌํ•˜๊ณ ์ž ํ•˜๋Š” ๋ฐ์ดํ„ฐ๋Š” query string ์„ ํ†ตํ•ด ์ „๋‹ฌํ•œ๋‹ค.
  • ์บ์‹ฑ์„ ์ˆ˜ํ–‰ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์บ์‹ฑ๋˜์ง€ ์•Š๋Š” ์š”์ฒญ์€ GET ์š”์ฒญ์ด ๋งž์ง€ ์•Š์„ ์ˆ˜ ์žˆ๋‹ค.

POST

  • ์š”์ฒญ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ์— ์ฃผ๋กœ ์‚ฌ์šฉ๋œ๋‹ค.
  • ๊ณผ๊ฑฐ HTTP ํ†ต์‹ ์€ POST ์š”์ฒญ์œผ๋กœ ๋ฐ์ดํ„ฐ ์ˆ˜์ •, ์‚ญ์ œ๋„ ๋ชจ๋‘ ์ˆ˜ํ–‰ํ–ˆ๋‹ค.
  • POST ์š”์ฒญ์€ ์ƒํƒœ๋ฅผ ๋ณ€ํ™”์‹œํ‚ค๊ธฐ ๋•Œ๋ฌธ์— ๋ฉฑ๋“ฑ์„ฑ์ด ๋ณด์žฅ๋˜์ง€ ์•Š๋Š”๋‹ค.
  • ๋ณดํ†ต Request Body ์— ์š”์ฒญ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ด์•„ ์ „์†กํ•˜๊ณ  ์„œ๋ฒ„๋Š” ํ•ด๋‹น ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•œ๋‹ค.

PUT

  • ๋ฆฌ์†Œ์Šค ๋ฎ์–ด์“ฐ๊ธฐ(์ˆ˜์ • or ์กด์žฌํ•˜์ง€ ์•Š์œผ๋ฉด ์ƒ์„ฑ)์— ์ฃผ๋กœ ์‚ฌ์šฉ๋œ๋‹ค.
  • ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋ฆฌ์†Œ์Šค์˜ ์œ„์น˜๋ฅผ ์•Œ๊ณ  ์žˆ์–ด์•ผ ํ•œ๋‹ค.
    • ๋ฆฌ์†Œ์Šค์˜ ์œ„์น˜๋ฅผ ์•ˆ๋‹ค๋Š” ์ ์—์„œ POST ์™€ ์ฐจ์ด๊ฐ€ ์žˆ๋‹ค.

PATCH

  • ์„œ๋ฒ„์— ์กด์žฌํ•˜๋Š” ๋ฐ์ดํ„ฐ์˜ ์ผ๋ถ€๋ฅผ ๋ณ€๊ฒฝํ•  ๋•Œ ์ฃผ๋กœ ์‚ฌ์šฉ๋œ๋‹ค.

DELETE

  • ๋ฆฌ์†Œ์Šค ์ œ๊ฑฐ์— ์ฃผ๋กœ ์‚ฌ์šฉ๋œ๋‹ค.

HTTP ๋ฉ”์„œ๋“œ์˜ ์†์„ฑ


์•ˆ์ „

  • ํ˜ธ์ถœํ•ด๋„ ๋ฆฌ์†Œ์Šค๋ฅผ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š๋Š”๋‹ค.
    • e.g. GET

๋ฉฑ๋“ฑ

  • ํ•œ ๋ฒˆ์ด๋˜ 100๋ฒˆ์ด๋˜ ํ˜ธ์ถœํ•œ ๊ฒฐ๊ณผ๊ฐ€ ํ•ญ์ƒ ๊ฐ™๋‹ค.
    • e.g GET, PUT, DELETE

์บ์‹œ๊ฐ€๋Šฅ

  • ์‘๋‹ต ๊ฒฐ๊ณผ ๋ฆฌ์†Œ์Šค๋ฅผ ์บ์‹œํ•ด์„œ ์‚ฌ์šฉํ•ด๋„ ๋˜๋Š”๊ฐ€?
    • e.g. ์‹ค๋ฌด์—์„œ๋Š” ๊ฑฐ์˜ GET ๋งŒ ์‚ฌ์šฉํ•œ๋‹ค.

HTTP Request ๋กœ ํด๋ผ์ด์–ธํŠธ์—์„œ ์„œ๋ฒ„๋กœ ๋ฐ์ดํ„ฐ ์ „์†ก


๋ฐ์ดํ„ฐ ์ „๋‹ฌ ๋ฐฉ์‹์€ ํฌ๊ฒŒ 2๊ฐ€์ง€

  1. GET - query parameter ๋ฅผ ํ†ตํ•œ ๋ฐ์ดํ„ฐ ์ „์†ก
  2. POST, PUT, PATCH - message body ๋ฅผ ํ†ตํ•œ ๋ฐ์ดํ„ฐ ์ „์†ก

4๊ฐ€์ง€ ๋ฐ์ดํ„ฐ ์ „์†ก ์ƒํ™ฉ

  • GET - ์ •์  ๋ฐ์ดํ„ฐ ์กฐํšŒ
    • ๋ฆฌ์†Œ์Šค ๊ฒฝ๋กœ๋กœ ๋‹จ์ˆœํ•˜๊ฒŒ ์กฐํšŒ ๊ฐ€๋Šฅ
  • GET - ๋™์  ๋ฐ์ดํ„ฐ ์กฐํšŒ
    • query parameter ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ ์ „๋‹ฌ
  • HTML Form ๋ฐ์ดํ„ฐ ์ „์†ก
    • Content-Type: application/x-www-form-urlencoded
    • GET - start-line ์— ํฌํ•จํ•˜์—ฌ ์กฐํšŒ

  • POST - message body ์— ํฌํ•จํ•˜์—ฌ ์ €์žฅ

  • HTTP API ๋ฐ์ดํ„ฐ ์ „์†ก
    • HTML Form ์ „์†ก ๋Œ€์‹  JS ๋ฅผ ํ†ตํ•œ ํ†ต์‹ ์— ์‚ฌ์šฉ
    • Content-Type: application/json
    • GET - query parameter ๋กœ ๋ฐ์ดํ„ฐ ์ „๋‹ฌ
    • POST, PUT, PATCH - message body ๋ฅผ ํ†ตํ•ด ๋ฐ์ดํ„ฐ ์ „์†ก

HTTP API ์„ค๊ณ„


HTTP API - ์ปฌ๋ ‰์…˜

  • POST ๊ธฐ๋ฐ˜ ๋“ฑ๋ก
  • ์„œ๋ฒ„๊ฐ€ ๋ฆฌ์†Œ์Šค URI ๊ฒฐ์ •ํ•œ๋‹ค.

HTTP API - ์Šคํ† ์–ด

  • PUT ๊ธฐ๋ฐ˜ ๋“ฑ๋ก
  • ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋ฆฌ์†Œ์Šค URI ๊ฒฐ์ •ํ•œ๋‹ค.
  • ์‹ค๋ฌด์—์„œ ๊ฑฐ์˜ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค.

HTML Form ์‚ฌ์šฉ

  • GET, POST ๋งŒ ์ง€์›

URI ์„ค๊ณ„ ๊ฐœ๋…


๋ฌธ์„œ (document)

  • ๋‹จ์ผ ๊ฐœ๋… (ํŒŒ์ผ ํ•˜๋‚˜, DB row)
    • e.g. /members/100 /files/star.jpg

์ปฌ๋ ‰์…˜ (collection)

  • ์„œ๋ฒ„๊ฐ€ ๋ฆฌ์†Œ์Šค์˜ URI ๋ฅผ ์ƒ์„ฑ ๋ฐ ๊ด€๋ฆฌ
    • e.g. /members

์Šคํ† ์–ด (store)

  • ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋ฆฌ์†Œ์Šค์˜ URI ๋ฅผ ์ƒ์„ฑ ๋ฐ ๊ด€๋ฆฌ
    • e.g. /files

์ปจํŠธ๋กค๋Ÿฌ (controller), ์ปจํŠธ๋กค URI

  • ์œ„ ์„ธ๊ฐ€์ง€๋กœ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์–ด๋ ค์šด ํ”„๋กœ์„ธ์Šค ์‹คํ–‰, ๋™์‚ฌ๋ฅผ ์ง์ ‘ ์‚ฌ์šฉ
    • e.g. /members/{id}/delete

HTTP ์ƒํƒœ ์ฝ”๋“œ


ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋ณด๋‚ธ ์š”์ฒญ์˜ ์ฒ˜๋ฆฌ ์ƒํƒœ๋ฅผ ์‘๋‹ต์—์„œ ์•Œ๋ ค์ฃผ๋Š” ๊ธฐ๋Šฅ

1xx (Informational)

  • ์š”์ฒญ์ด ์ˆ˜์‹ ๋˜์–ด ์ฒ˜๋ฆฌ์ค‘
    • ๊ฑฐ์˜ ์‚ฌ์šฉํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ ์ƒ๋žต

2xx (Successful)

  • ํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ์„ ์ •์ƒ์ ์œผ๋กœ ์ฒ˜๋ฆฌ
  • 200 OK
    • ์š”์ฒญ ์„ฑ๊ณต
  • 201 Created
    • ์š”์ฒญ ์„ฑ๊ณตํ•ด์„œ ์ƒˆ๋กœ์šด ๋ฆฌ์†Œ์Šค๊ฐ€ ์ƒ์„ฑ๋จ
    • ์ƒ์„ฑ๋œ ๋ฆฌ์†Œ์Šค์˜ ์‘๋‹ต์€ Location ํ—ค๋” ํ•„๋“œ๋กœ ์‹๋ณ„ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • 202 Accepted
    • ์š”์ฒญ์ด ์ ‘์ˆ˜ ๋˜์—ˆ์œผ๋‚˜ ์ฒ˜๋ฆฌ๊ฐ€ ์™„๋ฃŒ๋˜์ง€ ์•Š์•˜์Œ
    • ๋ฐฐ์น˜ ์ฒ˜๋ฆฌ ๊ฐ™์€ ๊ณณ์—์„œ ์‚ฌ์šฉ
      • e.g. ์š”์ฒญ ์ ‘์ˆ˜ ํ›„ 1์‹œ๊ฐ„ ๋’ค์— ๋ฐฐ์น˜ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•จ
    • ์‚ฌ์‹ค ์ž˜ ์‚ฌ์šฉํ•˜์ง€ ์•Š์Œ
  • 204 No Content
    • ์„œ๋ฒ„๊ฐ€ ์š”์ฒญ์„ ์„ฑ๊ณต์ ์œผ๋กœ ์ˆ˜ํ–‰ํ–ˆ์ง€๋งŒ, ์‘๋‹ต ํŽ˜์ด๋กœ๋“œ ๋ณธ๋ฌธ์— ๋ณด๋‚ผ ๋ฐ์ดํ„ฐ๊ฐ€ ์—†์Œ
      • save ๋ฒ„ํŠผ์˜ ๊ฒฐ๊ณผ๋กœ ์•„๋ฌด ๋‚ด์šฉ์ด ์—†์–ด๋„ ๋œ๋‹ค.
      • save ๋ฒ„ํŠผ์„ ๋ˆŒ๋Ÿฌ๋„ ๊ฐ™์€ ํ™”๋ฉด์„ ์œ ์ง€ํ•ด์•ผ ํ•œ๋‹ค.
      • ๊ฒฐ๊ณผ ๋‚ด์šฉ์ด ์—†์–ด๋„ 204 ๋ฉ”์‹œ์ง€๋งŒ์œผ๋กœ ์„ฑ๊ณต์„ ์ธ์‹ํ•  ์ˆ˜ ์žˆ๋‹ค.
        • e.g. ์›น ๋ฌธ์„œ ํŽธ์ง‘๊ธฐ์—์„œ save ๋ฒ„ํŠผ

3xx (Redirection)

  • ์š”์ฒญ์„ ์™„๋ฃŒํ•˜๊ธฐ ์œ„ํ•ด ์œ ์ € ์—์ด์ „ํŠธ์˜ ์ถ”๊ฐ€ ์กฐ์น˜ ํ•„์š”
  • ์›น ๋ธŒ๋ผ์šฐ์ €๋Š” 3xx ์‘๋‹ต์˜ ๊ฒฐ๊ณผ์— Location ํ—ค๋”๊ฐ€ ์žˆ์œผ๋ฉด, Location ์œ„์น˜๋กœ ์ž๋™ ์ด๋™ (๋ฆฌ๋‹ค์ด๋ ‰ํŠธ)
  • ์˜๊ตฌ ๋ฆฌ๋‹ค์ด๋ ‰์…˜ - 301, 308
    • ๋ฆฌ์†Œ์Šค์˜ URI ๊ฐ€ ์˜๊ตฌ์ ์œผ๋กœ ์ด๋™
    • ์›๋ž˜ URL ์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š์Œ, ๊ฒ€์ƒ‰ ์—”์ง„ ๋“ฑ์—์„œ๋„ ๋ณ€๊ฒฝ ์ธ์ง€
      • e.g. /members โ†’ /users
      • e.g. /event โ†’ /new-event
  • ์ผ์‹œ ๋ฆฌ๋‹ค์ด๋ ‰์…˜ - 302, 303, 307
    • ๋ฆฌ์†Œ์Šค์˜ URI ๊ฐ€ ์ผ์‹œ์ ์œผ๋กœ ๋ณ€๊ฒฝ
    • ๋”ฐ๋ผ์„œ ๊ฒ€์ƒ‰ ์—”์ง„ ๋“ฑ์—์„œ URL ์„ ๋ณ€๊ฒฝํ•˜๋ฉด ์•ˆ๋จ
      • e.g. ์ฃผ๋ฌธ ์™„๋ฃŒ ํ›„ ์ฃผ๋ฌธ ๋‚ด์—ญ ํ™”๋ฉด์œผ๋กœ ์ด๋™
    • PRG: POST/Redirect/Get
  • ํŠน์ˆ˜ ๋ฆฌ๋‹ค์ด๋ ‰์…˜ - 300, 304
    • ๊ฒฐ๊ณผ ๋Œ€์‹  ์บ์‹œ๋ฅผ ์‚ฌ์šฉ
    • e.g. ์š”์ฒญ์œผ๋กœ ์บ์‹œ ์‚ฌ์šฉ ๊ฐ€๋Šฅ ์—ฌ๋ถ€ ์ „๋‹ฌ โ†’ ์บ์‹œ ์‚ฌ์šฉ ๊ฐ€๋Šฅ ์‹œ ์บ์‹œ ์‚ฌ์šฉํ•˜๋„๋ก ์‘๋‹ต
  • 301 Moved Permanently (์˜๊ตฌ ๋ฆฌ๋‹ค์ด๋ ‰์…˜)
    • ๋ฆฌ๋‹ค์ด๋ ‰ํŠธ ์‹œ ์š”์ฒญ ๋ฉ”์„œ๋“œ๊ฐ€ GET ์œผ๋กœ ๋ณ€ํ•˜๊ณ , ๋ณธ๋ฌธ์ด ์ œ๊ฑฐ๋  ์ˆ˜ ์žˆ์Œ
  • 308 Permanent Redirect (์˜๊ตฌ ๋ฆฌ๋‹ค์ด๋ ‰์…˜)
    • ๋ฆฌ๋‹ค์ด๋ ‰ํŠธ ์‹œ ์š”์ฒญ ๋ฉ”์„œ๋“œ์™€ ๋ณธ๋ฌธ์„ ์œ ์ง€
  • 302 Found (์ผ์‹œ ๋ฆฌ๋‹ค์ด๋ ‰์…˜)
    • ๋ฆฌ๋‹ค์ด๋ ‰ํŠธ ์‹œ ์š”์ฒญ ๋ฉ”์„œ๋“œ๊ฐ€ GET ์œผ๋กœ ๋ณ€ํ•˜๊ณ , ๋ณธ๋ฌธ์ด ์ œ๊ฑฐ๋  ์ˆ˜ ์žˆ์Œ
  • 303 See Other (์ผ์‹œ ๋ฆฌ๋‹ค์ด๋ ‰์…˜)
    • ๋ฆฌ๋‹ค์ด๋ ‰ํŠธ ์‹œ ์š”์ฒญ ๋ฉ”์„œ๋“œ๊ฐ€ GET ์œผ๋กœ ๋ณ€๊ฒฝ
  • 307 Temporary Redirect (์ผ์‹œ ๋ฆฌ๋‹ค์ด๋ ‰์…˜)
    • ๋ฆฌ๋‹ค์ด๋ ‰ํŠธ ์‹œ ์š”์ฒญ ๋ฉ”์„œ๋“œ์™€ ๋ณธ๋ฌธ์„ ์œ ์ง€
  • PRG: POST/Redirect/GET
    • ๋ฌธ์ œ: POST ๋กœ ์ฃผ๋ฌธ ํ›„ ์›น ๋ธŒ๋ผ์šฐ์ €๋ฅผ ์ƒˆ๋กœ๊ณ ์นจํ•˜๋ฉด?
      • ์ƒˆ๋กœ๊ณ ์นจ์€ ๋‹ค์‹œ ์š”์ฒญ์ด๊ธฐ ๋•Œ๋ฌธ์— ์ค‘๋ณต ์ฃผ๋ฌธ์ด ๋  ์ˆ˜ ์žˆ์Œ
    • ํ•ด๊ฒฐ: POST ๋กœ ์ฃผ๋ฌธ ํ›„ ์ฃผ๋ฌธ ๊ฒฐ๊ณผ ํ™”๋ฉด์„ GET ๋ฉ”์„œ๋“œ๋กœ ๋ฆฌ๋‹ค์ด๋ ‰ํŠธ
      • ์ƒˆ๋กœ๊ณ ์นจ ํ•ด๋„ GET ์œผ๋กœ ๊ฒฐ๊ณผ ํ™”๋ฉด๋งŒ ์กฐํšŒ
  • 304 Not Modified (ํŠน์ˆ˜ ๋ฆฌ๋‹ค์ด๋ ‰์…˜)
    • ์บ์‹œ๋ฅผ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉ
      • ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ๋ฆฌ์†Œ์Šค๊ฐ€ ์ˆ˜์ •๋˜์ง€ ์•Š์•˜์Œ์„ ์•Œ๋ ค์ค€๋‹ค.
      • ๋”ฐ๋ผ์„œ ํด๋ผ์ด์–ธํŠธ๋Š” ๋กœ์ปฌ์— ์ €์žฅ๋œ ์บ์‹œ๋ฅผ ์žฌ์‚ฌ์šฉํ•œ๋‹ค. (์บ์‹œ๋กœ ๋ฆฌ๋‹ค์ด๋ ‰ํŠธ)
      • 304 ์‘๋‹ต์€ ๋กœ์ปฌ ์บ์‹œ๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋ฏ€๋กœ ์‘๋‹ต์— ๋ฉ”์‹œ์ง€ ๋ฐ”๋””๋ฅผ ํฌํ•จํ•˜๋ฉด ์•ˆ๋œ๋‹ค.

4xx (Client Error)

  • ํด๋ผ์ด์–ธํŠธ ์˜ค๋ฅ˜, ์ž˜๋ชป๋œ ๋ฌธ๋ฒ•๋“ฑ์œผ๋กœ ์„œ๋ฒ„๊ฐ€ ์š”์ฒญ์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์—†์Œ
  • 400 Bad Request
    • ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์ž˜๋ชป๋œ ์š”์ฒญ์„ ํ•ด์„œ ์„œ๋ฒ„๊ฐ€ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์—†์Œ
    • ์š”์ฒญ ๊ตฌ๋ฌธ, ๋ฉ”์‹œ์ง€ ๋“ฑ๋“ฑ ์˜ค๋ฅ˜
    • ํด๋ผ์ด์–ธํŠธ๋Š” ์š”์ฒญ ๋‚ด์šฉ์„ ๊ฒ€ํ† ํ•˜๊ณ  ๋‹ค์‹œ ๋ณด๋‚ด์•ผ ํ•จ
      • e.g. ์š”์ฒญ ํŒŒ๋ผ๋ฏธํ„ฐ๊ฐ€ ์ž˜๋ชป๋˜๊ฑฐ๋‚˜, API ์ŠคํŽ™์ด ๋งž์ง€ ์•Š์„ ๋•Œ
  • 401 Unauthorized
    • ํด๋ผ์ด์–ธํŠธ๊ฐ€ ํ•ด๋‹น ๋ฆฌ์†Œ์Šค์— ๋Œ€ํ•œ ์ธ์ฆ์ด ํ•„์š”ํ•จ
    • ์ธ์ฆ๋˜์ง€ ์•Š์Œ
    • 401 ์˜ค๋ฅ˜ ๋ฐœ์ƒ ์‹œ ์‘๋‹ต์— WWW-Authenticate ํ—ค๋”์™€ ํ•จ๊ป˜ ์ธ์ฆ ๋ฐฉ๋ฒ•์„ ์„ค๋ช…
  • 403 Forbidden
    • ์„œ๋ฒ„๊ฐ€ ์š”์ฒญ์„ ์ดํ•ดํ–ˆ์ง€๋งŒ ์Šน์ธ์„ ๊ฑฐ๋ถ€ํ•จ
    • ์ฃผ๋กœ ์ธ์ฆ ์ž๊ฒฉ ์ฆ๋ช…์€ ์žˆ์ง€๋งŒ, ์ ‘๊ทผ ๊ถŒํ•œ์ด ๋ถˆ์ถฉ๋ถ„ํ•œ ๊ฒฝ์šฐ
      • e.g. ์–ด๋“œ๋ฏผ ๋“ฑ๊ธ‰์ด ์•„๋‹Œ ์‚ฌ์šฉ์ž๊ฐ€ ๋กœ๊ทธ์ธ์„ ํ–ˆ์ง€๋งŒ, ์–ด๋“œ๋ฏผ ๋“ฑ๊ธ‰์˜ ๋ฆฌ์†Œ์Šค์— ์ ‘๊ทผํ•˜๋Š” ๊ฒฝ์šฐ
  • 404 Not Found
    • ์š”์ฒญ ๋ฆฌ์†Œ์Šค๋ฅผ ์ฐพ์„ ์ˆ˜ ์—†์Œ
    • ์š”์ฒญ ๋ฆฌ์†Œ์Šค๊ฐ€ ์„œ๋ฒ„์— ์—†์Œ
    • ๋˜๋Š” ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๊ถŒํ•œ์ด ๋ถ€์กฑํ•œ ๋ฆฌ์†Œ์Šค์— ์ ‘๊ทผํ•  ๋•Œ ํ•ด๋‹น ๋ฆฌ์†Œ์Šค๋ฅผ ์ˆจ๊ธฐ๊ณ  ์‹ถ์„ ๋•Œ

5xx (Server Error)

  • ์„œ๋ฒ„ ์˜ค๋ฅ˜, ์„œ๋ฒ„๊ฐ€ ์ •์ƒ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜์ง€ ๋ชปํ•จ
  • ์„œ๋ฒ„์— ๋ฌธ์ œ๊ฐ€ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์žฌ์‹œ๋„ ํ•˜๋ฉด ์„ฑ๊ณตํ•  ์ˆ˜๋„ ์žˆ์Œ
  • 500 Internal Server Error
    • ์„œ๋ฒ„ ๋ฌธ์ œ๋กœ ์˜ค๋ฅ˜ ๋ฐœ์ƒ, ์• ๋งคํ•˜๋ฉด 500 ์˜ค๋ฅ˜
  • 503 Service Unavailable
    • ์„œ๋น„์Šค ์ด์šฉ ๋ถˆ๊ฐ€
    • ์„œ๋ฒ„๊ฐ€ ์ผ์‹œ์ ์ธ ๊ณผ๋ถ€ํ™” ๋˜๋Š” ์˜ˆ์ •๋œ ์ž‘์—…์œผ๋กœ ์ž ์‹œ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์—†์Œ
    • Retry-After ํ—ค๋” ํ•„๋“œ๋กœ ์–ผ๋งˆ๋’ค์— ๋ณต๊ตฌ๋˜๋Š”์ง€ ๋ณด๋‚ผ ์ˆ˜๋„ ์žˆ์Œ