๊ฐœ๋ฐœ ์ง€์‹/HTTP ์ง€์‹

๐ŸŒ HTTP์˜ ๋ฉฑ๋“ฑ์„ฑ · ์•ˆ์ •์„ฑ · ์บ์‹œ์„ฑ ๐Ÿ’ฏ ์™„๋ฒฝ ์ดํ•ดํ•˜๊ธฐ

์ธํŒŒ_ 2022. 12. 14. 08:28

http-safe-idempotent-cache

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

์ฃผ์š” HTTP Method์ธ GET / POST / PUT / PATCH / DELETE ๋Š” ๊ฐ ๋ฉ”์„œ๋“œ์˜ ๋™์ž‘ ๊ณผ์ • ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ, ๋ฉ”์„œ๋“œ์˜ ์†์„ฑ ๋˜ํ•œ ์•Œ ํ•„์š”๊ฐ€ ์žˆ๋‹ค. ์™œ๋ƒํ•˜๋ฉด ์–ด๋– ํ•œ HTTP ๋ฉ”์„œ๋“œ๋กœ ์„œ๋ฒ„์— ์š”์ฒญํ–ˆ๋Š๋ƒ์— ๋”ฐ๋ผ API ์„ค๊ณ„๋‚˜ ๋ณต๊ตฌ ๋ฉ”์ปค๋‹ˆ์ฆ˜ ์บ์‹œ ์ตœ์ ํ™” ๋“ฑ, ์„ค๊ณ„ ๋กœ์ง์ด ๋‹ฌ๋ผ์งˆ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

HTTP ๋ฉ”์„œ๋“œ์˜ ์†์„ฑ์œผ๋กœ๋Š” ํฌ๊ฒŒ 3 ๊ฐ€์ง€์ธ ์•ˆ์ „(Safe), ๋ฉฑ๋“ฑ(Idempotent), ์บ์‹œ ๊ฐ€๋Šฅ(Cacheable)์ด ์žˆ๋‹ค. ์ด๋“ค์„ ํ•˜๋‚˜์”ฉ ์‚ดํŽด๋ณด๋Š” ์‹œ๊ฐ„์„ ๊ฐ€์ ธ๋ณด์ž.

http-safe-idempotent-cache


์•ˆ์ „์„ฑ(Safe)

http-safe

HTTP ๋ฉ”์†Œ๋“œ์˜ ์•ˆ์ •์„ฑ์ด๋ž€ ๋ณด์•ˆ ์ทจ์•ฝ์„ฑ์„ ๋งํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ํ˜ธ์ถœํ•ด๋„ ๋ฆฌ์†Œ์Šค๊ฐ€ ๋ณ€๊ฒฝ๋˜์ง€ ์•Š๋Š” ์„ฑ์งˆ์„ ๋งํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

์ •๋ง ์‰ฝ๊ฒŒ ์ƒ๊ฐํ•ด์„œ GET ๋ฉ”์„œ๋“œ๋Š” ๋‹จ์ˆœํžˆ ๋ฐ์ดํ„ฐ๋ฅผ ์กฐํšŒํ•˜๋Š” ๊ธฐ๋Šฅ์„ ์ˆ˜ํ–‰ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฆฌ์†Œ์Šค๋ฅผ ๋ณ€๊ฒฝ ๋ฐ ์ˆ˜์ •ํ•˜์ง€ ์•Š์œผ๋‹ˆ ์•ˆ์ „ํ•œ HTTP ๋ฉ”์†Œ๋“œ์ด๋‹ค.

๋ฐ˜๋ฉด์— POST PUT PATCH DELETE ์™€ ๊ฐ™์€ ๋ฉ”์„œ๋“œ๋“ค์€ ํ˜ธ์ถœํ•  ๊ฒฝ์šฐ ๋ฐ์ดํ„ฐ์— ๋ณ€๊ฒฝ์ด ๋ฐœ์ƒํ•˜๊ฑฐ๋‚˜, ์„œ๋ฒ„์—์„œ ์‚ญ์ œ๋˜๊ธฐ ๋•Œ๋ฌธ์— ์•ˆ์ „ํ•˜์ง€ ์•Š์€ HTTP ๋ฉ”์„œ๋“œ๋ผ๊ณ  ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

 

๋ฌผ๋ก  ํŠธ๋ž˜ํ”ฝ์ด ๋ชฐ๋ ค ์ˆ˜๋งŽ์€ GET ์š”์ฒญ์— ์˜ํ•ด ์„œ๋ฒ„๊ฐ€ ํ„ฐ์ง€๊ฒŒ ๋˜๋ฉด '์•ˆ์ „์„ฑ' ์ด๋ผ๋Š” ํŠน์„ฑ์— ๋ถ€ํ•ฉ๋˜์ง€ ์•Š๋Š”๋‹ค๊ณ  ์ƒ๊ฐํ•  ์ง€๋„ ๋ชจ๋ฅด๊ฒ ์ง€๋งŒ, ์—ฌ๊ธฐ์„œ ๋งํ•˜๋Š” ์•ˆ์ •์„ฑ์€, ๋ฆฌ์†Œ์Šค๋ฅผ ์ˆ˜์ • / ์‚ญ์ œ ํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ ๋ฐ์ดํ„ฐ์˜ ์ผ๊ด€์„ฑ ์œ ์ง€์— ์žˆ์–ด ์•ˆ์ „ํ•˜๋‹ค๋Š” ์˜๋ฏธ์ด๋‹ค.

์ฆ‰, ๋ฉ”์„œ๋“œ๊ฐ€ ์ „์ฒด์ ์ธ ์‹œ์Šคํ…œ ์žฅ์• ๋กœ๋ถ€ํ„ฐ ์•ˆ์ „ํ•˜๋‹ค๋Š” ์˜๋ฏธ๋ฅผ ๊ฐ€์ง€์ง€๋Š” ์•Š๋Š”๋‹ค.


๋ฉฑ๋“ฑ์„ฑ(Idempotent)

http-idempotent

๋ฉฑ๋“ฑ(ๅ†ช็ญ‰)์ด๋ผ๋Š” ๋‹จ์–ด์˜ ๋œป์€ ์ˆ˜ํ•™์ด๋‚˜ ์ „์‚ฐํ•™์—์„œ ์—ฐ์‚ฐ์„ ์—ฌ๋Ÿฌ ๋ฒˆ ์ ์šฉํ•˜๋”๋ผ๋„ ๊ฒฐ๊ณผ๊ฐ€ ๋‹ฌ๋ผ์ง€์ง€ ์•Š๋Š” ์„ฑ์งˆ์„ ์˜๋ฏธํ•œ๋‹ค.

