[JavaScript] HTTP(Hyper Textย Protocol)


1. HTTP(Hyper Textย Protocol)

HTML ๋ฌธ์„œ์™€ ๊ฐ™์€ ๋ฆฌ์†Œ์Šค๋“ค์„ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ๋„๋ก ํ•ด์ฃผ๋Š”ย ํ”„๋กœํ† ์ฝœ

[HTTP ๊ฐœ์š” - HTTPMDN](https://developer.mozilla.org/ko/docs/Web/HTTP/Overview)

(1): HTTP ๋ฉ”์‹œ์ง€

์š”์ฒญ(request) : ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์„œ๋ฒ„๋กœ ์ „๋‹ฌํ•ด์„œ ์„œ๋ฒ„์˜ ์•ก์…˜์ด ์ผ์–ด๋‚˜๊ฒŒ๋” ํ•˜๋Š” ๋ฉ”์‹œ์ง€

์‘๋‹ต(response) : ์š”์ฒญ์— ๋Œ€ํ•œ ์„œ๋ฒ„์˜ ๋‹ต๋ณ€


(2): HTTP ์š”์ฒญ

  1. HTTP ๋ฉ”์„œ๋“œ
  2. ์ฃผ๋กœย URL, ๋˜๋Š” ํ”„๋กœํ† ์ฝœ, ํฌํŠธ, ๋„๋ฉ”์ธ์˜ ์ ˆ๋Œ€ ๊ฒฝ๋กœ
  3. HTTP ๋ฒ„์ „

1) Header

  • General Header(๊ณตํ†ต ํ—ค๋”) : ๊ณตํ†ต ํ—ค๋”๋Š” ์š”์ฒญ ๋ฐ ์‘๋‹ต์˜ ๋ฉ”์‹œ์ง€ ๋ชจ๋‘์—์„œ ์‚ฌ์šฉ๋˜์ง€๋งŒย ์ปจํ…์ธ ์—๋Š” ์ ์šฉ๋˜์ง€ ์•Š๋Š” ํ—ค๋”
  • Request Header(์š”์ฒญ ํ—ค๋”) : HTTP ์š”์ฒญ์—์„œ ์‚ฌ์šฉ๋˜์ง€๋งŒ ๋ฉ”์‹œ์ง€์˜ ์ปจํ…์ธ ์™€ ๊ด€๋ จ์ด ์—†๋Š” HTTP ํ—ค๋”
  • Response Header(์‘๋‹ต ํ—ค๋”) : ์œ„์น˜ ๋˜๋Š” ์„œ๋ฒ„ ์ž์ฒด์— ๋Œ€ํ•œ ์ •๋ณด(์ด๋ฆ„, ๋ฒ„์ „)๊ณผ ๊ฐ™์ด ์‘๋‹ต์— ๋Œ€ํ•œ ๋ถ€๊ฐ€์ ์ธ ์ •๋ณด๋ฅผ ๊ฐ–๋Š” ํ—ค๋”
  • Entity Header(์—”ํ‹ฐํ‹ฐ ํ—ค๋”) : ์ปจํ…์ธ  ๊ธธ์ด๋‚˜ MIME ํƒ€์ž…๊ณผ ๊ฐ™์ด Entity Body์— ๋Œ€ํ•œ ์ž์„ธํ•œ ์ •๋ณด๋ฅผ ํฌํ•จํ•˜๋Š” ํ—ค๋”

(1) General Header ์ฃผ์š” ์†์„ฑ

  • Date : (day-name), (day) (month) (year) (hour):(minute):(econd) GMT
  • Connection : close, Keep-Alive โ‡’ close๋Š” ๋ฉ”์„ธ์ง€ ๊ตํ™˜ ํ›„ TCP ์—ฐ๊ฒฐ ์ข…๋ฃŒ , Keep-Alive๋Š” ๋ฉ”์„ธ์ง€ ๊ตํ™˜ ํ›„ TCP ์—ฐ๊ฒฐ ์œ ์ง€

(2) Request Header ์ฃผ์š” ์†์„ฑ

  • Host : ์š”์ฒญํ•˜๋Š” ์ž์˜ ํ˜ธ์ŠคํŠธ๋ช…, ํฌํŠธ ๋ฒˆํ˜ธ
  • User-Agent : ์š”์ฒญ์ž์˜ ์†Œํ”„ํŠธ์›จ์–ด ์ •๋ณด
  • Accept : ์›ํ•˜๋Š” ๋ฏธ๋””์–ด์˜ ํƒ€์ž… ๋ฐ ์šฐ์„ ์ˆœ์œ„

    Accept: application/json, text/plain, /

    • json > text > all type ์ˆœ์œผ๋กœ ๋ฐ›๋Š”๋‹ค.

    Accept-Language: en-US,en;q=0.5

    • ์–ธ์–ด๋Š” en์ด๋‹ค. q๋Š” ๊ฐ€์ค‘์น˜.

    Accept-Encoding: gzip, deflate, br

    • gzip, deflate, br(Brotli) ๋“ฑ๋“ฑ์˜ ์••์ถ• ํฌ๋งท์„ ๋ฐ›๋Š”๋‹ค
  • cookie : ์„œ๋ฒ„์— ์˜ํ•ด์„œ ์ด์ „์— ์ €์žฅ๋œ ์ฟ ํ‚ค๋ฅผ ํฌํ•จ์‹œํ‚ค๋Š” ์†์„ฑ
  • Referer : ํ˜„์žฌ ์š”์ฒญ์„ ๋ณด๋‚ธ ํŽ˜์ด์ง€์˜ ์ ˆ๋Œ€ ํ˜น์€ ๋ถ€๋ถ„ ์ฃผ์†Œ๋ฅผ ํฌํ•จ

