JiwonDev

HTTP #5 ์š”์ฒญ ๋ฉ”์„œ๋“œ

by JiwonDev

# HTTP URI๋ฅผ ์ด์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›์•„์™€๋ณด์ž

๋‹จ์ˆœํ•˜๊ฒŒ ์ƒ๊ฐํ•˜๋ฉด ์•„๋ž˜์™€ ๊ฐ™์ด ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค. ์ด๊ฒƒ์ด ๊ณผ์—ฐ ์ข‹์€ URI ์„ค๊ณ„์ผ๊นŒ?

 

 

# Resource์˜ ์˜๋ฏธ๋ฅผ ๋‹ด์•„์•ผํ•œ๋‹ค.

URI๋Š” ๋ฆฌ์†Œ์Šค๋ฅผ ๋Œ€ํ‘œํ•˜๋Š” ์‹๋ณ„์ž (Uniform Resource Identifier)์ด๋‹ค.

  • ์šฐ๋ฆฌ๊ฐ€ ํ•„์š”ํ•œ ๊ฑด Member๋ผ๋Š” ๋ฆฌ์†Œ์Šค์ด๋‹ค.
  • ์œ„์™€ ๊ฐ™์ด ์„ค๊ณ„ํ•˜๋ฉด update, read, delete์— ๋”ฐ๋ผ ๊ฐ™์€ ๋ฆฌ์†Œ์Šค๋ฅผ ์กฐํšŒํ•˜๋Š”๋ฐ ๋‹ค๋ฅธ URI๋ฅผ ์‚ฌ์šฉํ•ด์•ผํ•œ๋‹ค.
  • ์ด๋Š” ์‚ฌ์šฉํ•˜๋Š”๋ฐ์—๋„, API ์„œ๋ฒ„๋ฅผ ๊ฐœ๋ฐœํ•˜๋Š”๋ฐ์—๋„ ์„ค๊ณ„ํ•˜๊ธฐ ์–ด๋ ค์›Œ์ง„๋‹ค.

 

ํ•˜์ง€๋งŒ ๋ชจ๋“  ์š”์ฒญ์„ [/member] ๋ผ๊ณ ๋งŒ ์ „๋‹ฌํ•˜๊ฒŒ ๋œ๋‹ค๋ฉด, ์–ด๋–ป๊ฒŒ ์˜๋ฏธ๋ฅผ ๊ตฌ๋ถ„ํ•ด์„œ ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ์„๊นŒ?

โžก HTTP ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์ž. ๋ฆฌ์†Œ์Šค์™€ ํ–‰์œ„๋ฅผ ๋ถ„๋ฆฌํ•˜์ž. 

 


# HTTP ๋ฉ”์„œ๋“œ์˜ ์ข…๋ฅ˜

์šฐ๋ฆฌ๋Š” ์•ž์˜ ๊ธ€์—์„œ HTTP ์š”์ฒญ ๋ฉ”์‹œ์ง€์˜ ์‹œ์ž‘๋ผ์ธ์— ๋ฉ”์„œ๋“œ์˜ ์ข…๋ฅ˜๋ฅผ ํ•จ๊ป˜ ๋ณด๋‚ธ๋‹ค๊ณ  ๋ฐฐ์› ๋‹ค.

HTTP ์ŠคํŽ™์—์„œ ์ œ๊ณตํ•˜๋Š” ๋ฉ”์„œ๋“œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

CORS(ํฌ๋กœ์Šค ์˜ค๋ฆฌ์ง„ ๋ฆฌ์†Œ์Šค ์‰์–ด๋ง)์€ ๋ณด์•ˆ์„ ์œ„ํ•ด ํ˜„์žฌ URI ์ถœ์ฒ˜:[Protocal, Host, Port]๊ฐ€ ๋‹ค๋ฅธ ์š”์ฒญ์„ ๋ง‰์•„์ฃผ๋Š” ๋ธŒ๋ผ์šฐ์ €์˜ ๊ธฐ๋Šฅ์ด๋‹ค.

 


# GET๊ณผ POST์˜ ์ฐจ์ด

๊ธฐ์–ตํ•˜์ž. GET์€ ๋ฆฌ์†Œ์Šค ์š”์ฒญ์„, POST๋Š” ๋ฆฌ์†Œ์Šค ์ฒ˜๋ฆฌ๋ฅผ ์˜๋ฏธํ•œ๋‹ค.