http-idempotent
๋„ค์ด๋ฒ„ ๊ตญ์–ด ์‚ฌ์ „

์œ„์˜ ์ •์˜๋ฅผ HTTP์˜ ๋ฉฑ๋“ฑ์„ฑ(Idempotent)์— ๋Œ€์ž…ํ•ด๋ณด์ž๋ฉด, ๋ฉฑ๋“ฑ์„ฑ์ด๋ž€ ์š”์ฒญ(Request)์„ ํ•œ ๋ฒˆ์„ ํ˜ธ์ถœํ•˜๋“  ์—ฌ๋Ÿฌ ๋ฒˆ์„ ํ˜ธ์ถœํ•˜๋“  ๊ทธ ๊ฒฐ๊ณผ๊ฐ€ ๊ฐ™์Œ์„ ์˜๋ฏธํ•œ๋‹ค. ์ฆ‰, ๋™์ผํ•œ ์š”์ฒญ์„ ํ•œ๋ฒˆ ๋ณด๋‚ด๋Š” ๊ฒƒ๊ณผ ์—ฌ๋Ÿฌ๋ฒˆ ์—ฐ์†์œผ๋กœ ๋ณด๋‚ด๋Š” ๊ฒƒ์ด ๊ฐ™์€ ํšจ๊ณผ๋ฅผ ๊ฐ€์ง€๊ณ , ์„œ๋ฒ„์˜ ์ƒํƒœ๋„ ๋™์ผํ•˜๊ฒŒ ๋‚จ์„ ๋•Œ ํ•ด๋‹น HTTP ๋ฉ”์„œ๋“œ๊ฐ€ ๋ฉฑ๋“ฑ์„ฑ์„ ๊ฐ€์ง„๋‹ค๊ณ  ๋งํ•œ๋‹ค.

๋ฉฑ๋“ฑ์˜ ๊ฐœ๋…์„ ์•ˆ์ „(safe)๊ณผ ํ˜ผ๋™ํ•˜๊ธฐ ์‰ฌ์šด๋ฐ,

  1. HTTP ๋ฉ”์†Œ๋“œ์˜ ์•ˆ์ „์ด ํ•œ ๋ฒˆ์„ ํ˜ธ์ถœํ•˜๋“  ์—ฌ๋Ÿฌ ๋ฒˆ์„ ํ˜ธ์ถœํ•˜๋“  ๋ฆฌ์†Œ์Šค์— ์ˆ˜์ •์ด ๋ฐœ์ƒํ•˜์ง€ ์•Š๋Š” ์†์„ฑ์ด๊ณ ,
  2. HTTP ๋ฉ”์†Œ๋“œ์˜ ๋ฉฑ๋“ฑ์€ ๋ฆฌ์†Œ์Šค์— ์ˆ˜์ •์ด ๋ฐœ์ƒํ•œ๋‹ค๊ณ  ํ•˜๋”๋ผ๋„ ๋ฉ”์„œ๋“œ๋ฅผ ์—ฌ๋Ÿฌ ๋ฒˆ ์‹คํ–‰ํ•œ ๊ฒฐ๊ณผ๊ฐ€ ํ•œ ๋ฒˆ ์‹คํ–‰ํ•œ ๊ฒฐ๊ณผ์™€ ๊ฐ™๋‹ค๋ฉด ๋งŒ์กฑํ•˜๋Š” ์†์„ฑ์ด๋ผ๋Š” ์ฐจ์ด์ ์ด ์žˆ๋‹ค.

๋˜ํ•œ ํ˜ธ์ถœ์„ ์‹คํ–‰ํ•œ ๊ฒฐ๊ณผ๊ฐ€ ์˜๋ฏธํ•˜๋Š” ๊ฒƒ์ด ์‘๋‹ต ์ƒํƒœ ์ฝ”๋“œ๊ฐ€ ์•„๋‹Œ ์„œ๋ฒ„์˜ ์ƒํƒœ๋ผ๋Š” ์ ๋„ ์œ ์˜ํ•ด์•ผ ํ•œ๋‹ค. ์˜ˆ๋ฅผ๋“ค์–ด ๋˜‘๊ฐ™์€ ์š”์ฒญ์„ ํ–ˆ์„ ๋•Œ ์‘๋‹ตํ•˜๋Š” ์ƒํƒœ์ฝ”๋“œ๊ฐ€ ๋‹ค๋ฅด๋”๋ผ๋„ ์„œ๋ฒ„์˜ ์ƒํƒœ๊ฐ€ ๊ฐ™์€ ์ƒํƒœ๋ผ๋ฉด ๋ฉฑ๋“ฑ์„ฑ์ด ์žˆ๋‹ค๊ณ  ํŒ๋‹จํ•˜๋Š” ๊ฒƒ์ด๋‹ค

HTTP ์ŠคํŽ™์— ๋ช…์‹œ๋œ ๊ฒƒ์— ์˜ํ•˜๋ฉด GET, PUT, DELETE๋Š” ๋ฉฑ๋“ฑ์„ฑ์„ ๊ฐ€์ง€๋„๋ก, POST์™€ PATCH๋Š” ๋ฉฑ๋“ฑ์„ฑ์„ ๊ฐ€์ง€์ง€ ์•Š๋„๋ก ๊ตฌํ˜„ํ•ด์•ผ ํ•œ๋‹ค. ๊ทธ ์ด์œ ์— ๋Œ€ํ•ด์„œ ํ•˜๋‚˜์”ฉ ์‚ดํŽด๋ณด์ž.


GET์˜ ๋ฉฑ๋“ฑ (O)

GET์€ ๋ฐ์ดํ„ฐ๋ฅผ ํ•œ ๋ฒˆ์„ ์กฐํšŒํ•˜๋“  ์—ฌ๋Ÿฌ ๋ฒˆ์„ ์กฐํšŒํ•˜๋“  ๊ฐ™์€ ๊ฒฐ๊ณผ๊ฐ€ ์กฐํšŒ๋˜๋ฏ€๋กœ ์•ˆ์ „๊ณผ ๋ฉฑ๋“ฑ์„ ๋™์‹œ์— ๋งŒ์กฑํ•˜๋Š” ๋ฉ”์„œ๋“œ์ด๋‹ค.

๋‹ค์Œ์€ GET ๋ฉ”์„œ๋“œ๋กœ ํ˜ธ์ถœ๋˜๋Š” API์— ๋Œ€ํ•œ ๊ฐ„๋žตํ•œ ์˜ˆ์‹œ์ด๋‹ค.

  1. GET /post/1 ์š”์ฒญ
  2. ์„œ๋ฒ„์—์„œ id๊ฐ’์ด 1์ธ ๊ฒŒ์‹œ๊ธ€์„ ์กฐํšŒ
  3. ํ•ด๋‹น ๊ฒŒ์‹œ๊ธ€ ๋ฐ์ดํ„ฐ๋ฅผ ์‘๋‹ต