(3) Response Header ์ฃผ์š” ์†์„ฑ

  • Server : ์„œ๋ฒ„ ์†Œํ”„ํŠธ์›จ์–ด์˜ ์ •๋ณด
  • content-encoding : ์‘๋‹ตํ•˜๋Š” ๋‚ด์šฉ์˜ ์ธ์ฝ”๋”ฉ ํฌ๋งท
  • content-type : ์‘๋‹ตํ•˜๋Š” ๋‚ด์šฉ์˜ ํƒ€์ž…๊ณผ ๋ฌธ์ž ํฌ๋งท
  • cache-control : ์บ์‹œ ๊ด€๋ฆฌ์— ๋Œ€ํ•œ ์ •๋ณด
  • date : ์‘๋‹ต ๋ฉ”์„ธ์ง€๊ฐ€ ์ƒ์„ฑ๋œ ์‹œ๊ฐ„
  • vary : ์บ์‹œ๋œ ์‘๋‹ต์„ ํ–ฅํ›„์˜ ์‘๋‹ต์— ์‚ฌ์šฉํ•  ๊ธฐ์ค€
  • Set-Cookie : ์„œ๋ฒ„์—์„œ ์‚ฌ์šฉ์ž์—๊ฒŒ ์„ธ์…˜ ์ฟ ํ‚ค ์ •๋ณด
  • Age : max-age๋‚ด์—์„œ ์บ์‹œ๊ฐ€ ์–ผ๋งˆ๋‚˜ ์ง€๋‚ฌ๋Š”์ง€์˜ ์ดˆ ๋‹จ์œ„

(4) Entity header ์ฃผ์š” ์†์„ฑ

  • Content-Type : ๋ณธ๋ฌธ์˜ย ๋ฏธ๋””์–ด ํƒ€์ž…์„ ๋‚˜ํƒ€๋‚ด๊ธฐ์œ„ํ•ด ์‚ฌ์šฉ
  • Content-Encoding : ๋ฏธ๋””์–ด ํƒ€์ž…์„ ์••์ถ•ํ•˜๊ธฐ ์œ„ํ•ด์„œ ์‚ฌ์šฉ
  • Content-Length : ๋ณธ๋ฌธ์˜ ๊ธธ์ด
  • Content-Language : ๋ณธ๋ฌธ์ด ๋Œ€์ƒ์œผ๋กœ ํ•˜๋Š” ์–ธ์–ด
  • Content-Location : ์ปจํ…์ธ ์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š” ์œ„์น˜
  • Allow : ๋ฆฌ์†Œ์Šค๊ฐ€ ์ง€์›ํ•˜๋Š” ๋ฉ”์†Œ๋“œ์˜ ์ง‘ํ•ฉ

2) HTTP Method ์ข…๋ฅ˜

(1) ์ฃผ์š” ๋ฉ”์†Œ๋“œ

  • GET :ย ๋ฆฌ์†Œ์Šค ์กฐํšŒ
  • POST:ย ย ์š”์ฒญ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ, ์ฃผ๋กœ ๋“ฑ๋ก์— ์‚ฌ์šฉ
  • PUT :ย ๋ฆฌ์†Œ์Šค๋ฅผ ๋Œ€์ฒด(๋ฎ์–ด์“ฐ๊ธฐ), ํ•ด๋‹น ๋ฆฌ์†Œ์Šค๊ฐ€ ์—†์œผ๋ฉด ์ƒ์„ฑ
  • PATCH :ย ๋ฆฌ์†Œ์Šค ๋ถ€๋ถ„ ๋ณ€๊ฒฝ (PUT์ด ์ „์ฒด ๋ณ€๊ฒฝ, PATCH๋Š” ์ผ๋ถ€ ๋ณ€๊ฒฝ)
  • DELETE :ย ๋ฆฌ์†Œ์Šค ์‚ญ์ œ

(2) ๊ธฐํƒ€ ๋ฉ”์†Œ๋“œ

  • HEAD :ย GET๊ณผ ๋™์ผํ•˜์ง€๋งŒ ๋ฉ”์‹œ์ง€ ๋ถ€๋ถ„(body ๋ถ€๋ถ„)์„ ์ œ์™ธํ•˜๊ณ , ์ƒํƒœ ์ค„๊ณผ ํ—ค๋”๋งŒ ๋ฐ˜ํ™˜
  • OPTIONS :ย ๋Œ€์ƒ ๋ฆฌ์†Œ์Šค์— ๋Œ€ํ•œ ํ†ต์‹  ๊ฐ€๋Šฅ ์˜ต์…˜(๋ฉ”์„œ๋“œ)์„ ์„ค๋ช…(์ฃผ๋กœ CORS์—์„œ ์‚ฌ์šฉ)
  • CONNECT :ย ๋Œ€์ƒ ์ž์›์œผ๋กœ ์‹๋ณ„๋˜๋Š” ์„œ๋ฒ„์— ๋Œ€ํ•œ ํ„ฐ๋„์„ ์„ค์ •
  • TRACE :ย ๋Œ€์ƒ ๋ฆฌ์†Œ์Šค์— ๋Œ€ํ•œ ๊ฒฝ๋กœ๋ฅผ ๋”ฐ๋ผ ๋ฉ”์‹œ์ง€ ๋ฃจํ”„๋ฐฑ ํ…Œ์ŠคํŠธ๋ฅผ ์ˆ˜ํ–‰

