PUT vs POST - MoonGyeongHyeon/Keyword_Study GitHub Wiki
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์ ์ฌ์ฉํด์ผ ํ ๊น?
๋์ ๋๋๋ ๊ธฐ์ค์ ํฌ๊ฒ ๋๊ฐ์ง์ด๋ค.
- ๋ฉฑ๋ฑ์ฑ
- ๋ฆฌ์์ค ๊ฒฐ์ ๊ถ
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์ ๊ตฌ๋ถ์ ์ฝ๊ฒ ํ ์ ์๋ค.