์œ„์˜ ๊ฒฝ์šฐ ๊ฐ™์€ ์š”์ฒญ์„ ์—ฌ๋Ÿฌ๋ฒˆ ๋ณด๋‚ด๋”๋ผ๋„ ์„œ๋ฒ„์˜ ์ƒํƒœ๋Š” ํ•ญ์ƒ ๊ฐ™๊ฒŒ ๋œ๋‹ค.

์ด์ฒ˜๋Ÿผ GET ๋ฉ”์„œ๋“œ๊ฐ€ ๋ฉฑ๋“ฑ์„ฑ์„ ๊ฐ€์ ธ์•ผ ํ•  ์ด์œ ๋Š” ์ง๊ด€์ ์œผ๋กœ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

 

๋ฉฑ๋“ฑ ์ ์ด์ง€ ์•Š์€ GET์˜ ์„ค๊ณ„

ํ•˜์ง€๋งŒ ๋งŒ์•ฝ ๊ฐœ๋ฐœ์ž๊ฐ€ ์กฐํšŒ์ˆ˜ ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•˜๋ฉด์„œ, ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๊ฒŒ์‹œ๊ธ€์„ ์กฐํšŒํ•˜๋ฉด ๋™์‹œ์— ์กฐํšŒ์ˆ˜๋„ ์˜ฌ๋ฆฌ๋„๋ก ๊ตฌํ˜„ํ•˜๋ฉด ์–ด๋–ป๊ฒŒ ๋ ๊นŒ?

  1. GET /post/1 ์š”์ฒญ
  2. ์„œ๋ฒ„์—์„œ id๊ฐ’์ด 1์ธ ๊ฒŒ์‹œ๊ธ€์„ ์กฐํšŒ
  3. ํ•ด๋‹น ๊ฒŒ์‹œ๊ธ€์˜ ์กฐํšŒ์ˆ˜ ๋ฐ์ดํ„ฐ๋ฅผ 1 ์ฆ๊ฐ€
  4. ํ•ด๋‹น ๊ฒŒ์‹œ๊ธ€ ๋ฐ์ดํ„ฐ๋ฅผ ์‘๋‹ต

์ด ๊ฒฝ์šฐ, GET ์š”์ฒญ์„ ์—ฌ๋Ÿฌ๋ฒˆ ๋ณด๋‚ผ ๊ฒฝ์šฐ ์„œ๋ฒ„์˜ ๋ฐ์ดํ„ฐ ์ƒํƒœ๋Š” ๋งค๋ฒˆ ๋ฐ”๋€Œ๊ฒŒ ๋  ๊ฒƒ์ด๋‹ค.

์ฆ‰, ์œ„์˜ GET ์š”์ฒญ ๋กœ์ง์€ ๋ฉฑ๋“ฑ์„ฑ์„ ๊ฐ€์ง€์ง€ ์•Š๋Š” ๊ฒƒ์ด๋ฉฐ, ๊ฐœ๋ฐœ์ž๋Š” HTTP ์ŠคํŽ™์— ๋ถ€ํ•ฉํ•˜์ง€ ์•Š๊ฒŒ API๋ฅผ ๊ตฌํ˜„ํ–ˆ๋‹ค๊ณ  ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

๋”ฐ๋ผ์„œ GET์˜ ๋ฉฑ๋“ฑ์„ฑ์— ๋งž๊ฒŒ API๋ฅผ ์„ค๊ณ„ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š”, ์กฐํšŒ์ˆ˜ ์ปฌ๋Ÿผ์˜ ๊ฐ’์„ ์ฆ๊ฐ€์‹œํ‚ค๋Š” ์š”์ฒญ์„ PATCH ์š”์ฒญ์œผ๋กœ ๋”ฐ๋กœ ๋ถ„๋ฆฌํ•˜๋Š” ๊ฒƒ์ด ์˜ฌ๋ฐ”๋ฅด๋‹ค.

 

๋ฉฑ๋“ฑํ•˜๋‹ค๊ณ  ํ•ด์„œ ๊ฒฐ๊ณผ๊ฐ€ ํ•ญ์ƒ ๊ฐ™์€๊ฒƒ์€ ์•„๋‹˜

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

๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ƒํ™ฉ์„ ์ƒ๊ฐํ•ด๋ณด์ž.

  1. A ๊ฐ€ GET /members/100 ํ†ตํ•ด ๋ฆฌ์†Œ์Šค๋ฅผ ์กฐํšŒ
  2. B ๊ฐ€ PUT /members/100 ํ†ตํ•ด ๋ฆฌ์†Œ์Šค๋ฅผ ๋ณ€๊ฒฝ
  3. A ๊ฐ€ GET /members/100 ํ†ตํ•ด ๋ฆฌ์†Œ์Šค๋ฅผ ๋‹ค์‹œ ์กฐํšŒ

์œ„์˜ ์ƒํ™ฉ์€ A ๊ฐ€ 100๋ฒˆ์งธ ๋ฉค๋ฒ„์— ๋Œ€ํ•œ ๋ฆฌ์†Œ์Šค ์กฐํšŒ์— ๋Œ€ํ•ด ์žฌ์š”์ฒญ์„ ํ•˜๊ธฐ ์ง์ „, B ๊ฐ€ ํ•ด๋‹น ๋ฆฌ์†Œ์Šค๋ฅผ ๋ณ€๊ฒฝํ•œ ๊ฒฝ์šฐ์ด๋‹ค.

์ด๋•Œ๋Š” A ๊ฐ€ ๋ฉฑ๋“ฑ์„ฑ์ด ์žˆ๋Š” GET ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์˜€๋Š”๋ฐ๋„ ๋ถˆ๊ตฌํ•˜๊ณ , ์ค‘๊ฐ„์— B์˜ ๊ฐœ์ž…์œผ๋กœ ์ธํ•ด ์‘๋‹ต๋ฐ›๋Š” ๊ฒฐ๊ณผ๊ฐ’์ด ๋‹ฌ๋ผ์ง€๊ฒŒ ๋œ๋‹ค.