GET METHOD ํ™œ์šฉ

์˜ˆ) GET/members/100?username=inpa&height=200

์กฐํšŒํ•  ๋•Œ POST๋„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์ง€๋งŒ,ย GET ๋ฉ”์„œ๋“œ๋Š” ์บ์‹ฑ์ด ๊ฐ€๋Šฅํ•˜๊ธฐ์—ย GET์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์œ ๋ฆฌํ•˜๋‹ค.

์ •์  ๋ฐ์ดํ„ฐ ์กฐํšŒ

  • ์ด๋ฏธ์ง€, ์ •์  ํ…์ŠคํŠธ ๋ฌธ์„œ GET
  • ์ฟผ๋ฆฌ ํŒŒ๋ผ๋ฏธํ„ฐ ์—†์ด ๋ฆฌ์†Œ์Šค ๊ฒฝ๋กœ๋กœ ๋‹จ์ˆœํ•˜๊ฒŒ ์กฐํšŒ ๊ฐ€๋Šฅ

์„œ๋ฒ„์— ์ „๋‹ฌํ•˜๊ณ  ์‹ถ์€ ๋ฐ์ดํ„ฐ๋Š” ์ฟผ๋ฆฌ์ŠคํŠธ๋ง๋ฅผ ํ†ตํ•ด์„œ ์ „๋‹ฌ

  1. ํด๋ผ์ด์–ธํŠธ์—์„œย /members/100ย ์œผ๋กœ 100๋ฒˆ ๋ฉค๋ฒ„๋ฅผ ์กฐํšŒํ•ด์„œ ์ •๋ณด๋ฅผ ๋‹ฌ๋ผ๊ณ  GET ์š”์ฒญ
  2. ์„œ๋ฒ„์—์„œ๋Š” ์š”์ฒญ ๋ฉ”์„ธ์ง€๋ฅผ ๋ถ„์„ํ•ด ๋‚ด๋ถ€์˜ ์œ ์ €์ •๋ณด๋ฅผ ์กฐํšŒํ•œ ๋’ค ๊ฒฐ๊ณผ Response๋ฅผ ๋งŒ๋“ ๋‹ค.
  3. ์„œ๋ฒ„์—์„œ ํด๋ผ์ด์–ดํŠธ๋กœ ์‘๋‹ต์„ ํ•ด์ค€๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ํด๋ผ์ด์–ธํŠธ์—์„œ ์ •์ƒ์ ์œผ๋กœ ๋ฐ›์œผ๋ฉด 200 OK status๋ฅผ ๊ฐ€์ง€๋ฉฐ, ํšŒ์›์ •๋ณด๋ฅผ ์–ป๊ฒŒ ๋œ๋‹ค.

๋™์  ๋ฐ์ดํ„ฐ ์กฐํšŒ

  • ์ฃผ๋กœ ๊ฒ€์ƒ‰, ๊ฒŒ์‹œํŒ ๋ชฉ๋ก์—์„œ ๊ฒ€์ƒ‰์–ด๋กœ ์ด์šฉ
  • ์ฟผ๋ฆฌ ํŒŒ๋ผ๋ฏธํ„ฐ ์‚ฌ์šฉํ•ด์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ „๋‹ฌ
  • ์ฟผ๋ฆฌ ํŒŒ๋ผ๋ฏธํ„ฐ๋Š”ย key1=value1&key2=value2ย ๊ตฌ์กฐ๋กœ ๋˜์–ด ์žˆ์Œ
  1. ์š”์ฒญ URL ๋’ค์—ย ?q=hello&hl=koย ์ฟผ๋ฆฌ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ์ค˜์„œ ์ƒ์„ธํ•œ ์กฐํšŒ ๋ฐ์ดํ„ฐ๋ฅผ ์–ป๋Š”๋‹ค

POST METHOD ํ™œ์šฉ

  • ์ „๋‹ฌํ•œ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ/์ƒ์„ฑ ์š”์ฒญ ๋ฉ”์„œ๋“œ (Create)
  • ๋ฉ”์‹œ์ง€ ๋ฐ”๋””(body)๋ฅผ ํ†ตํ•ด ์„œ๋ฒ„๋กœ ์š”์ฒญ ๋ฐ์ดํ„ฐ ์ „๋‹ฌํ•˜๋ฉด ์„œ๋ฒ„๋Š” ์š”์ฒญ ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•˜์—ฌ ์—…๋ฐ์ดํŠธ
  • ์ „๋‹ฌ๋œ ๋ฐ์ดํ„ฐ๋กœ ์ฃผ๋กœ ์‹ ๊ทœ ๋ฆฌ์†Œ์Šค ๋“ฑ๋ก, ํ”„๋กœ์„ธ์Šค ์ฒ˜๋ฆฌ์— ์‚ฌ์šฉ
  • ๋งŒ์ผ ๋ฐ์ดํ„ฐ๋ฅผ GET ํ•˜๋Š”๋ฐ ์žˆ์–ด, JSON์œผ๋กœ ์กฐํšŒ ๋ฐ์ดํ„ฐ๋ฅผ ๋„˜๊ฒจ์•ผ ํ•˜๋Š” ์• ๋งคํ•œ ๊ฒฝ์šฐ POST๋ฅผ ์‚ฌ์šฉ
  1. ํด๋ผ์ด์–ธํŠธ๋Š” body์— ๋“ฑ๋กํ•  ํšŒ์› ์ •๋ณด๋ฅผ JSON ํ˜•ํƒœ๋กœ ๋งŒ๋“ค์–ด ๋‹ด๊ณ  ์„œ๋ฒ„๋กœ ์ „์†กํ•œ๋‹ค.
  2. ์„œ๋ฒ„์—์„œ๋Š” ๋ฐ›์€ ๋ฉ”์„ธ์ง€๋ฅผ ๋ถ„์„ํ•ด ๋กœ์ง ๋Œ€๋กœ ์ฒ˜๋ฆฌ ํ•œ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ๋“ฑ๋กํ•˜๊ณ  ์‹ ๊ทœ ์•„์ด๋””๋ฅผ ์ƒ์„ฑ
  3. ์‹ ๊ทœํšŒ์›์— ๋Œ€ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ”๋””์— ๋‹ด์•„์„œ ํด๋ผ์ด์–ธํŠธ๋กœ ์‘๋‹ต

