โ๏ธ GET, POST, PUT, DELETE?
ํ์์ ์ฝ๋ฉ์ ํ๋ฉด์ ์๋ฒ์ ํด๋ผ์ด์ธํธ๊ฐ ์ํต์ ํ๊ธฐ ์ํด์ ๋ณดํต Http๋ฅผ ์ด์ฉ์ ํ๊ฒ ๋์์ต๋๋ค. ๊ทธ๋ฐ๋ฐ GET, POST, PUT, DELETE ๋ฑ ์ฌ๋ฌ๊ฐ์ง์ Http Method ๊ฐ ์กด์ฌํ๋๋ฐ ๋ช ํํ๊ฒ ์ฌ์ฉํ๊ณ ์์๊น? ๋ผ๋ ๊ถ๊ธ์ฆ์ผ๋ก ๊ด๋ จ ์๋ฃ๋ฅผ ์ฐพ์๋ณด๊ฒ ๋์์ต๋๋ค.
๐ง REST
Http Method์ ๋ํด์ ์๊ธฐ ์ํด์, ๋จผ์ ์ ์๋๋ ๊ฒ์ด REST ์ด๋ค.
REST์ ํ์
- REST๋ Representational State Transfer๋ผ๋ ์ฉ์ด์ ์ฝ์๋ก์ 2000๋ ๋์ ๋ก์ด ํ๋ฉ (Roy Fielding)์ ๋ฐ์ฌํ์ ๋ ผ๋ฌธ์์ ์ต์ด๋ก ์๊ฐ๋์์ต๋๋ค. ๋ก์ด ํ๋ฉ์ HTTP์ ์ฃผ์ ์ ์ ์ค ํ ์ฌ๋์ผ๋ก ๊ทธ ๋น์ ์น(HTTP) ์ค๊ณ์ ์ฐ์์ฑ์ ๋นํด ์ ๋๋ก ์ฌ์ฉ๋์ด์ง์ง ๋ชปํ๋ ๋ชจ์ต์ ์ํ๊น์ํ๋ฉฐ ์น์ ์ฅ์ ์ ์ต๋ํ ํ์ฉํ ์ ์๋ ์ํคํ ์ฒ๋ก์จ REST๋ฅผ ๋ฐํํ๋ค๊ณ ํฉ๋๋ค.
์ฌ์ค.. ์ ๋๋ก ๋ช
ํํ๊ฒ ์ฌ์ฉํ์!! ๋ผ๊ณ ๋ฐํํ์ง๋ง, ๋ช
ํํ REST์ ๊ท์น์ด ์ด๋ ต๊ธฐ ๋๋ฌธ์ ํธ์ํ.. ๊ฐ๋ฐ์ ์ํด์ ๋๋ถ๋ถ์ ์ฌ๋๋ค์ด ์ ๋ฐํ๊ฒ ์งํค์ง๋ ์๋ ๊ฒ ๊ฐ์ต๋๋ค.
์ผ๋ง๋ ์ด๋ ต๊ธฐ์.. REST์ ์ ํํ ๊ท์น์ ๋ํด์๋ ๋ค์ ํฌ์คํ
์์ ๋ค๋ค๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค!!
REST๋?
Representational State Transfer์ ์ฝ์์ด๋ฉฐ, ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- ์์(Resource): URI
- ํ์(Verb): HTTP Method
- ํํ(Representations)
์ฌ๊ธฐ์ ์ด๋ฒ ํฌ์คํ ์์ ๋ค๋ฃฐ ์ฃผ์ ์ธ HTTP Method๊ฐ ๋์ค๊ฒ ๋ฉ๋๋ค. ์ฆ, REST๋ฅผ ์งํค๋ฉด์ ํ์๋ฅผ ์ ๋ฌํ๋ ๋ฐฉ๋ฒ์ด๋ค ๋ผ๊ณ ์๊ฐํ๋ฉด ๋ ๊ฒ ๊ฐ์ต๋๋ค.
๐ HTTP Method
HTTP Method๋ ํฌ๊ฒ GET, POST, PUT, DELETE๊ฐ ๋ํ์ ์ ๋๋ค.
๋ณดํต CRUD์์ ๋ค์๊ณผ ๊ฐ์ด ์ด์ฉํฉ๋๋ค.
์กฐํ: GET
๋ฑ๋ก: POST
์์ : PUT
์ญ์ : DELETE
์ ์ฒด ์ข ๋ฅ
๋ฉ์๋๋ ์ด 8๊ฐ๊ฐ ์กด์ฌํ๋ฉฐ ์๋์ ๊ฐ์ต๋๋ค.
GET: ์๋ฒ๋ก ๋ถํฐ ๋ฐ์ดํฐ๋ฅผ ์ทจ๋
POST: ์๋ฒ์ ๋ฐ์ดํฐ๋ฅผ ์ถ๊ฐ, ์์ฑ ๋ฑ
PUT: ์๋ฒ์ ๋ฐ์ดํฐ๋ฅผ ๊ฐฑ์ , ์์ฑ ๋ฑ
DELETE: ์๋ฒ์ ๋ฐ์ดํฐ๋ฅผ ์ญ์
HEAD: ์๋ฒ ๋ฆฌ์์ค์ ํค๋(๋ฉํ ๋ฐ์ดํฐ์ ์ทจ๋)
OPTIONS: ๋ฆฌ์์ค๊ฐ ์ง์ํ๊ณ ์๋ ๋ฉ์๋์ ์ทจ๋
PATCH: ๋ฆฌ์์ค์ ์ผ๋ถ๋ถ์ ์์
CONNECT: ํ๋ก์ ๋์์ ํฐ๋ ์ ์์ ๋ณ๊ฒฝ
๋ฉฑ๋ฑ์ฑ(Idempotence)์ด๋?
์ฐ์ , HTTP Method์ ๋ํ ์๋ฃ๋ฅผ ์ฐพ์๋ณด๋ฉด, idempotent๋ผ๋ ๋ง์ด ๋์จ๋ค. ํ๊ตญ์ด๋ก๋ ๋ฉฑ๋ฑ์ฑ์ด๋ผ๊ณ ํ๋ค. ์ฒ์๋ค์ด๋ดค๋ค.๐
๋ฉฑ๋ฑ์ฑ์ด๋ ์ฌ๋ฌ๋ฒ ์ํํด๋ ๊ฒฐ๊ณผ๊ฐ ๊ฐ์์ ์๋ฏธํ๋ค. ์ฆ, ํธ์ถ๋ก ์ธํ์ฌ ๋ฐ์ดํฐ๊ฐ ๋ณํ์ด ๋์ง ์๋๋ค๋ ๊ฒ์ ์๋ฏธํ๋ค.
1. GET
์ ์
GET ๋ฉ์๋๋ ์ฃผ๋ก ๋ฐ์ดํฐ๋ฅผ ์ฝ๊ฑฐ๋(Read) ๊ฒ์(Retrieve)ํ ๋์ ์ฌ์ฉ๋๋ ๋ฉ์๋์ด๋ค. ๋ง์ฝ์ GET์์ฒญ์ด ์ฑ๊ณต์ ์ผ๋ก ์ด๋ฃจ์ด์ง๋ค๋ฉด XML์ด๋ JSON๊ณผ ํจ๊ป 200 (Ok) HTTP ์๋ต ์ฝ๋๋ฅผ ๋ฆฌํดํ๋ค. ์๋ฌ๊ฐ ๋ฐ์ํ๋ฉด ์ฃผ๋ก 404 (Not found) ์๋ฌ๋ 400 (Bad request) ์๋ฌ๊ฐ ๋ฐ์ํ๋ค.
- HTTP ๋ช ์ธ์ ์ํ๋ฉด GET ์์ฒญ์ ์ค๋ก์ง ๋ฐ์ดํฐ๋ฅผ ์ฝ์ ๋๋ง ์ฌ์ฉ๋๊ณ ์์ ํ ๋๋ ์ฌ์ฉํ์ง ์๋๋ค.
- GET ์์ฒญ์ idempotent ํ๋ค.
- ๊ฐ์ ์์ฒญ์ ์ฌ๋ฌ ๋ฒ ํ๋๋ผ๋ ๋ณํจ์์ด ํญ์ ๊ฐ์ ์๋ต์ ๋ฐ์ ์ ์๋ค.
- ๋ฐ์ดํฐ๋ฅผ ๋ณ๊ฒฝํ๋ ์ฐ์ฐ์ ์ฌ์ฉํ๋ฉด ์๋๋ค.
์์
GET /user/1
๋ฐ์ดํฐ๋ฅผ ์กฐํํ๋ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ ์์ฒญ์์ Body ๊ฐ๊ณผ Content-Type ๊ฐ ๋น์์ ธ์๋ค. ์กฐํํ ๋ฐ์ดํฐ์ ๋ํ ์ ๋ณด๋ URL์ ํตํด์ ํ๋ผ๋ฉํฐ๋ฅผ ๋ฐ๊ณ ์๋ ๋ชจ์ต์ ๋ณผ ์ ์๋ค.
๋ฐ์ดํฐ ์กฐํ์ ์ฑ๊ณตํ๋ค๋ฉด Body ๊ฐ์ ๋ฐ์ดํฐ ๊ฐ์ ์ ์ฅํ์ฌ ์ฑ๊ณต ์๋ต์ ๋ณด๋ธ๋ค.
GET์ ์บ์ฑ์ด ๊ฐ๋ฅํ์ฌ ๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ํ๋ฒ ๋ ์กฐํํ ๊ฒฝ์ฐ์ ์ ์ฅํ ๊ฐ์ ์ฌ์ฉํ์ฌ ์กฐํ ์๋๊ฐ ๋นจ๋ผ์ง๋ค.
2. POST
์ ์
POST ๋ฉ์๋๋ ์ฃผ๋ก ์๋ก์ด ๋ฆฌ์์ค๋ฅผ ์์ฑ(create)ํ ๋ ์ฌ์ฉ๋๋ค. ์กฐ๊ธ ๋ ๊ตฌ์ฒด์ ์ผ๋ก POST๋ ํ์ ๋ฆฌ์์ค(๋ถ๋ชจ ๋ฆฌ์์ค์ ํ์ ๋ฆฌ์์ค)๋ค์ ์์ฑํ๋๋ฐ ์ฌ์ฉ๋๋ค. ์ฑ๊ณต์ ์ผ๋ก creation์ ์๋ฃํ๋ฉด 201 (Created) HTTP ์๋ต์ ๋ฐํํ๋ค.
- POST ์์ฒญ์ idempotent ํ์ง ์๋ค.
- ๊ฐ์ POST ์์ฒญ์ ๋ฐ๋ณตํด์ ํ์ ๋ ํญ์ ๊ฐ์ ๊ฒฐ๊ณผ๋ฌผ์ด ๋์ค๋ ๊ฒ์ ๋ณด์ฅํ์ง ์๋๋ค
- ๋ ๊ฐ์ ๊ฐ์ POST ์์ฒญ์ ๋ณด๋ด๋ฉด ๊ฐ์ ์ ๋ณด๋ฅผ ๋ด์ ๋ ๊ฐ์ ๋ค๋ฅธ resource๋ฅผ ๋ฐํํ ๊ฐ๋ฅ์ฑ์ด ๋๋ค.
์์
POST /user
body : {date : "example"}
Content-Type : "application/json"
๋ฐ์ดํฐ๋ฅผ ์์ฑํ๋ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ ์์ฒญ์์ Body ๊ฐ๊ณผ Content-Type ๊ฐ์ ์์ฑํด์ผํ๋ค. ํด๋น ์์๋ JSON์ ํตํด์ ์์ฑ๋ ์์์ด๋ค.
URL์ ํตํด์ ๋ฐ์ดํฐ๋ฅผ ๋ฐ์ง ์๊ณ , Body ๊ฐ์ ํตํด์ ๋ฐ๋๋ค.
๋ฐ์ดํฐ ์กฐํ์ ์ฑ๊ณตํ๋ค๋ฉด Body ๊ฐ์ ์ ์ฅํ ๋ฐ์ดํฐ ๊ฐ์ ์ ์ฅํ์ฌ ์ฑ๊ณต ์๋ต์ ๋ณด๋ธ๋ค.
3. PUT
์ ์
PUT๋ ๋ฆฌ์์ค๋ฅผ ์์ฑ / ์ ๋ฐ์ดํธํ๊ธฐ ์ํด ์๋ฒ๋ก ๋ฐ์ดํฐ๋ฅผ ๋ณด๋ด๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค.
- PUT ์์ฒญ์ idempotent ํฉ๋๋ค.
- ๋์ผํ PUT ์์ฒญ์ ์ฌ๋ฌ ๋ฒ ํธ์ถํ๋ฉด ํญ์ ๋์ผํ ๊ฒฐ๊ณผ๊ฐ ์์ฑ๋ฉ๋๋ค.
์์
PUT /user/1
body : {date : "update example"}
Content-Type : "application/json"
๋ฐ์ดํฐ๋ฅผ ์์ ํ๋ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ ์์ฒญ์์ Body ๊ฐ๊ณผ Content-Type ๊ฐ์ ์์ฑํด์ผํ๋ค. ํด๋น ์์๋ JSON์ ํตํด์ ์์ฑ๋ ์์์ด๋ค.
URL์ ํตํด์ ์ด๋ ํ ๋ฐ์ดํฐ๋ฅผ ์์ ํ ์ง ํ๋ผ๋ฉํฐ๋ฅผ ๋ฐ๋๋ค. ๊ทธ๋ฆฌ๊ณ ์์ ํ ๋ฐ์ดํฐ ๊ฐ์ Body ๊ฐ์ ํตํด์ ๋ฐ๋๋ค.
๋ฐ์ดํฐ ์กฐํ์ ์ฑ๊ณตํ๋ค๋ฉด Body ๊ฐ์ ์ ์ฅํ ๋ฐ์ดํฐ ๊ฐ์ ์ ์ฅํ์ฌ ์ฑ๊ณต ์๋ต์ ๋ณด๋ธ๋ค.
4. DELETE
์ ์
DELETE ๋ฉ์๋๋ ์ง์ ๋ ๋ฆฌ์์ค๋ฅผ ์ญ์ ํฉ๋๋ค.
์์
DELETE /user/1
๋ฐ์ดํฐ๋ฅผ ์ญ์ ํ๋ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ ์์ฒญ์์ Body ๊ฐ๊ณผ Content-Type ๊ฐ์ด ๋น์์ ธ์๋ค.
URL์ ํตํด์ ์ด๋ ํ ๋ฐ์ดํฐ๋ฅผ ์ญ์ ํ ์ง ํ๋ผ๋ฉํฐ๋ฅผ ๋ฐ๋๋ค.
๋ฐ์ดํฐ ์ญ์ ์ ์ฑ๊ณตํ๋ค๋ฉด Body ๊ฐ ์์ด ์ฑ๊ณต ์๋ต๋ง ๋ณด๋ด๊ฒ ๋๋ค.
๐ ์์ฃผํ๋ ์ง๋ฌธโ
POST๋ฐฉ์์ด GET๋ฐฉ์๋ณด๋ค ๋ณด์์ธก๋ฉด์์ ๋ ์ข๋ค?
- GET๊ณผ ๋น๊ตํ์ฌ URL์ ๋ฐ์ดํฐ์ ์ ๋ณด๊ฐ ๋ค์ด ์์ง ์์ผ๋ฏ๋ก ์กฐ๊ธ ๋ ์์ ํ๋ค๊ณ ๋ณผ ์ ์๋ค.
GET๋ฐฉ์์ด POST๋ฐฉ์๋ณด๋ค ์๋๊ฐ ๋น ๋ฅด๋ค?
- GET ๋ฐฉ์์ ์บ์ฑ์ ํ๊ธฐ ๋๋ฌธ์ ์ฌ๋ฌ๋ฒ ์์ฒญ์ ์ ์ฅ๋ ๋ฐ์ดํฐ๋ฅผ ํ์ฉํ๋ฏ๋ก ์กฐ๊ธ ๋ ๋น ๋ฅผ ์ ์๋ค.
POST vs PUT
- POST์ PUT์ ๊ตฌ๋ถํด์ ์ฌ์ฉํด์ผํ๋ค. POST๋ ์๋ก์ด ๋ฐ์ดํฐ๋ฅผ ๊ณ์ ์์ฑํ๊ธฐ ๋๋ฌธ์ ์์ฒญ์๋ง๋ค ๋ฐ์ดํฐ๋ฅผ ์์ฑํ์ง๋ง, PUT์ ์ฌ์ฉ์๊ฐ ๋ฐ์ดํฐ๋ฅผ ์ง์ ํ๊ณ ์์ ํ๋ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ ๊ฐ์ ์์ฒญ์ ๊ณ์ํ๋๋ผ๋ ๋ฐ์ดํฐ๊ฐ ๊ณ์ ์์ฑ๋์ง๋ ์๋๋ค.
PUT vs PATCH
- PATCH๋ ์ด ํฌ์คํธ์์ ๋ค๋ฃจ์ง ์์์ง๋ง, ์ ๋ณด๋ฅผ ์์ ํ ์ ์๋ HTTP Method๊ฐ ๋ ์์ต๋๋ค. ํ์ง๋ง PUT์ด๋์ ์กฐ๊ธ ๋ค๋ฆ ๋๋ค. PUT์ ์ง์ ํ ๋ฐ์ดํฐ๋ฅผ ์ ๋ถ ์์ ํ๋ Method์ด์ง๋ง PATCH๋ ์ ๋ณด์ ์ผ๋ถ๋ถ์ด ๋ณ๊ฒฝ๋๋ ๋ฐฉ๋ฒ์ ๋๋ค. ๊ทธ๋์ PUT์ ๋ฉฑ๋ฑํ์ง๋ง, PATCH๋ ๋ฉฑ๋ฑํ๋ค๊ณ ๋ณผ ์ ์์ต๋๋ค.
'๐ฐ News > think' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Git Bash ๋? (0) | 2022.05.07 |
---|---|
REST API ์ ๋๋ก ์๊ณ ์ฌ์ฉํ๊ธฐ (0) | 2022.05.05 |
CI/CD๋? (DevOps ์์ง๋์ด์ ํต์ฌ ์ ๋ฌด) (0) | 2022.04.28 |
Computer Vision's understanding (0) | 2022.04.16 |
๋ผ์ด๋ค๋? (LIDAR) (0) | 2022.04.16 |