๊ทธ๋Ÿผ ๋ฉฑ๋“ฑ์„ฑ์ด ๊นจ์ง„ ์ž˜๋ชป๋œ ์„ค๊ณ„๊ฐ€ ์•„๋‹ˆ๋ƒ ๋ผ๊ณ  ๋ฐ˜๋ฌธ ํ•  ์ˆ˜ ์žˆ๊ฒ ์ง€๋งŒ, ๋ฉฑ๋“ฑ์„ฑ์˜ ์—ฌ๋ถ€๋Š” ์™ธ๋ถ€ ์š”์ธ์œผ๋กœ ์ธํ•ด ์ค‘๊ฐ„์— ๋ฆฌ์†Œ์Šค๊ฐ€ ๋ณ€๊ฒฝ๋˜๋Š” ๊ฒƒ์€ ๊ณ ๋ คํ•˜์ง€ ์•Š์œผ๋ฉฐ, ๋˜ํ•œ ์„œ๋ฒ„์˜ ์ƒํƒœ ๊ธฐ์ค€์œผ๋กœ ํŒ๋‹จํ•˜๊ธฐ ๋•Œ๋ฌธ์— GET์˜ ๋ฉฑ๋“ฑ์„ฑ์€ ๋ฌธ์ œ๊ฐ€ ์—†๋Š” ๊ฒƒ๋‹ค.

์„œ๋ฒ„์˜ ์ƒํƒœ๋ฅผ ๋ฐ”๊พผ๊ฑด PUT ๋ฉ”์„œ๋“œ์ด์ง€ GET ๋ฉ”์„œ๋“œ๋Š” ์ถฉ์‹คํžˆ ์ดํ–‰ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.


DELETE์˜ ๋ฉฑ๋“ฑ (O)

GET์ด ๋‹จ์ˆœ ์กฐํšŒ๋ผ๋ฉด, DELETE๋Š” ๋‹จ์ˆœ ์‚ญ์ œ์ด๋‹ค. ๋”ฐ๋ผ์„œ DELETE๋Š” ๋ฉฑ๋“ฑ์„ฑ์„ ๊ฐ€์ง„๋‹ค.

DELETE๋ฅผ ์ฒ˜์Œ ์š”์ฒญ ํ•˜๋ฉด, ์„œ๋ฒ„์—์„œ ํ•ด๋‹น ๋ฆฌ์†Œ์Šค๋Š” ์‚ญ์ œ๊ฐ€ ๋œ๋‹ค. ์ดํ›„ DELETE๋ฅผ ์—ฌ๋Ÿฌ๋ฒˆ ์š”์ฒญํ•˜๋”๋ผ๋„ ํ•ด๋‹น ๋ฆฌ์†Œ์Šค๋Š” ์‚ญ์ œ๋œ ์ƒํƒœ ๊ทธ๋Œ€๋กœ ์ผ ๊ฒƒ์ด๋‹ˆ ์„œ๋ฒ„์˜ ์ƒํƒœ๋Š” ๋ณ€ํ•˜์ง€ ์•Š๋Š”๋‹ค.

์„œ๋ฒ„์—์„œ ์‚ญ์ œ ๋™์ž‘์ด ๋˜๋‹ˆ ์„œ๋ฒ„์˜ ์ƒํƒœ๊ฐ€ ๋ณ€๊ฒฝ๋œ ๊ฒƒ์ด ์•„๋‹ˆ๋ƒ๋ผ๊ณ  ์ƒ๊ฐํ•˜๊ฒ ์ง€๋งŒ, ๋‹ค์‹œํ•œ๋ฒˆ ๋งํ•˜์ง€๋งŒ ๋ฉฑ๋“ฑ์„ฑ์€ ํ•œ๋ฒˆ ํ˜ธ์ถœํ•˜๋“  ๋‘๋ฒˆ ํ˜ธ์ถœํ•˜๋“  ๊ฒฐ๊ณผ ์ƒํƒœ๊ฐ€ ๊ฐ™๋‹ค๋Š” ์˜๋ฏธ์ด์ง€, ์ „ํ˜€ ๋ณ€๊ฒฝ์ด ์ผ์–ด๋‚˜์ง€ ์•Š์Œ์„ ์˜๋ฏธํ•˜๋Š” ๊ฒƒ์€ ์•„๋‹ˆ๋‹ค.

์ฆ‰, ์ฒ˜์Œ ์š”์ฒญํ•˜๋“  ๋‹ค์‹œ ์—ฌ๋Ÿฌ๋ฒˆ ์š”์ฒญ์„ ํ•˜๋“  ์„œ๋ฒ„์˜ ์ƒํƒœ๋Š” ๋ฆฌ์†Œ์Šค๊ฐ€ ์‚ญ์ œ๋œ ์ƒํƒœ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๊ณ  ์ถ”๊ฐ€์ ์ธ ๋™์ž‘์„ ํ•˜์ง€ ์•Š์œผ๋‹ˆ ๋ฉฑ๋“ฑํ•˜๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.

 

๋ฉฑ๋“ฑ ์ ์ด์ง€ ์•Š์€ DELTE์˜ ์„ค๊ณ„

์ถ”๊ฐ€์ ์œผ๋กœ ์ด๋Ÿฌํ•œ DELTE์˜ ๋ฉฑ๋“ฑ์„ฑ ๋•Œ๋ฌธ์—, DELETE API๋ฅผ ์„ค๊ณ„ํ•  ๋•Œ์—๋Š” ์ •ํ™•ํ•œ ์‹๋ณ„์ž๋ฅผ ํ†ตํ•ด ๋ฆฌ์†Œ์Šค๋ฅผ ์ง€์ •ํ•ด์•ผ ํ•œ๋‹ค.

์˜ˆ๋ฅผ๋“ค์–ด ๊ฒŒ์‹œ๊ธ€์„ ์‚ญ์ œํ• ๋•Œ ์ •ํ™•ํ•œ ๊ฒŒ์‹œ๊ธ€ ID ๊ฐ’์ด ์•„๋‹Œ last๋ผ๋Š” ๊ตฌ์กฐ๋กœ ์ข€ ๋” ์œ ์—ฐํ•˜๊ฒŒ ์„œ๋ฒ„์—์„œ ์ฒ˜๋ฆฌ๋˜๋„๋ก ๊ตฌํ˜„ํ•˜์˜€๋‹ค๊ณ  ๊ฐ€์ •ํ•˜์ž.

http-idempotent

๊ทธ๋Ÿด๋“ฏํ•œ ๋กœ์ง์œผ๋กœ ๋ณด์ด๊ฒ ์ง€๋งŒ, ์ด๋Ÿฐ ๊ฒฝ์šฐ ํ•ด๋‹น DELETE ์š”์ฒญ์„ ์—ฌ๋Ÿฌ๋ฒˆ ๋ณด๋‚ด๊ฒŒ ๋˜๋ฉด ๋งค๋ฒˆ ๋งˆ์ง€๋ง‰ ๊ฒŒ์‹œ๊ธ€์„ ์‚ญ์ œํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋งค๋ฒˆ ์„œ๋ฒ„์˜ ์ƒํƒœ๊ฐ€ ๋ณ€ํ•˜๊ฒŒ ๋œ๋‹ค.