PUT METHOD ํ™œ์šฉ

  • ๋งŒ์ผ ์š”์ฒญ ๋ฉ”์„ธ์ง€์— ๋ฆฌ์†Œ์Šค๊ฐ€ ์žˆ์œผ๋ฉด ๋ฎ์–ด์“ฐ๊ณ , ์—†์œผ๋ฉด ์ƒˆ๋กœ ์ƒ์„ฑ
  • ๋ฐ์ดํ„ฐ๋ฅผ ๋Œ€์ฒดํ•ด์•ผ ํ•˜๋‹ˆ, ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋ฆฌ์†Œ์Šค์˜ ๊ตฌ์ฒด์ ์ธ ์ „์ฒด ๊ฒฝ๋กœ๋ฅผ ์ง€์ •ํ•ด ๋ณด๋‚ด์ฃผ์–ด์•ผ ํ•œ๋‹ค.

PUT ์š”์ฒญ์—ย ๋ฆฌ์†Œ์Šค๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ

  1. 100๋ฒˆ ์œ ์ €์˜ ๋ฆฌ์†Œ์Šค๋ฅผ ๊ต์ฒดํ•˜๊ฒ ๋‹ค๋Š” ์š”์ฒญ์„ ๋ณด๋‚ธ๋‹ค.
  2. ๊ธฐ์กด์—ย ๋ฐ์ดํ„ฐ๊ฐ€ย ์žˆ์—ˆ๋‹ค๋ฉดย ์™„์ „ํžˆย ๋Œ€์ฒด
  3. ์„œ๋ฒ„์—์„œ ํด๋ผ์ด์–ดํŠธ๋กœ ์‘๋‹ต์„ ํ•ด์ค€๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ํด๋ผ์ด์–ธํŠธ์—์„œ ์ •์ƒ์ ์œผ๋กœ ๋ฐ›์œผ๋ฉด 200 OK status๋ฅผ ๊ฐ€์ง€๋ฉฐ, ํšŒ์›์ •๋ณด๋ฅผ ์–ป๊ฒŒ ๋œ๋‹ค.

PUT ์š”์ฒญ์— ๋ฆฌ์†Œ์Šค๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ

  1. 100๋ฒˆ ์œ ์ €์˜ ๋ฆฌ์†Œ์Šค๋ฅผ ๊ต์ฒดํ•˜๊ฒ ๋‹ค๋Š” ์š”์ฒญ์„ ๋ณด๋‚ธ๋‹ค.
  2. ๊ธฐ์กด์— ๋ฐ์ดํ„ฐ๊ฐ€ ์—†๋‹ค๋ฉด POST ์™€ ๊ฐ™์ด ์‹ ๊ทœ๋กœ ์ƒ์„ฑ

PUT ์š”์ฒญ์— ์ผ๋ถ€ ๋ฆฌ์†Œ์Šค๋งŒ ๋ณ€๊ฒฝํ•˜๊ธธ ์›ํ•  ๊ฒฝ์šฐ

  1. age๋งŒ 50์œผ๋กœ ๋ณ€๊ฒฝํ•˜๋ ค๊ณ  ํ•ด๋‹น ๋ฐ์ดํ„ฐ๋ฅผ PUT์œผ๋กœ ์ „๋‹ฌํ•œ๋‹ค.
  2. ํ•˜์ง€๋งŒ ๊ธฐ์กด ๋ฐ์ดํ„ฐ๊ฐ€ย ์™„์ „ํžˆ ๋Œ€์ฒด๋˜์–ด ์ด๋ฆ„ ๋ฐ์ดํ„ฐ๊ฐ€ ์‚ญ์ œ๋œ๋‹ค. (์ด๋•Œ๋Š” PATCH ๋ฉ”์†Œ๋“œ๋ฅผ ์ด์šฉํ•ด์•ผ ํ•œ๋‹ค)

PATCH METHOD ํ™œ์šฉ

  • ๋งŒ์ผ PATCH๋ฅผ ์ง€์›ํ•˜์ง€ ์•Š๋Š” ์„œ๋ฒ„์—์„œ๋Š” ๋Œ€์‹ ์— POST๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
  1. age๋งŒ 50์œผ๋กœ ๋ณ€๊ฒฝํ•˜๋ ค๊ณ  ํ•ด๋‹น ๋ฐ์ดํ„ฐ๋ฅผ PATCH๋กœ ์ „๋‹ฌํ•œ๋‹ค.
  2. PUT๊ณผ๋Š”ย ๋‹ค๋ฅด๊ฒŒย ํšŒ์›ย ์ •๋ณด์—์„œย age๋งŒย ๋ณ€๊ฒฝ๋œ๋‹ค.

