GET๊ณผ POST ๋ชจ๋ ํ๋กํ ์ฝ์ ์ด์ฉํด์ ์๋ฒ์ ๋ฌด์์ธ๊ฐ๋ฅผ ์์ฒญํ ๋ ์ฌ์ฉํ๋ ๋ฐฉ์์ด๋ค.
๊ทธ๋ ๋ค๋ฉด GET๊ณผ POST ๊ฐ๊ฐ์ ์ด๋ค ์ํฉ์ ์ฌ์ฉํ๋ ๊ฒ์ด ์ ์ ํ ๊น?
๐ GET ๋ฐฉ์
GET ๋ฉ์๋๋ ํด๋ผ์ด์ธํธ์์ ์๋ฒ๋ก ์ ๋ณด๋ฅผ ์์ฒญํ๊ธฐ ์ํด ์ฌ์ฉ๋๋ ๋ฉ์๋๋ก, ์ฃผ๋ก ๋ฐ์ดํฐ๋ฅผ ์ฝ๊ฑฐ๋(Read) ๊ฒ์(Retrieve)ํ ๋ ์ฌ์ฉํ๋ค.
GET์ ์์ฒญ์ ์ ์กํ ๋ URL ์ฃผ์ ๋์ ๋ฐ์ดํฐ๊ฐ ํ๋ผ๋ฏธํฐ๋ก ํฌํจ๋์ด ์ ์ก๋๋ฉฐ, ์ด ๋ถ๋ถ์ QueryString์ด๋ผ๊ณ ํ๋ค.
localhost:8080/members?page=1&size=10
์ ์์๋ฅผ ๋ณด๋ฉด ํ๋ผ๋ฏธํฐ์ธ page๊ณผ size๋ฅผ ํตํด ๊ฐ์ ์ ๋ฌ๋ฐ์ ์ ์๋ค. (๋ง์ฝ, ์์ฒญ ํ๋ผํคํฐ๊ฐ ์ฌ๋ฌ ๊ฐ์ผ ๊ฒฝ์ฐ &๋ก ์ฐ๊ฒฐ)
์ด๋ฌํ ๋ฐฉ์์ ๋ฐ์ดํฐ๊ฐ url์ ๋ด๊ฒจ๊ฐ๊ธฐ ๋๋ฌธ์ ์ ์กํ ์ ์๋ ๋ฐ์ดํฐ์ ํฌ๊ธฐ๊ฐ ์ ํ์ ์ด๋ค.
๋ ๋ณด์์ด ํ์ํ ๋ฏผ๊ฐํ ๋ฐ์ดํฐ์ ๊ฒฝ์ฐ, ๋ฐ์ดํฐ๊ฐ url์ ๊ทธ๋๋ก ๋ ธ์ถ๋๊ธฐ ๋๋ฌธ์ GET ๋ฐฉ์์ ์ ์ ํ์ง ์๋ค.
๋, GET ์์ฒญ์ ๋ธ๋ผ์ฐ์ ๊ธฐ๋ก์ ๋จ์ผ๋ฉฐ, indempotentํ๋ค๋ ํน์ง์ด ์๋ค.
๐ POST ๋ฐฉ์
POST ๋ฉ์๋๋ ๋ฆฌ์์ค๋ฅผ ์์ฑ/์ ๋ฐ์ดํธํ๊ธฐ ์ํด ์๋ฒ์ ๋ฐ์ดํฐ๋ฅผ ๋ณด๋ด๋ ๋ฐ ์ฌ์ฉ๋๋ ๋ฉ์๋๋ก, GET๊ณผ ๋ฌ๋ฆฌ ์ ์กํ ๋ฐ์ดํฐ๋ฅผ HTTP ๋ฉ์๋์ Body์ ๋ด์์ ์ ์กํ๋ค. (Body์ ํ์ ์ ์์ฒญ ํค๋์ Content-Type์ ์์ฒญ ๋ฐ์ดํฐ ํ์ ํ์์ ๋ฐ๋ผ ๊ฒฐ์ ๋๋ค.)
Content-Type : application/json
Content-Type : application/javascript
Content-Type : application/xml
Content-Type : text/html
Content-Type : text/plain
HTTP ๋ฉ์์ง์ Body์๋ ๊ธธ์ด ์ ํ ์์ด ๋ฐ์ดํฐ๋ฅผ ์ ์กํ ์ ์์ผ๋ฉฐ, ๋ฐ๋ผ์ POST ์์ฒญ์ GET๊ณผ ๋ฌ๋ฆฌ ๋์ฉ๋ ๋ฐ์ดํฐ๋ฅผ ์ ์กํ ์ ์๋ค.
GET๋ณด๋ค POST ์์ฒญ์ด ๋ณด์์ ์ผ๋ก ์์ ํ๋ค๊ณ ์๊ฐํ ์ ์์ผ๋, POST ์์ฒญ๋ ๊ฐ๋ฐ์ ๋๊ตฌ, Fiddler์ ๊ฐ์ ํด๋ก ์์ฒญ ๋ด์ฉ ํ์ธ์ด ๊ฐ๋ฅํ๊ธฐ ๋๋ฌธ์ ๋ฏผ๊ฐํ ๋ฐ์ดํฐ์ ๊ฒฝ์ฐ, ๋ฐ๋์ ์ํธํํด ์ ์กํด์ผ ํ๋ค.
POST ์์ฒญ์ ์บ์๋์ง ์์ผ๋ฉฐ, ๋ธ๋ผ์ฐ์ ๊ธฐ๋ก์ ๋จ์ ์์ง ์๋๋ค. POST ์์ฒญ ์ค ์์ ์์ฑ์ 201 (Created) HTTP ์๋ต ์ฝ๋๋ฅผ ๋ฐํํ๋ค. idempotentํ์ง ์๋ค.
โ GET vs POST
GET | POST | |
์ธ์ ์ฌ์ฉํ ๊ฒ์ธ๊ฐ? | ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ฌ ๋ (์ฝ๊ธฐ, ๊ฒ์) | ๋ฐ์ดํฐ ์์ฑ, ๋ณ๊ฒฝํ ๋ |
๋ธ๋ผ์ฐ์ ์ ์บ์ ์ฌ๋ถ | ์บ์ฑ ๊ฐ๋ฅ | ์บ์ฑ ๋ถ๊ฐ |
๋ถ๋งํฌ ์ถ๊ฐ | ๊ฐ๋ฅ | ๋ถ๊ฐ๋ฅ |
๋ฐ์ดํฐ ๊ธธ์ด ์ ํ | ์์ | ์์ |
HTTP ์๋ต ์ฝ๋ | 200(OK) | 201(Created) |
๋ฆฌ์์ค ์ ๋ฌ ๋ฐฉ์ | ์ฟผ๋ฆฌ์คํธ๋ง | HTTP Body |
idempotent | YES | NO |
๐๏ธ idempotent๋?
๋ฉฑ๋ฑ์ฑ์ด๋ผ๋ ๋ป์ผ๋ก ์ฐ์ฐ์ ์ฌ๋ฌ ๋ฒ ์ ์ฉํ๋๋ผ๋ ๊ฒฐ๊ณผ๊ฐ ๋ฌ๋ผ์ง์ง ์๋ ์ฑ์ง์ ์๋ฏธํ๋ค.
์ฆ, GET์ด idempotentํ๋๋ก ์ค๊ณ๋์๋ค๋ ๊ฒ์ GET์ผ๋ก ์๋ฒ์์ ๋์ผํ ์์ฒญ์ ์ฌ๋ฌ ๋ฒ ์ ์กํด๋ ๋์ผํ ์๋ต์ด ๋์์์ผ ํ๋ค๋ ๊ฒ์ ์๋ฏธํ๋ค.
๋ฐ๋ผ์ GET์ ์ค๊ณ ์์น์ ๋ฐ๋ผ ์๋ฒ์ ๋ฐ์ดํฐ๋ ์ํ๋ฅผ ๋ณ๊ฒฝ์ํค์ง ์์์ผ idempotentํ๊ธฐ ๋๋ฌธ์ ์ฃผ๋ก ์กฐํ๋ฅผ ํ ๋ ์ฌ์ฉํด์ผ ํ๋ค.
๋ฐ๋๋ก, POST๋ Non-idempotentํ๊ธฐ ๋๋ฌธ์ ์๋ฒ์๊ฒ ๋์ผํ ์์ฒญ์ ์ฌ๋ฌ ๋ฒ ์ ์กํด๋ ์๋ต์ ํญ์ ๋ค๋ฅผ ์ ์๋ค.
์ด์ ๋ฐ๋ผ POST๋ ์๋ฒ์ ์ํ๋ ๋ฐ์ดํฐ๋ฅผ ๋ณ๊ฒฝ์ํฌ ๋ ์ฌ์ฉ๋๋ค.
์ฐธ๊ณ )
https://whales.tistory.com/120
https://github.com/JaeYeopHan/Interview_Question_for_Beginner/tree/master/Network
'๋คํธ์ํฌ๐' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
์ฟ ํค๋ฅผ ํ์ทจํ ํ ์ ์ฉํ ์ ์๋ ๋ํ์ ์ธ ๋ณด์ ๊ณต๊ฒฉ : XSS, CSRF (0) | 2023.05.20 |
---|