PUT vs POST - MoonGyeongHyeon/Keyword_Study GitHub Wiki

PUT vs POST

REST API์—์„œ๋Š” HTTP Method์ธ GET/PUT/POST/DELETE๋ฅผ ์ด์šฉํ•˜์—ฌ ์„œ๋น„์Šค ์ œ๊ณต์ž์—๊ฒŒ ์„œ๋น„์Šค๋ฅผ ์š”์ฒญํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค.

Method CRUD Idempotent
POST Create No
GET Read Yes
PUT Update Yes
DELETE Delete Yes

<ํ‘œ 1. Method, CRUD, Idempotent>

์œ„์˜ ํ…Œ์ด๋ธ”์—์„œ๋„ ๋ณผ ์ˆ˜ ์žˆ๋“ฏ์ด POST๋Š” ์ƒ์„ฑ, PUT์€ ์—…๋ฐ์ดํŠธ๋ฅผ ํ•  ์ˆ˜ ์žˆ๋‹ค. ๊ทธ๋ ‡๋‹ค๋ฉด ์–ธ์ œ POST์™€ PUT์„ ์‚ฌ์šฉํ•ด์•ผ ํ• ๊นŒ?

๋‘˜์„ ๋‚˜๋ˆ„๋Š” ๊ธฐ์ค€์€ ํฌ๊ฒŒ ๋‘๊ฐ€์ง€์ด๋‹ค.

  1. ๋ฉฑ๋“ฑ์„ฑ
  2. ๋ฆฌ์†Œ์Šค ๊ฒฐ์ •๊ถŒ

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

Idempotent๋Š” ์—ฌ๋Ÿฌ ๋ฒˆ ์ˆ˜ํ–‰ํ•ด๋„ ๊ฒฐ๊ณผ๊ฐ€ ๊ฐ™์€ ๊ฒฝ์šฐ๋ฅผ ์˜๋ฏธํ•œ๋‹ค. ์˜ˆ๋ฅผ ๋“ค๋ฉด, a++๋Š” ํ˜ธ์ถœ ์‹œ๋งˆ๋‹ค ๊ฐ’์ด ์ฆ๊ฐ€ํ•˜๊ธฐ ๋•Œ๋ฌธ์— Idempotentํ•˜์ง€ ์•Š๋‹ค. ํ•˜์ง€๋งŒ a=4์™€ ๊ฐ™์€ ๋ช…๋ น์€ ๋ฐ˜๋ณต์ ์œผ๋กœ ์ˆ˜ํ–‰ํ•ด๋„ ๊ฐ’์ด ๊ฐ™์ด ๋•Œ๋ฌธ์— Idempotentํ•˜๋‹ค.

POST ์—ฐ์‚ฐ์˜ ๊ฒฝ์šฐ์—๋Š” ๋ฆฌ์†Œ์Šค๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ์—ฐ์‚ฐ์ด๊ธฐ ๋•Œ๋ฌธ์— Idempotentํ•˜์ง€ ์•Š์ง€๋งŒ, PUT์€ ๋ฐ˜๋ณต ์ˆ˜ํ–‰ํ•ด๋„ Idempotent ํ•˜๋‹ค.

๋ฆฌ์†Œ์Šค ๊ฒฐ์ •๊ถŒ

URI๊ฐ€ ์„œ๋ฒ„์— ์˜ํ•ด ๊ฒฐ์ •๋˜๋Š”์ง€, ํด๋ผ์ด์–ธํŠธ์— ์˜ํ•ด ๊ฒฐ์ •๋˜๋Š”์ง€์— ๋”ฐ๋ผ POST์™€ PUT์œผ๋กœ ๋‚˜๋‰œ๋‹ค.

POST์˜ ๊ฒฝ์šฐ, ํด๋ผ์ด์–ธํŠธ๋Š” ๋ฆฌ์†Œ์Šค๊ฐ€ ์‹ค์ œ ์ €์žฅ๋  ์œ„์น˜๋ฅผ ๋ชจ๋ฅด๊ธฐ ๋•Œ๋ฌธ์— ์„œ๋ฒ„์—์„œ ์ฒ˜๋ฆฌํ•˜๋„๋ก ํ•˜๊ฒŒ ํ•œ๋‹ค.

POST /articles HTTP/1.1 

<article>
    <title>blue stapler</title> 
    <price currency="eur">7.50</price> 
</article>
HTTP/1.1 201 Created Location: /articles/63636 

PUT์„ ์‚ฌ์šฉํ•˜๋ฉด ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์ด๋ฏธ ๋ณ€๊ฒฝํ•  ๋ฆฌ์†Œ์Šค์˜ ์œ„์น˜๋ฅผ ์•Œ๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์—, ํŠน์ • ์—…๋ฐ์ดํŠธ ๋Œ€์ƒ ๋ฆฌ์†Œ์Šค๋ฅผ ๊ฐฑ์‹ ํ•  ์ˆ˜ ์žˆ๋‹ค.

PUT /article/1234 HTTP/1.1 

<article> 
    <title>red stapler</title> 
    <price currency="eur">12.50</price> 
</article>

๊ฒฐ๋ก 

๋ฉฑ๋“ฑ์„ฑ์„ ๊ฐ–์ง€ ์•Š๊ณ  ๋ฆฌ์†Œ์Šค๋ฅผ ์„œ๋ฒ„๊ฐ€ ๊ฒฐ์ •ํ•ด์ฃผ๋ฉด POST, ๋ฉฑ๋“ฑ์„ฑ์„ ๊ฐ€์ง€๊ณ  ์žˆ์œผ๋ฉด์„œ ๋ฆฌ์†Œ์Šค๋ฅผ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๊ฒฐ์ •ํ•˜๋ฉด PUT์ด๋‹ค.

ํ—ท๊ฐˆ๋ฆด ์ˆ˜ ์žˆ๋Š” ์ฃผ์ œ์ด์ง€๋งŒ, ๋ฉฑ๋“ฑ์„ฑ๊ณผ ๋ฆฌ์†Œ์Šค ๊ฒฐ์ •๊ถŒ๋งŒ ์ž˜ ์ƒ๊ฐํ•ด ๋ณด๋ฉด POST์™€ PUT์˜ ๊ตฌ๋ถ„์€ ์‰ฝ๊ฒŒ ํ•  ์ˆ˜ ์žˆ๋‹ค.

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