DELETE METHOD ํ™œ์šฉ

  • ์ƒํƒœ์ฝ”๋“œ๋Š” ๋Œ€๋ถ€๋ถ„ 200์„ ์‚ฌ์šฉํ•˜๊ณ  ์ƒํ™ฉ์— ๋”ฐ๋ผ 204๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

PUT ์š”์ฒญ์—ย ๋ฆฌ์†Œ์Šค๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ

  1. 100๋ฒˆ์งธ ๋ฉค๋ฒ„๋ฅผ ์ œ๊ฑฐํ•˜๊ธฐ ์œ„ํ•ด DELETE๋กœ ์ „๋‹ฌ
  2. ์„œ๋ฒ„์—์„œ ์š”์ฒญ์„ ๋ฐ›๊ณ  ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ํ•ด๋‹น ๋ฆฌ์†Œ์Šค๋ฅผ ์ œ๊ฑฐ
  3. ์„œ๋ฒ„์—์„œ ํด๋ผ์ด์–ดํŠธ๋กœ ์‘๋‹ต์„ ํ•ด์ค€๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ํด๋ผ์ด์–ธํŠธ์—์„œ ์ •์ƒ์ ์œผ๋กœ ๋ฐ›์œผ๋ฉด 200 OK status๋ฅผ ๊ฐ€์ง€๋ฉฐ, ํšŒ์›์ •๋ณด๋ฅผ ์–ป๊ฒŒ ๋œ๋‹ค.

PUT ์š”์ฒญ์— ๋ฆฌ์†Œ์Šค๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ

  1. 100๋ฒˆ ์œ ์ €์˜ ๋ฆฌ์†Œ์Šค๋ฅผ ๊ต์ฒดํ•˜๊ฒ ๋‹ค๋Š” ์š”์ฒญ์„ ๋ณด๋‚ธ๋‹ค.
  2. ๊ธฐ์กด์— ๋ฐ์ดํ„ฐ๊ฐ€ ์—†๋‹ค๋ฉด POST ์™€ ๊ฐ™์ด ์‹ ๊ทœ๋กœ ์ƒ์„ฑ

PUT ์š”์ฒญ์— ์ผ๋ถ€ ๋ฆฌ์†Œ์Šค๋งŒ ๋ณ€๊ฒฝํ•˜๊ธธ ์›ํ•  ๊ฒฝ์šฐ

  1. age๋งŒ 50์œผ๋กœ ๋ณ€๊ฒฝํ•˜๋ ค๊ณ  ํ•ด๋‹น ๋ฐ์ดํ„ฐ๋ฅผ PUT์œผ๋กœ ์ „๋‹ฌํ•œ๋‹ค.
  2. ํ•˜์ง€๋งŒ ๊ธฐ์กด ๋ฐ์ดํ„ฐ๊ฐ€ย ์™„์ „ํžˆ ๋Œ€์ฒด๋˜์–ด ์ด๋ฆ„ ๋ฐ์ดํ„ฐ๊ฐ€ ์‚ญ์ œ๋œ๋‹ค. (์ด๋•Œ๋Š” PATCH ๋ฉ”์†Œ๋“œ๋ฅผ ์ด์šฉํ•ด์•ผ ํ•œ๋‹ค)

3) HTTP ์ƒํƒœย ์ฝ”๋“œ

(1) : 1xx : informational response(์กฐ๊ฑด๋ถ€ ์‘๋‹ต)

  • 100 Continue(๊ณ„์†) : ์ง€๊ธˆ๊นŒ์ง€์˜ ์ƒํƒœ๊ฐ€ ๊ดœ์ฐฎ์œผ๋ฉฐ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๊ณ„์†ํ•ด์„œ ์š”์ฒญ์„ ํ•˜๊ฑฐ๋‚˜ ์ด๋ฏธ ์š”์ฒญ์„ ์™„๋ฃŒํ•œ ๊ฒฝ์šฐ์—๋Š” ๋ฌด์‹œํ•ด๋„ ๋˜๋Š” ๊ฒƒ
  • 101 Switching Protocol(ํ”„๋กœํ† ์ฝœ ์ „ํ™˜) : ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋ณด๋‚ธ Upgrade ์š”์ฒญ ํ—ค๋”์— ๋Œ€ํ•œ ์‘๋‹ต์— ๋“ค์–ด๊ฐ€๋ฉฐ ์„œ๋ฒ„์—์„œ ํ”„๋กœํ† ์ฝœ์„ ๋ณ€๊ฒฝํ•  ๊ฒƒ
  • 102 Processingย (์ฒ˜๋ฆฌ, WebDAV) : ์„œ๋ฒ„๊ฐ€ ์š”์ฒญ์„ ์ˆ˜์‹ ํ•˜์˜€์œผ๋ฉฐ ์ด๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ณ  ์žˆ์ง€๋งŒ, ์•„์ง ์ œ๋Œ€๋กœ ๋œ ์‘๋‹ต์„ ์•Œ๋ ค์ค„ ์ˆ˜ ์—†์Œ
  • 103 Early Hints (์‚ฌ์ „ ๋„์›€) : ์ฃผ๋กœ Link ํ—ค๋”์™€ ํ•จ๊ป˜ ์‚ฌ์šฉ๋˜์–ด ์„œ๋ฒ„๊ฐ€ ์‘๋‹ต์„ ์ค€๋น„ํ•˜๋Š” ๋™์•ˆ ์‚ฌ์šฉ์ž ์—์ด์ „ํŠธ๊ฐ€(user agent) ์‚ฌ์ „ ๋กœ๋”ฉ(preloading)์„ ์‹œ์ž‘ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•จ