โžก [POST == ๋‹จ์ˆœํžˆ ๋“ฑ๋ก, ๊ฐฑ์‹ ์„ ์œ„ํ•œ ๊ธฐ๋Šฅ]์ด ์•„๋‹ˆ๋‹ค! ๋” ๋„“์€ ์˜๋ฏธ๋กœ ์‚ฌ์šฉ๋œ๋‹ค.

  • @GET - HTTP Header(=URI)์— ํ•„์š”ํ•œ ํŒŒ๋ผ๋ฏธํ„ฐ, ์š”์ฒญ ๋ฐ์ดํ„ฐ๋ฅผ ์ ์–ด์„œ ๋ณด๋‚ด๋Š” ๋ฐฉ์‹์ด๋‹ค.

  • @POST - ์š”์ฒญ ๋ฐ์ดํ„ฐ๋ฅผ Body์— ๋„ฃ์–ด ๋ณด๋‚ด๋Š” ๋ฐฉ์‹์ด๋‹ค. ์š”์ฒญ ๋ฐ์ดํ„ฐ๋ฅผ ์ˆจ๊ธธ ์ˆ˜ ์žˆ๋‹ค. 

 

 

@ POST๊ฐ€ ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•œ๋‹ค๋Š”๊ฒŒ ๋ฌด์Šจ๋ง์ด์ฃ ?

  • ์ƒˆ๋กœ์šด ๋ฆฌ์†Œ์Šค ์ƒ์„ฑ, ๋“ฑ๋ก
  • ์ปจํŠธ๋กค URI, ์š”์ฒญ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ (๊ฒฐ์ œ -> ๋ฐฐ๋‹ฌ์‹œ์ž‘ -> ๋ฐฐ๋‹ฌ์™„๋ฃŒ) ์ฒ˜๋Ÿผ ์„œ๋น„์Šค์˜ ํ”„๋กœ์„ธ์Šค์˜ ์ƒํƒœ๊ฐ€ ๋ณ€๊ฒฝ๋˜๋Š” ๊ฒฝ์šฐ
  • ๋‹ค๋ฅธ ๋ฉ”์„œ๋“œ๋กœ ๋Œ€์ฒดํ•˜๊ธฐ ์• ๋งคํ•œ ๊ฒฝ์šฐ :: POST ์‚ฌ์šฉ
    โžก ex1) JSON์œผ๋กœ ์š”์ฒญ ๋ฐ์ดํ„ฐ๋ฅผ ๋„˜๊ฒจ์•ผํ•˜๋Š”๋ฐ, GET์œผ๋กœ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐ
    โžก ex2) PATCH๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋Š”๋ฐ ์„œ๋ฒ„์—์„œ ์ง€์›ํ•ด์ฃผ์ง€ ์•Š๋Š” ๊ฒฝ์šฐ

 


# PUT, PATCH, DELETE

  • @PUT ์€ ๋ฆฌ์†Œ์Šค๋ฅผ ํ†ต์œผ๋กœ ๋Œ€์ฒดํ•œ๋‹ค. ์ฆ‰ ์žˆ์œผ๋ฉด ๋Œ€์ฒดํ•˜๊ณ  ์—†์œผ๋ฉด ์ƒ์„ฑํ•œ๋‹ค.
    โžก ์ž๋ฐ”์˜ map.put(key,value)์™€ ๊ฐ™์€ ์˜๋ฏธ๋‹ค.

์ฆ‰ PUT์€ ๊ธฐ์กด ๋ฆฌ์†Œ์Šค๋ฅผ ์‚ญ์ œํ•˜๊ณ  ๋„ฃ๋Š”๊ฑฐ๋ผ, ๋ฆฌ์†Œ์Šค์˜ ์ผ๋ถ€๋งŒ ์ „๋‹ฌํ•˜๋ฉด ์•ˆ๋œ๋‹ค.

 

๊ทธ ์™ธ ๋ถ€๋ถ„์ ์œผ๋กœ ๋ณ€๊ฒฝํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด @PATCH๋ฅผ, ๋ฆฌ์†Œ์Šค๋ฅผ ์ œ๊ฑฐํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด @DELETE๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

 

@ POST์™€ PUT์˜ ์ฐจ์ด

PUT์€ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋ฆฌ์†Œ์Šค๋ฅผ ์‹๋ณ„ํ•œ๋‹ค. ํŠน์ • ๋ฆฌ์†Œ์Šค๋ฅผ ๋Œ€์ฒดํ•˜๋Š” ๋ฉ”์†Œ๋“œ์ด๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

POST๋Š” ์š”์ฒญ๋งŒ ํ–ˆ์„ ๋ฟ, ํŠน์ • ๋ฆฌ์†Œ์Šค๋ฅผ ์‹๋ณ„ํ•ด์„œ ์ง€์ •ํ•œ ๊ฒƒ์€ ์•„๋‹ˆ๋‹ค. (POST๋Š” ๋ฆฌ์†Œ์Šค ์œ„์น˜๋ฅผ ๋ชจ๋ฅธ๋‹ค.)

 


# HTTP ๋ฉ”์„œ๋“œ์˜ ์†์„ฑ Safe, Idempotent, Cacheable