์ฆ‰, ๋ฉฑ๋“ฑ์„ฑ์„ ๊ฐ€์ง€์ง€ ์•Š๋Š” ๊ฒƒ์ด๋‹ค. ๋”ฐ๋ผ์„œ ์ด๋Ÿฐ ๊ฒฝ์šฐ์—๋Š” DELETE๋กœ ๊ตฌํ˜„ํ•˜๋Š” ๊ฑด HTTP ์ŠคํŽ™์ƒ ์˜ณ์ง€ ์•Š๊ณ , ๋ฉฑ๋“ฑ์„ฑ์„ ๊ฐ€์ง€์ง€ ์•Š๋Š” POST๋ฅผ ์“ฐ๋Š”๊ฒŒ ์ŠคํŽ™์ƒ์œผ๋กœ ๋งž๋‹ค.

http-idempotent


POST์˜ ๋ฉฑ๋“ฑ (X)

๋ฐ˜๋Œ€๋กœ POST ๋ฉ”์„œ๋“œ๋Š” ๋ฉฑ๋“ฑ์„ ๋งŒ์กฑํ•˜์ง€ ์•Š๋Š”๋‹ค.

POST๋Š” ์„œ๋ฒ„๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ „์†กํ•˜์—ฌ ์ƒˆ๋กœ์šด ์ž์›์„ ์ƒ์„ฑํ•˜๋Š” ์—ญํ• ์„ ํ•œ๋‹ค. ๋”ฐ๋ผ์„œ ์š”์ฒญ์„ ์—ฌ๋Ÿฌ๋ฒˆ ๋ณด๋‚ด๋Š” ๊ฒฝ์šฐ ๋งค๋ฒˆ ์ƒˆ๋กœ์šด ์ž์›์ด ์ƒ๊ฒจ๋‚˜๋Š” ๊ฒƒ์ด๋ฉฐ, ์ด๋Š” ์„œ๋ฒ„์˜ ์ƒํƒœ๊ฐ€ ๋ณ€๊ฒฝ๋˜๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค. 

 

๋ณต๊ตฌ ๋ฉ”์ปค๋‹ˆ์ฆ˜์— ๋”ฐ์ ธ์•ผ ํ•˜๋Š” ๋ฉฑ๋“ฑ์„ฑ

ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์„œ๋ฒ„์—๊ฒŒ HTTP ๋ฉ”์„ธ์ง€๋ฅผ ์ „์†กํ•˜์˜€๋Š”๋ฐ, TIMEOUT ๊ณผ ๊ฐ™์€ ๋ฌธ์ œ๋“ค๋กœ ์ธํ•ด ์ •์ƒ์ ์ธ ์‘๋‹ต์„ ์ „๋‹ฌ๋ฐ›์ง€ ๋ชปํ–ˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด๋ณด์ž.

์ •์ƒ์ ์ธ ์‘๋‹ต์„ ๋ฐ›์ง€ ๋ชปํ–ˆ๋‹ค๋ฉด ๋‹ค์‹œ ์š”์ฒญํ•˜๋ฉด ๊ทธ๋งŒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜๊ฒ ์ง€๋งŒ ์—ฌ๊ธฐ์— HTTP์˜ ๋ฉฑ๋“ฑ์„ฑ์˜ ์œ ๋ฌด๊ฐ€ ๋“ค์–ด๊ฐ€๊ฒŒ ๋œ๋‹ค.

์ผ๋ฐ˜์ ์œผ๋กœ GET ์ด๋‚˜ DELETE ๊ฐ™์€ ๋ฉ”์„œ๋“œ๋“ค์€ ์—ฌ๋Ÿฌ ๋ฒˆ ํ˜ธ์ถœํ•˜์—ฌ๋„ ์‘๋‹ต ๊ฒฐ๊ณผ๋Š” ๋ณ€ํ•จ์ด ์—†๊ธฐ ๋•Œ๋ฌธ์—, ํ†ต์‹  ์žฅ์•  ์‹œ ๋˜‘๊ฐ™์€ ์š”์ฒญ์„ ์žฌ์ „์†กํ•˜๋„๋ก ์„ค๊ณ„ํ•ด๋„ ๋ฌธ์ œ๋Š” ์—†์„ ๊ฒƒ์ด๋‹ค. 

ํ•˜์ง€๋งŒ POST ์™€ ๊ฐ™์€ ๋ฉฑ๋“ฑํ•˜์ง€ ์•Š๊ฒŒ ์„ค๊ณ„๋œ ๋ฉ”์„œ๋“œ๋“ค์€ ๋˜‘๊ฐ™์€ ์š”์ฒญ์„ ๋‹ค์‹œ ์ „์†กํ•  ๊ฒฝ์šฐ ๋ฌธ์ œ ๋ฐœ์ƒ ๊ฐ€๋Šฅ์„ฑ ์š”์ง€๊ฐ€ ์žˆ๋‹ค. ์™œ๋ƒํ•˜๋ฉด ํ†ต์‹  ์žฅ์•  ์ด์œ ๊ฐ€ ์„œ๋ฒ„ ์ž์ฒด๊ฐ€ ๋ฌธ์ œ์ผ์ˆ˜๋„ ์žˆ๊ณ  ์•„๋‹ˆ๋ฉด ์ธํ„ฐ๋„ท ์„ ์ด ๋ฌธ์ œ์ผ์ˆ˜๋„ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

http-idempotent
https://ably.com/topic/idempotency

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

๋งŒ์ผ ์ด๊ฒƒ์ด ๋ˆ๊ณผ ๊ด€๋ จ๋œ ๊ฒฐ์ œ์™€ ๊ฐ™์€ ์„œ๋น„์Šค๋ผ๋ฉด ๊ฒฐ์ œ๊ฐ€ ์ค‘๋ณต์œผ๋กœ ๋˜๋Š” ํฐ ๋ฌธ์ œ๋กœ ์ง๊ฒฐ๋œ๋‹ค.

๋”ฐ๋ผ์„œ POST ์š”์ฒญ ๊ฐ™์€ ๊ฒฝ์šฐ ๋” ํฐ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์š”์ฒญ์„ ๋˜ ๋ณด๋‚ด๋Š” ๊ฒƒ์ด ์•„๋‹Œ ๋‹ค๋ฅธ ์กฐ์น˜๋ฅผ ์ทจํ•  ์ˆ˜ ์žˆ๋„๋ก ์„ค๊ณ„ํ•˜๋Š” ๊ฒƒ์ด ์ ์ ˆํ•  ๊ฒƒ์ด๋‹ค.