(2) : 2xx Success(์„ฑ๊ณต)

  • 201 Created(์ž‘์„ฑ๋จ) : ์š”์ฒญ์ด ์„ฑ๊ณต์ ์ด์—ˆ์œผ๋ฉฐ ๊ทธ ๊ฒฐ๊ณผ๋กœ ์ƒˆ๋กœ์šด ๋ฆฌ์†Œ์Šค๊ฐ€ ์ƒ์„ฑ๋๋‹ค. ์ด ์‘๋‹ต์€ ์ผ๋ฐ˜์ ์œผ๋กœ POST ์š”์ฒญ ๋˜๋Š” ์ผ๋ถ€ PUT ์š”์ฒญ ์ดํ›„์— ๋”ฐ๋ผ์˜ด.
  • 202 Accepted(ํ—ˆ์šฉ๋จ) : ์š”์ฒญ์„ ์ˆ˜์‹ ํ•˜์˜€์ง€๋งŒ ๊ทธ์— ์‘ํ•˜์—ฌ ํ–‰๋™ํ•  ์ˆ˜ ์—†๋‹ค. ์ด ์‘๋‹ต์€ ์š”์ฒญ ์ฒ˜๋ฆฌ์— ๋Œ€ํ•œ ๊ฒฐ๊ณผ๋ฅผ ์ดํ›„์— HTTP๋กœ ๋น„๋™๊ธฐ ์‘๋‹ต์„ ๋ณด๋‚ด๋Š” ๊ฒƒ์— ๋Œ€ํ•ด์„œ ๋ช…ํ™•ํ•˜๊ฒŒ ๋ช…์‹œํ•˜์ง€ ์•Š์Œ
  • 203 Non-Authoritative Information(์‹ ๋ขฐํ•  ์ˆ˜ ์—†๋Š” ์ •๋ณด) : ๋ฉ”ํƒ€ ์ •๋ณด ์„ธํŠธ๊ฐ€ ์˜ค๋ฆฌ์ง„ ์„œ๋ฒ„์˜ ๊ฒƒ๊ณผ ์ผ์น˜ํ•˜์ง€ ์•Š์ง€๋งŒ ๋กœ์ปฌ์ด๋‚˜ ์„œ๋“œ ํŒŒํ‹ฐ ๋ณต์‚ฌ๋ณธ์—์„œ ๋ชจ์•„์กŒ์Œ์„ ์˜๋ฏธํ•œ๋‹ค. ์ด๋Ÿฌํ•œ ์กฐ๊ฑด์—์„œ๋Š” ์ด ์‘๋‹ต์ด ์•„๋‹ˆ๋ผ 200 OK ์‘๋‹ต์„ ๋ฐ˜๋“œ์‹œ ์šฐ์„ ๋œ๋‹ค.
  • 204 No Content(๋‚ด์šฉ ์—†์Œ) : ์š”์ฒญ์— ๋Œ€ํ•ด์„œ ๋ณด๋‚ด์ค„ ์ˆ˜ ์žˆ๋Š” ์ฝ˜ํ…์ธ ๊ฐ€ ์—†์ง€๋งŒ, ํ—ค๋”๋Š” ์˜๋ฏธ์žˆ์„ ์ˆ˜ ์žˆ๋‹ค. ์‚ฌ์šฉ์ž-์—์ด์ „ํŠธ๋Š” ๋ฆฌ์†Œ์Šค๊ฐ€ ์บ์‹œ ๋œ ํ—ค๋”๋ฅผ ์ƒˆ๋กœ์šด ๊ฒƒ์œผ๋กœ ์—…๋ฐ์ดํŠธํ•  ์ˆ˜ ์žˆ๋‹ค.