๊ทธ๋ƒฅ POST๋กœ ๋ชจ๋“  ์š”์ฒญ์„ ๋‹ค ์ฒ˜๋ฆฌํ•ด๋„ ์ƒ๊ด€์—†์„ ๊ฒƒ ๊ฐ™์€๋ฐ, ์ด๋ ‡๊ฒŒ ๋‚˜๋ˆˆ๋ฐ์—๋Š” ์ด์œ ๊ฐ€ ์žˆ๋‹ค.

๊ฐ ๋ฉ”์„œ๋“œ๋ณ„๋กœ ํŠน์ง•์ด ๋‹ค๋ฅด๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

 

 

@ ๋ฉ”์„œ๋“œ์˜ ์•ˆ์ „ (Safe)

ํ˜ธ์ถœํ•ด๋„ ๋ฆฌ์†Œ์Šค๊ฐ€ ๋ณ€๊ฒฝ๋˜์ง€ ์•Š๋Š” ์•ˆ์ „์„ฑ์„ ์˜๋ฏธํ•œ๋‹ค.

GET์€ ์•ˆ์ „ํ•˜๋‹ค. ํ•˜์ง€๋งŒ ๋ณ€๊ฒฝ์ด ์ผ์–ด๋‚˜๋Š” POST, PUT, DELETE ๊ฐ™์€ ๋ฉ”์„œ๋“œ๋Š” ์•ˆ์ „ํ•˜์ง€ ์•Š๋‹ค.

โžก ๋‹ค๋งŒ GET๋„ ๋ฏธ์นœ๋“ฏ์ด ํ˜ธ์ถœํ•ด์„œ ์„œ๋ฒ„ ์žฅ์• ๋ฅผ ์ผ์œผํ‚ฌ ์ˆ˜ ์žˆ์ง€๋งŒ, ์—ฌ๊ธฐ์„œ ์•ˆ์ „์€ '๋ฆฌ์†Œ์Šค์˜ ์•ˆ์ „'์„ ์˜๋ฏธํ•œ๋‹ค.

 

 

@ ๋ฉ”์„œ๋“œ์˜ ๋ฉฑ๋“ฑ (Idempotent, ์—ฌ๋Ÿฌ๋ฒˆ ํ˜ธ์ถœํ•ด๋„ ๊ฒฐ๊ณผ๊ฐ€ ๊ฐ™์€๊ฐ€?)

๋ฉฑ๋“ฑ์ด๋ผ๋Š” ์–ด๋ ค์šด ๋ง์€ $ f(f(x)) = f(x) $ ๋ผ๋Š” ์ˆ˜ํ•™์ ์ธ ์šฉ์–ด์—์„œ ๋‚˜์™”๋‹ค.

์ฆ‰ GET, PUT, DELETE ์ฒ˜๋Ÿผ ํ•œ ์‚ฌ์šฉ์ž๊ฐ€ ๋ช‡ ๋ฒˆ์„ ํ˜ธ์ถœํ•˜๋”๋ผ๋„ ๊ฒฐ๊ณผ๊ฐ€ ๊ฐ™์€ ๋ฉ”์„œ๋“œ๋ฅผ ์˜๋ฏธํ•œ๋‹ค.

โžก ๋ฌผ๋ก  ์žฌ์š”์ฒญํ•˜๋Š” ์ค‘๊ฐ„์— ๋‹ค๋ฅธ ๊ณณ์—์„œ ๋ฆฌ์†Œ์Šค๊ฐ€ ๋ณ€๊ฒฝ๋˜์–ด ๋ฉฑ๋“ฑ์ด ๊นจ์งˆ ์ˆ˜ ์žˆ์ง€๋งŒ, ์ด๋Š” ์™ธ๋ถ€์š”์ธ์ด๋‹ˆ ์ œ์™ธํ•œ๋‹ค.

 

 

@ ๋ฉ”์„œ๋“œ์˜ ์บ์‹œ๊ฐ€๋Šฅ (Cacheable)

์‘๋‹ต ๊ฒฐ๊ณผ๋ฅผ ๋งค๋ฒˆ ์ƒˆ๋กœ ๋ฐ›์•„์˜ค์ง€ ์•Š๊ณ , ์ค‘๊ฐ„์—์„œ ์บ์‹œํ•ด์„œ ์žฌ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š”๊ฐ€?

โžก ๋ณดํ†ต GET๋งŒ ์บ์‹œ๊ธฐ๋Šฅ์„ ๋งŒ๋“ค์–ด ์‚ฌ์šฉํ•œ๋‹ค.

 

๋ธ”๋กœ๊ทธ์˜ ์ •๋ณด

JiwonDev

JiwonDev

ํ™œ๋™ํ•˜๊ธฐ