์ด๋ ‡๊ฒŒ ๋ณต๊ตฌ ๋งค์ปค๋‹ˆ์ฆ˜์˜ ์‚ฌ์šฉ ๊ฐ€๋Šฅ ์—ฌ๋ถ€์— ์žˆ์–ด์„œ HTTP์˜ ๋ฉฑ๋“ฑ์ ์ธ ์†์„ฑ์€ ์„ค๊ณ„์˜ ์ค‘์‹ฌ์ด ๋˜๊ฒŒ ๋œ๋‹ค.


PUT์˜ ๋ฉฑ๋“ฑ (O)

PUT ๋ฉ”์„œ๋“œ๋Š” ๋Œ€์ƒ ๋ฆฌ์†Œ์Šค๋ฅผ ๋ฎ์–ด์”Œ์›Œ ๋ณ€๊ฒฝํ•˜๊ฑฐ๋‚˜, ๋Œ€์ƒ ๋ฆฌ์†Œ์Šค๊ฐ€ ์—†๋‹ค๋ฉด ์ƒˆ๋กœ ์ถ”๊ฐ€ํ•œ๋‹ค.

๊ทธ๋ž˜์„œ ๋งŒ์ผ ๋Œ€์ƒ ๋ฆฌ์†Œ์Šค๊ฐ€ ์—†๋‹ค๋ฉด PUT์ด POST์™€ ๊ฐ™์€ ๋™์ž‘์„ ํ•˜๊ฒŒ ๋˜๋Š”๋ฐ, ๋ฐ˜๋ฉด POST๋Š” ๋งค๋ฒˆ ์ƒˆ๋กœ์šด ์ž์›์„ ๋งŒ๋“œ๋Š” ๋ฐ˜๋ฉด, PUT์€ ํ•ด๋‹น ์ž์›์ด ์ด๋ฏธ ์žˆ๋‹ค๋ฉด ๋ฐ์ดํ„ฐ๋งŒ ๋ฎ์–ด์“ด๋‹ค.

๋”ฐ๋ผ์„œ ์š”์ฒญ์„ ํ•œ๋ฒˆํ•˜๋“  ์—ฌ๋Ÿฌ๋ฒˆํ•˜๋“  ๊ฒฐ๊ตญ ์„œ๋ฒ„์˜ ์ƒํƒœ๋Š” ๊ฐ™์•„์ง€๋‹ˆ, PUT์€ ๋ฉฑ๋“ฑํ•˜๋‹ค.

 

๋ฉฑ๋“ฑํ•˜๋‹ค๊ณ  ํ•ด์„œ ๊ฒฐ๊ณผ๊ฐ€ ํ•ญ์ƒ ๊ฐ™์€๊ฒƒ์€ ์•„๋‹˜

GET์˜ ๋ฉฑ๋“ฑ ๋ถ€๋ถ„์—์„œ ์†Œ๊ฐœํ–ˆ๋˜ ๊ฒƒ ์ฒ˜๋Ÿผ PUT๋„ ์˜ˆ์™ธ ์ผ€์ด์Šค๊ฐ€ ์žˆ๋‹ค.

PUT ์š”์ฒญ์„ ๋ณด๋ƒˆ๋Š”๋ฐ, ์ƒˆ๋กœ์šด ๋ฐ์ดํ„ฐ๋ฅผ ์ƒ์„ฑํ•œ ๊ฒฝ์šฐ 201(Created) ์ƒํƒœ์ฝ”๋“œ๋ฅผ ์‘๋‹ตํ•˜๋ฉฐ, ๊ธฐ์กด ๋ฐ์ดํ„ฐ๋ฅผ ๋ฎ์–ด์“ด ๊ฒฝ์šฐ 200(OK) ํ˜น์€ 204(No Content)๋ฅผ ์‘๋‹ตํ•˜๊ฒŒ ๋œ๋‹ค.

์ƒํƒœ์ฝ”๋“œ ์„ค๋ช…
200 OK ์š”์ฒญ์ด ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ˆ˜ํ–‰๋˜์—ˆ์Œ (GET, PUT)
201 Created ์„œ๋ฒ„๊ฐ€ ์ƒˆ๋กœ์šด ๋ฆฌ์†Œ์Šค๋ฅผ ์ƒ์„ฑํ–ˆ์Œ (POST, PUT)
204 No Content ์‘๋‹ตํ•  ๋ฐ์ดํ„ฐ๊ฐ€ ์—†์Œ (HTTP Body ๊ฐ€ ์—†์Œ). (DELETE, PUT)

๋ฌผ๋ก  ๋‹ค๋ฅธ ์ƒํƒœ ์ฝ”๋“œ๋ฅผ ์‘๋‹ตํ•œ๋‹ค๊ณ  ํ•ด์„œ ๋ฉฑ๋“ฑ ํ•˜์ง€ ์•Š๋‹ค๋Š” ๊ฒƒ์€ ๊ฒฐ์ฝ” ์•„๋‹ˆ๋‹ค. ์„œ๋ฒ„์˜ ์ƒํƒœ๋Š” ๋™์ผํ•˜๋ฏ€๋กœ ๋ฉฑ๋“ฑ์„ฑ์„ ๊ฐ€์ง„๋‹ค๊ณ  ํ•  ์ˆ˜ ์žˆ๋‹ค.

๋‹ค๋งŒ ๋™์ผํ•œ ์š”์ฒญ์„ ์—ฌ๋Ÿฌ๋ฒˆ ๋ณด๋‚ด๋”๋ผ๋„ ์ƒํƒœ ์ฝ”๋“œ๋ผ๋Š” ๊ฒฐ๊ณผ๊ฐ’์ด ๋‹ค๋ฅผ์ˆ˜ ์žˆ๋‹ค๋Š” ์ ๋งŒ ๊ธฐ์–ตํ•˜๋ฉด ๋œ๋‹ค.


PATCH์˜ ๋ฉฑ๋“ฑ (O or X)

PUT์ด ๋ฆฌ์†Œ์Šค ์ „์ฒด ๊ต์ฒด ๋ผ๋ฉด, PATCH๋Š” ๋ฆฌ์†Œ์Šค์˜ ๋ถ€๋ถ„์ ์ธ ์ˆ˜์ •์„ ํ•  ๋•Œ ์‚ฌ์šฉ๋œ๋‹ค.