(3) : 3xx Redirection(๋ฆฌ๋‹ค์ด๋ ‰์…˜, ๊ฒฝ๋กœ ์žฌ์ง€์ •)

  • 301 Moved Permanently(์˜๊ตฌ์  ์ด๋™) : ์š”์ฒญํ•œ ๋ฆฌ์†Œ์Šค์˜ URI๊ฐ€ ๋ณ€๊ฒฝ๋˜์—ˆ์Œ์„ ์˜๋ฏธ
  • 304 Not Modified(๋ณ€๊ฒฝ ์—†์Œ) : ์บ์‹œ๋ฅผ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉ๋œ๋‹ค. ์ด๊ฒƒ์€ ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ์‘๋‹ต์ด ์ˆ˜์ •๋˜์ง€ ์•Š์•˜์Œ์„ ์•Œ๋ ค์ฃผ๋ฉฐ, ๊ทธ๋Ÿฌ๋ฏ€๋กœ ํด๋ผ์ด์–ธํŠธ๋Š” ๊ณ„์†ํ•ด์„œ ์‘๋‹ต์˜ ์บ์‹œ ๋œ ๋ฒ„์ „์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

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

  • 400 Bad Request(์ž˜๋ชป๋œ ์š”์ฒญ) : ์ž˜๋ชป๋œ ๋ฌธ๋ฒ•์œผ๋กœ ์ธํ•˜์—ฌ ์„œ๋ฒ„๊ฐ€ ์š”์ฒญ์„ ์ดํ•ดํ•  ์ˆ˜ ์—†์Œ
  • 401 Unauthorized(๊ถŒํ•œ ์—†์Œ) : HTTP ํ‘œ์ค€์—์„œ๋Š” โ€œ๋ฏธ์Šน์ธ(unauthorized)โ€๋ฅผ ๋ช…ํ™•ํžˆ ํ•˜๊ณ  ์žˆ์ง€๋งŒ, ์˜๋ฏธ์ƒ ์ด ์‘๋‹ต์€ โ€œ๋น„์ธ์ฆ(unauthenticated)โ€์„ ์˜๋ฏธ
  • 403 Forbidden(์ ‘๊ทผ ๊ธˆ์ง€) : ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์ฝ˜ํ…์ธ ์— ์ ‘๊ทผํ•  ๊ถŒ๋ฆฌ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์ง€ ์•Š์Œ.(401๊ณผ ๋‹ค๋ฅธ ์ ์€ ์„œ๋ฒ„๊ฐ€ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋ˆ„๊ตฌ์ธ์ง€ ์•Œ๊ณ  ์žˆ์Œ)
  • 404 Not Found(์ฐพ์„ ์ˆ˜ ์—†์Œ) : ์„œ๋ฒ„๊ฐ€ ์š”์ฒญ๋ฐ›์€ ๋ฆฌ์†Œ์Šค๋ฅผ ์ฐพ์„ ์ˆ˜ ์—†๋‹ค. ๋ธŒ๋ผ์šฐ์ €์—์„œ๋Š” ์•Œ๋ ค์ง€์ง€ ์•Š์€ URL์„ ์˜๋ฏธ
  • 405 Method Not Allowed(ํ—ˆ์šฉ๋˜์ง€ ์•Š์€ ๋ฉ”์„œ๋“œ) : ์š”์ฒญ์— ์ง€์ •๋œ ๋ฉ”์„œ๋“œ๊ฐ€ URI๋กœ ํ‘œ์‹œ๋œ ๋ฆฌ์†Œ์Šค์— ํ—ˆ์šฉ๋˜์ง€ ์•Š์Œ
  • 408 Request Timeout(์š”์ฒญ ์‹œ๊ฐ„ ์ดˆ๊ณผ) : ์‘๋‹ต์€ ์š”์ฒญ์„ ํ•œ์ง€ ์‹œ๊ฐ„์ด ์˜ค๋ž˜๋œ ์—ฐ๊ฒฐ์— ์ผ๋ถ€ ์„œ๋ฒ„๊ฐ€ ์ „์†กํ•˜๋ฉฐ, ์–ด๋–จ ๋•Œ์—๋Š” ์ด์ „์— ํด๋ผ์ด์–ธํŠธ๋กœ๋ถ€ํ„ฐ ์–ด๋– ํ•œ ์š”์ฒญ์ด ์—†์—ˆ๋‹ค๊ณ  ํ•˜๋”๋ผ๋„ ๋ณด๋‚ด์ง€๊ธฐ๋„ ํ•จ

(5) : 5xx Server Error(์„œ๋ฒ„ ์˜ค๋ฅ˜)

  • 500(๋‚ด๋ถ€ ์„œ๋ฒ„ ์˜ค๋ฅ˜) : ์„œ๋ฒ„์— ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜์—ฌ ์š”์ฒญ์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์—†์Œ.
  • 501(๊ตฌํ˜„๋˜์ง€ ์•Š์Œ) : ์„œ๋ฒ„์— ์š”์ฒญ์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ์ด ์—†์Œ.
  • 502 (Bad Gateway, ๋ถˆ๋Ÿ‰ ๊ฒŒ์ดํŠธ์›จ์ด) : ์„œ๋ฒ„๊ฐ€ ๊ฒŒ์ดํŠธ์›จ์ด๋‚˜ ํ”„๋ก์‹œ ์—ญํ• ์„ ํ•˜๊ณ  ์žˆ๊ฑฐ๋‚˜ ๋˜๋Š” ์—…์ŠคํŠธ๋ฆผ ์„œ๋ฒ„์—์„œ ์ž˜๋ชป๋œ ์‘๋‹ต์„ ๋ฐ›์Œ.
  • 503(์„œ๋น„์Šค๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Œ) : ์„œ๋ฒ„๊ฐ€ ์˜ค๋ฒ„๋กœ๋“œ๋˜์—ˆ๊ฑฐ๋‚˜ ์œ ์ง€๊ด€๋ฆฌ๋ฅผ ์œ„ํ•ด ๋‹ค์šด๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ํ˜„์žฌ ์„œ๋ฒ„๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Œ.
  • 504(๊ฒŒ์ดํŠธ์›จ์ด ์‹œ๊ฐ„์ดˆ๊ณผ) : ์„œ๋ฒ„๊ฐ€ ๊ฒŒ์ดํŠธ์›จ์ด๋‚˜ ํ”„๋ก์‹œ ์—ญํ• ์„ ํ•˜๊ณ  ์žˆ๊ฑฐ๋‚˜ ๋˜๋Š” ์—…์ŠคํŠธ๋ฆผ ์„œ๋ฒ„์—์„œ ์ œ๋•Œ ์š”์ฒญ์„ ๋ฐ›์ง€ ๋ชปํ•จ.

4) CORS(๊ต์ฐจ ์ถœ์ฒ˜ ๋ฆฌ์†Œ์Šค ๊ณต์œ )