PATCH์˜ ํŠน์ดํ•œ ์ ์€ ๊ธฐ๋ณธ์ ์œผ๋กœ ๋ฉฑ๋“ฑ์„ฑ์„ ๊ฐ€์ง€์ง€ ์•Š๋Š” ๋ฉ”์„œ๋“œ์ธ๋ฐ, ๊ทธ ๊ตฌํ˜„์„ PUT๊ณผ ๋™์ผํ•œ ๋ฐฉ์‹์œผ๋กœ ํ•  ๊ฒฝ์šฐ ๋ฉฑ๋“ฑ์„ฑ์„ ๊ฐ€์ง€๊ฒŒ ๋˜๋Š” ํŠน์„ฑ์„ ์ง€๋‹ˆ๊ณ  ์žˆ๋‹ค.

์ฆ‰, PATCH๋Š” ๋ฉฑ๋“ฑํ•˜๊ฒŒ ์„ค๊ณ„ํ•  ์ˆ˜๋„ ์žˆ๊ณ , ๋ฉฑ๋“ฑํ•˜์ง€ ์•Š๋„๋ก ์„ค๊ณ„ํ•  ์ˆ˜๋„ ์žˆ๋‹ค๋Š” ๋ง์ด๋‹ค.

์‚ฌ์‹ค PUT๊ณผ PATCH ๋ฉ”์†Œ๋“œ์˜ ์ง„์งœ ์ค‘์š”ํ•œ ์ฐจ์ด์ ์€ ์ „์ฒด ๊ต์ฒด, ์ผ๋ถ€ ๊ต์ฒด ํ–‰์œ„์˜ ์ฐจ์ด๊ฐ€ ์•„๋‹ˆ๋ผ, PUT ๋ฉ”์†Œ๋“œ๋Š” ๋ฐ˜๋“œ์‹œ ๋ฉฑ๋“ฑ์„ฑ์„ ๋ณด์žฅํ•˜์ง€๋งŒ PATCH ๋ฉ”์†Œ๋“œ๋Š” ๋ฉฑ๋“ฑ์„ฑ์„ ๋ณด์žฅํ•˜์ง€ ์•Š์„ ์ˆ˜๋„ ์žˆ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.

 

PATCH์˜ ๋ฉฑ๋“ฑ ์ ์ธ ์„ค๊ณ„

PATCH ๋ฉ”์†Œ๋“œ์— ์ˆ˜์ •ํ•  ๋ฆฌ์†Œ์Šค์˜ ์ผ๋ถ€๋ถ„๋งŒ ๋‹ด์•„์„œ ๋ณด๋‚ด๋Š” ๊ฒฝ์šฐ์—๋Š” ๋ฉฑ๋“ฑ์„ฑ์ด ๋ณด์žฅ๋œ๋‹ค.

ํ•œ๋ฒˆ ์š”์ฒญ์„ ๋ณด๋‚ธํ›„ ๊ฐ™์€ ์š”์ฒญ์„ ์—ฌ๋Ÿฌ๋ฒˆ ํ•˜๋”๋ผ๋„ ๋ณ€๊ฒฝ๋œ ๊ฐ™์€ ๊ฒฐ๊ณผ๊ฐ€ ๋‚˜์˜ค๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

// ๊ธฐ์กด์˜ ๋ฆฌ์†Œ์Šค
{
  id: 1,
  name: "๊น€์ฒ ์ˆ˜",
  age: 15  
}

http-patch

// ๋ณ€๊ฒฝ๋œ ๋ฆฌ์†Œ์Šค
{
  id: 1,
  name: "๊น€์ฒ ์ˆ˜",
  age: 20
}

 

PATCH์˜ ๋ฉฑ๋“ฑ ์ ์ด์ง€ ์•Š์€ ์„ค๊ณ„

PATCH์˜ ๋˜๋‹ค๋ฅธ ํŠน์ง•์œผ๋กœ๋Š” HTTP ์ŠคํŽ™์ƒ ๊ตฌํ˜„ ๋ฐฉ๋ฒ•์— ์ œํ•œ์ด ์—†๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.

๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ์œ„์ฒ˜๋Ÿผ ๊ผญ ๋ฐ์ดํ„ฐ๋ฅผ ๋˜๋‹ค๋ฅธ ๋ฐ์ดํ„ฐ๋กœ '๋Œ€์ฒด' ํ•˜๋„๋ก ๊ตฌ์„ฑํ•  ํ•„์š”๋Š” ์—†๋‹ค.

์˜ˆ๋ฅผ๋“ค์–ด PATCH์˜ ๋™์ž‘์„ '์ฆ๊ฐ€'๋ฅผ ํ†ตํ•œ ๋ณ€๊ฒฝ์ด๋ผ๊ณ  ํ•˜๋ฉด ์ƒํ™ฉ์ด ๋‹ฌ๋ผ์ง„๋‹ค.

์•„๋ž˜ ์˜ˆ์‹œ์˜ ๊ฒฝ์šฐ ๋™์ผํ•œ ์š”์ฒญ์„ ์—ฌ๋Ÿฌ๋ฒˆ ๋ณด๋‚ด๋ฉด, ๋งค ์š”์ฒญ๋งˆ๋‹ค age๊ฐ€ 1์”ฉ ์ฆ๊ฐ€ํ•˜๋„๋ก PATCH api๋ฅผ ์„ค๊ณ„ ํ•˜์˜€๋‹ค. ์ด๋Ÿด๊ฒฝ์šฐ ๋™์ผํ•œ ์š”์ฒญ์„ ์—ฌ๋Ÿฌ๋ฒˆ ํ•˜๋ฉด ํ• ์ˆ˜๋ก age์˜ ๊ฐ’์ด ๊ณ„์† ๋‹ฌ๋ผ์งˆํ…Œ๋‹ˆ, ๋ฉฑ๋“ฑ์„ฑ์„ ๊ฐ€์ง€์ง€ ์•Š๋Š” ๊ฒƒ์ด๋‹ค.

// ๊ธฐ์กด์˜ ๋ฆฌ์†Œ์Šค
{
  id: 1,
  name: "๊น€์ฒ ์ˆ˜",
  age: 15  
}

http-patch
์ด๋Š” HTTP API ๋ฌธ๋ฒ•์€ ์•„๋‹ˆ๊ณ  ์ ์ ˆํ•˜๊ฒŒ body ๊ฐ’์„ ์„ค์ •ํ•˜์—ฌ ์„œ๋ฒ„์—์„œ ์ธ์‹ํ•˜์—ฌ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๊ฒŒ ์ž„์˜๋กœ ์ง€์ •ํ•œ ํ˜•ํƒœ๋กœ ๋ณด๋ฉด ๋œ๋‹ค.

// ๋ณ€๊ฒฝ๋œ ๋ฆฌ์†Œ์Šค
{
  id: 1,
  name: "๊น€์ฒ ์ˆ˜",
  age: 16
}

์บ์‹œ ๊ฐ€๋Šฅ์„ฑ(Cacheable)

http-cache

์บ์‹œ ๊ฐ€๋Šฅ์„ฑ์€ ์‘๋‹ต ๊ฒฐ๊ณผ ๋ฆฌ์†Œ์Šค๋ฅผ ์บ์‹ฑํ•ด์„œ ํšจ์œจ์ ์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š”๊ฐ€ ์— ๋Œ€ํ•œ ์—ฌ๋ถ€์ด๋‹ค.

์บ์‹œ(Cache)๊ฐ€ ๊ผญ ์šด์˜์ฒด์ œ๋‚˜ ์„œ๋ฒ„์—๋งŒ ์žˆ๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ, ๋ธŒ๋ผ์šฐ์ € ์ž์ฒด๋„ ํ•˜๋‚˜์˜ ์†Œํ”„ํŠธ์›จ์–ด๋ผ ์บ์‹œ ๊ณต๊ฐ„์„ ๊ฐ€์ง€๊ณ  ์žˆ๋Š”๋ฐ, ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์„œ๋ฒ„์— ํ•œ ๋ฒˆ ์š”์ฒญํ–ˆ๋˜ ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•ด ๋งค ์š”์ฒญ๋งˆ๋‹ค ๋‹ค์‹œ ์ „์†กํ•  ํ•„์š”๊ฐ€ ์—†๋„๋ก ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์ž„์‹œ์ ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด๊ด€ํ•˜๊ณ  ์žˆ๋Š” ์žฅ์†Œ์ด๋‹ค.

์ฆ‰, ์บ์‹ฑ์ด ๊ฐ€๋Šฅํ•œ HTTP ๋ฉ”์†Œ๋“œ๋Š” ๋น ๋ฅด๊ฒŒ ๊ฒฐ๊ณผ๊ฐ’์„ ๋ฐ›์„ ์ˆ˜ ์žˆ๋‹ค๋Š” ์†Œ๋ฆฌ์ด๋‹ค.

 

1. ์ฒ˜์Œ ์›น์‚ฌ์ดํŠธ์— ์ ‘์†ํ• ๋•Œ ์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ ๋ฆฌ์†Œ์Šค๋ฅผ ๋ชจ๋‘ ๋ฐ›์•„์˜จ๋‹ค

http-cache

 

2. ์›น์‚ฌ์ดํŠธ๋ฅผ ์žฌ๋ฐฉ๋ฌธ ํ• ๊ฒฝ์šฐ ์บ์‹œ์—์„œ ๋ฆฌ์†Œ์Šค๋ฅผ ๊ฐ€์ ธ์˜ค๊ธฐ ๋•Œ๋ฌธ์— ๋น ๋ฅด๊ฒŒ ๋กœ๋“œ ๋œ๋‹ค.

http-cache

 

์œ„์˜ ํ‘œ์—์„œ ๋ณผ์ˆ˜ ์žˆ๋“ฏ์ด, GET, POST, PATCH ๋ฉ”์†Œ๋“œ๋Š” ์ŠคํŽ™ ์ƒ์œผ๋กœ ์บ์‹œ๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค. 

ํ•˜์ง€๋งŒ ์‹ค์ œ๋กœ๋Š” GET์ด๋‚˜ HEAD ์ •๋„๋งŒ ์บ์‹œ๋กœ ์ด์šฉ์ด ๊ฐ€๋Šฅํ•˜๊ณ  POST ์™€ PATCH ๋Š” ์ง€์›๋˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ๊ฐ€ ์ผ๋ฐ˜์ ์ด๋ผ๊ณ  ํ•œ๋‹ค.

์™œ๋ƒํ•˜๋ฉด ๋ธŒ๋ผ์šฐ์ €์˜ ์บ์‹œ๋ฅผ ์ด์šฉํ•˜๋ ค๋ฉด ์›๋ณธ ๋ฐ์ดํ„ฐ๊ฐ€ ๋ณ€๊ฒฝ๋˜์ง€ ์•Š๊ณ  ์œ ์ง€๋˜์–ด์•ผ ํ•˜๋Š”๋ฐ, POST, PUT, DELETE, PATCH ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ๋ฐ์ดํ„ฐ ๋ณ€๊ฒฝ์ด ๋˜๋Š” ๋ฉ”์„œ๋“œ ์ด๊ธฐ ๋•Œ๋ฌธ์—, ๋งŒ์ผ ํ˜ธ์ถœ๋กœ ์ธํ•ด ๋ฐ์ดํ„ฐ๊ฐ€ ๋ณ€๊ฒฝ๋˜๊ฒŒ ๋˜๋ฉด ์›๋ณธ ๋ฐ์ดํ„ฐ ๋˜ํ•œ ๋ณ€๊ฒฝ๋˜๊ธฐ์–ด ์บ์‹œ ๋ฐ์ดํ„ฐ ๋ถˆ์ผ์น˜ ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธฐ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

๋ฐ˜๋ฉด GET์€ ๋”ฑ URI๋งŒ ํ‚ค๋กœ ์žก๊ณ  ์บ์‹œํ•˜๋ฉด ๋˜์„œ ๊ฐ„๋‹จํ•˜๋‹ค.

๋”ฐ๋ผ์„œ, GET HEAD ๋ฉ”์„œ๋“œ๋Š” ์บ์‹œ๊ฐ€ ๊ฐ€๋Šฅํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ธŒ๋ผ์šฐ์ €์—์„œ ๋ฆฌ์†Œ์Šค๋ฅผ ์ž„์‹œ๋กœ ๋ณด๊ด€ํ•  ์ˆ˜ ์žˆ๊ณ , ๋‚˜๋จธ์ง€ ๋ฉ”์„œ๋“œ๋“ค์€  ๊ตฌํ˜„์˜ ๋ณต์žก์„ฑ ํ˜น์€ ์œ ์ง€์˜ ์–ด๋ ค์›€ ๋•Œ๋ฌธ์— ์บ์‹œ๋ฅผ ์ด์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋œ๋‹ค.


# ์ฐธ๊ณ ์ž๋ฃŒ

๋ชจ๋“  ๊ฐœ๋ฐœ์ž๋ฅผ ์œ„ํ•œ HTTP ์›น ๊ธฐ๋ณธ ์ง€์‹ - ๊น€์˜ํ•œ

https://velog.io/@cataiden/http-method-properties

https://www.section.io/engineering-education/understanding-browser-caching/