๊ต์ฐจ ์ถœ์ฒ˜ ๋ฆฌ์†Œ์Šค ๊ณต์œ (Cross-Origin Resource Sharing,ย CORS)๋Š” ์ถ”๊ฐ€ย HTTPํ—ค๋”๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ, ํ•œย ์ถœ์ฒ˜์—์„œ ์‹คํ–‰ ์ค‘์ธ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ๋‹ค๋ฅธ ์ถœ์ฒ˜์˜ ์„ ํƒํ•œ ์ž์›์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š” ๊ถŒํ•œ์„ ๋ถ€์—ฌํ•˜๋„๋ก ๋ธŒ๋ผ์šฐ์ €์— ์•Œ๋ ค์ฃผ๋Š” ์ฒด์ œ

[๊ต์ฐจ ์ถœ์ฒ˜ ๋ฆฌ์†Œ์Šค ๊ณต์œ  (CORS) - HTTPMDN](https://developer.mozilla.org/ko/docs/Web/HTTP/CORS)

(1) ๋™์ผ ์ถœ์ฒ˜ ์ •์ฑ… (Same-Origin Policy) : ๋™์ผํ•œ ์ถœ์ฒ˜์— ๋Œ€ํ•œ ์ •์ฑ…

์ถœ์ฒ˜(Origin)์˜ ๋™์ผํ•จ์€ ๋‘ URL์˜ ๊ตฌ์„ฑ ์š”์†Œ ์ค‘ย Protocol(Scheme), Host, Port ์ด 3๊ฐ€์ง€๋งŒ ๋™์ผ ํ•˜๋‹ค๋ฉด ๋™์ผ ์ถœ์ฒ˜๋กœ ํŒ๋‹จ

์ถœ์ฒ˜๋ฅผ ๋น„๊ตํ•˜๋Š” ๋กœ์ง์€ ์„œ๋ฒ„์— ๊ตฌํ˜„๋œ ์ŠคํŽ™์ด ์•„๋‹Œย ๋ธŒ๋ผ์šฐ์ €์— ๊ตฌํ˜„๋œ ์ŠคํŽ™์ž„

๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์ •์ฑ…์œผ๋กœ ์ฐจ๋‹จ์„ ํ•œ๋‹ค๋Š” ๋ง์€, ๋ธŒ๋ผ์šฐ์ €๋ฅผ ํ†ตํ•˜์ง€ ์•Š๊ณ  ์„œ๋ฒ„ ๊ฐ„์— ํ†ต์‹ ์„ ํ• ๋•Œ๋Š” ์ •์ฑ…์ด ์ ์šฉ๋˜์ง€ ์•Š๋Š”๋‹ค๋Š” ๋ง๊ณผ ๊ฐ™์Œ.

์ฆ‰, ํด๋ผ์ด์–ธํŠธ ๋‹จ ์ฝ”๋“œ์—์„œ API ์š”์ฒญ์„ ํ•˜๋Š”๊ฒŒ ์•„๋‹ˆ๋ผ, ์„œ๋ฒ„ ๋‹จ ์ฝ”๋“œ์—์„œ ๋‹ค๋ฅธ ์ถœ์ฒ˜์˜ ์„œ๋ฒ„๋กœ API ์š”์ฒญ์„ ํ•˜๋ฉด CORS ์—๋Ÿฌ๋กœ๋ถ€ํ„ฐ ์ž์œ ๋กœ์›Œ์ง.

๊ทธ๋ž˜์„œ ์ด๋ฅผ ์ด์šฉํ•œ ํ”„๋ก์‹œ(Proxy) ์„œ๋ฒ„๋ผ๋Š” ๊ฒƒ์ด ์žˆ์Œ.

(2) ๊ต์ฐจ ์ถœ์ฒ˜ ๋ฆฌ์†Œ์Šค ๊ณต์œ  (Cross-Origin Resource Sharing, CORS) : ๋‹ค๋ฅธ ์ถœ์ฒ˜์˜ ๋ฆฌ์†Œ์Šค ๊ณต์œ ์— ๋Œ€ํ•œ ํ—ˆ์šฉ/๋น„ํ—ˆ์šฉ ์ •์ฑ…

๋ธŒ๋ผ์šฐ์ €์˜ CORS ๊ธฐ๋ณธ ๋™์ž‘

  1. ํด๋ผ์ด์–ธํŠธ์—์„œ HTTP์š”์ฒญ์˜ ํ—ค๋”์— Origin์„ ๋‹ด์•„ ์ „๋‹ฌ
  2. ์„œ๋ฒ„๋Š” ์‘๋‹ตํ—ค๋”์— Access-Control-Allow-Origin์„ ๋‹ด์•„ ํด๋ผ์ด์–ธํŠธ๋กœ ์ „๋‹ฌ
  3. ํด๋ผ์ด์–ธํŠธ์—์„œ Origin๊ณผ ์„œ๋ฒ„๊ฐ€ ๋ณด๋‚ด์ค€ Access-Control-Allow-Origin์„ ๋น„๊ตํ•œ๋‹ค.

CORS ํ•ด๊ฒฐ์ฑ…์€ ์„œ๋ฒ„์˜ ํ—ˆ์šฉ์ด ํ•„์š” โ‡’ ์„œ๋ฒ„์—์„œย Access-Control-Allow-Origin ย ํ—ค๋”์— ํ—ˆ์šฉํ•  ์ถœ์ฒ˜๋ฅผ ๊ธฐ์žฌํ•ด์„œ ํด๋ผ์ด์–ธํŠธ์— ์‘๋‹ตํ•˜๋ฉด ๋Œ