๐ ์ด ํฌ์คํ ์์๋ HTTP์ GET, POST, PUT, PATCH, DELETE ๋งค์๋์ ๋ํด ์ ๋ฆฌํ์์ต๋๋ค.
๐ฅ HTTP ๋งค์๋๋?
๐ฅ GET, POST ๋งค์๋
๐ฅ PUT, PATCH, DELETE ๋งค์๋
๐ฅ HTTP ๋งค์๋์ ์์ฑ
โ๏ธ ์์(resource) ์๋ณํ๊ธฐ ์ํด URL์ ์ค๊ณํ ๋, URL์ ์์์ ํด๋นํ๋ ๊ทธ ๋์์ ๋ํด์๋ง ์๋ณํ๋ ๊ฒ์ด ๊ถ์ฅ๋๊ณ , ์์์ ํ์์ ๋ํด์๋ ๋ถ๋ฆฌํด์ผํ๋ค.
โ๏ธ ์๋ฅผ๋ค์ด, ํ์ ๋ฑ๋ก, ํ์ ์กฐํ, ํ์ ์์ , ํ์ ์ญ์ URL์ ๋ง๋ค ๋, ์๋ณํด์ผํ๋ ์์์ ํ์์ด๋ค.
โ๏ธ ๋ฐ๋ผ์ ๋ฑ๋ก, ์กฐํ, ์์ , ์ญ์ ๋ ์์์ ๋ํ ํ์์ด๊ธฐ ๋๋ฌธ์ HTTP ๋งค์๋๋ฅผ ์ต๋ํ ํ์ฉํด์ API URL์ ์ค๊ณํด์ผ ํ๋ค.
โ๏ธ ์ฆ, HTTP ๋งค์๋๊ฐ ํ์ํ ์ด์ ๋ URL์์ ์์์ ๋์๋ง์ ์๋ณํ๊ธฐ ๋๋ฌธ์ ์์ฑ, ์กฐํ, ์์ , ์ญ์ ๋ฑ์ด ๋ชจ๋ ๊ฐ์ URL์ ๊ฐ์ง์ง ์๋๋ก ํ๊ธฐ ์ํด์ HTTP ๋งค์๋๊ฐ ํ์ํ ๊ฒ์ด๋ค.
โ๏ธ ์ฃผ์ HTTP ๋งค์๋๋ ์๋์ ๊ฐ๋ค.
โ๏ธ ์์(resource)์ด๋ ์ฉ์ด ๋์ ํ์(representation)์ด๋ ์ฉ์ด๋ฅผ ์ฌ์ฉํ๊ฒ ๋ค. ํ์๊น์ง ํฌํจํ๊ธฐ ๋๋ฌธ์ด๋ค.
- GET : ํ์(representation) ์กฐํ ๐ READ
- POST : ์์ฒญ ๋ฐ์ดํฐ ์ฒ๋ฆฌ, ์ฃผ๋ก ํ์(representation) ๋ฑ๋ก์ ์ฌ์ฉ ๐ CREATE
- PUT : ์์ผ๋ฉด ํ์(representation)์ ์์ฑ, ์์ผ๋ฉด ํ์ฌ ์์(representation)์ผ๋ก ๋์ฒด ๐ UPDATE
- PATCH : ํ์(representation) ๋ถ๋ถ ๋ณ๊ฒฝ ๐ UPDATE
- DELETE : ํ์(representation) ์ญ์ ๐ DELETE
- HEAD : GET๊ณผ ๋์ผํ์ง๋ง ๋ฉ์์ง ๋ถ๋ถ์ ์ ์ธํ๊ณ , header๊น์ง๋ง ๋ฐํ
โ๏ธ GET์ ๋ฐ์ดํฐ๋ฅผ ์กฐํํ๊ธฐ ์ํด์ ์ฌ์ฉํ๋ค.
โ๏ธ GET ๋งค์๋๋ Body๋ฅผ ์ฌ์ฉํ ์ ์์ผ๋, ์ผ๋ฐ์ ์ผ๋ก Body๋ฅผ ์ฌ์ฉํ์ง ์๊ณ ๋ฐ์ดํฐ๋ฅผ query๋ฅผ ํตํด ์ ๋ฌํ๋ค.
โ๏ธ GET์์ฒญ์ ๋ฐ์ ์๋ฒ๋ DB๋ฅผ ํ์ธํด ๋ฐ์ดํฐ๋ฅผ ๋ค์ ํด๋ผ์ด์ธํธ์ ์๋์ ๊ฐ์ด ์๋ตํ๋ค.
โ๏ธ POST๋ body ์์ญ์ ๋ฐ์ดํฐ์ ๋ด์ ํด๋ผ์ด์ธํธ์์ ์๋ฒ๋ก ์ ๋ฌํ๊ธฐ ์ํดํ๋ค.
โ๏ธ ์ผ๋ฐ์ ์ผ๋ก query์ ๋ณด์ฌ์ ธ์๋ ์๋๋ ์ค์ํ ์ ๋ณด๋ body์ ๋ด์ POSTํ์์ผ๋ก ์์ฒญ๋๋ค.
โ๏ธ ์ค์ ๋ก POST๋ง์ผ๋ก๋ ๋ชจ๋ ํ์์ ๋ํด ์ฒ๋ฆฌ๊ฐ ๊ฐ๋ฅํ๋ค. ๋ค๋ง, POST๋ ๋ฐ์ดํฐ ์์ฑ ๋ฐ ํ๋ก์ธ์ค ์ฒ๋ฆฌ์ ์ฃผ๋ก ์ฌ์ฉํ๋ ๊ฒ์ด ๊ถ์ฅ๋๋ค.
โ๏ธ ์๋ฅผ๋ค์ด ์กฐํํ ๋, POST๋ฅผ ์ฌ์ฉํ๋ฉด cashingํ๊ธฐ ์ด๋ ต๊ธฐ ๋๋ฌธ์ ์กฐํ์ ์์ด์๋ GET์ด ๋ ์ ๋ฆฌํ๋ค.
โ๏ธ "/members/" URI์ POST์ ์์ฒญ์ด ๊ณ์ ์์ฑ์ผ๋ก ๋ฏธ๋ฆฌ ์ฝ์๋์ด ์๋ค๋ฉด, ๊ณ์ ์ ์์ฑํ ๋ค ์๋์ ๊ฐ์ด ์๋ต๋ฉ์์ง๋ฅผ ํด๋ผ์ด์ธํธ๋ก ์ ๋ฌํ๋ค. location์ ์์์ด ์์ฑ๋ ๊ฒฝ๋ก๋ค.
โ๏ธ POST๋ก ํด๋ผ์ด์ธํธ์์ ์๋ฒ๋ก ์์ฒญํ ๋, path๋ง ์ง์ ํ๊ณ ์์(resource)์ ์์น๋ ์ง์ ํ์ง ์๋๋ค. ํด๋ผ์ด์ธํธ์์ ์์์ด ์์ค๋ URL(id๊ฐ)์ ๋ชจ๋ฅด๊ธฐ ๋๋ฌธ์ด๋ค. ์ด์ ์๋ฒ๊ฐ ์์ฒญ์ ๋ฐ์ผ๋ฉด ๋ฆฌ์์ค URL๋ฅผ ์์ฑํด์ location๊ฐ์ผ๋ก ํด๋ผ์ด์ธํธ์ ์ ๋ฌํด์ค๋ค. ์ด๋ฅผ ์ปฌ๋ ์ (Collection)์ด๋ผ ํ๋ค.
โ๏ธ PUT์ ๋ฐ์ดํฐ๊ฐ ์์ผ๋ฉด ์์ ํ ๋์ฒดํ๊ณ ์์ผ๋ฉด ์์ฑํฉ๋๋ค. ๋ง์น ํด๋์ ํ์ผ์ด ์์ผ๋ฉด ์๋ก ์์ฑํ๊ณ ์์ผ๋ฉด ๋ฎ์ด์ฐ๋ ๊ฒ๊ณผ ๊ฐ๋ค.
โ๏ธ ๋จ, PUT์ ํด๋ผ์ด์ธํธ์์ ์๋ฒ๋ก ๋ฉ์์ง๋ฅผ ์ ์กํ ๋, ์์(resource) ์์น๋ฅผ ์ด๋ฏธ ์๋ณํ๊ณ URI๋ฅผ ์ง์ ํด์ฃผ์ด์ผ ํ๋ค. ์ด ๋ถ๋ถ์ด PUT๊ณผ POST๋ ์ฐจ์ด๋ค.
โ๏ธ PUT์์ ์์(resource)์ ์์น๋ฅผ ์ง์ ์ง์ ํ๋ค๋ ๊ฒ์ ์ด๋ฏธ ์๊ณ ์๋ ๊ฒฝ์ฐ์ ๊ฐ๋ฅํ๋ค. ์ฆ, ํด๋ผ์ด์ธํธ์์ ์์(resource)์ ์์น(URL)๋ฅผ ์ด๋ฏธ ์๊ณ ๊ด๋ฆฌํ๋ ๊ฐ๋ ์ ์คํ ์ด(Store)๋ผ ํ๋ค.
โ๏ธ PATCH๋ ์์(resource)์ ๋ถ๋ถ ๋ณ๊ฒฝํ๋ค. ๋น์ฐํ ์์์ ์์น๋ฅผ ๋ช ํํ ์์์ผ ํ๋ค.
โ๏ธ ๋จ, ์๋ฒ์์ PATCH ํ์ฉํ์ง ์๋ ๊ฒฝ์ฐ์๋ POST๋ฅผ ์ฌ์ฉํฉ๋๋ค.
โ๏ธ DELETE๋ ์์(resource)๋ฅผ ์ญ์ ํ๋ค. ๋น์ฐํ ์์์ ์์น๋ฅผ ๋ช ํํ ์์์ผ ํ๋ค.
โ๏ธ ์์ ์ด๋ ๋งค์๋ ํธ์ถ์ด ๋ฆฌ์์ค๋ฅผ ๋ณ๊ฒฝ์ ์ ๋ฐํ์ง ์๋๋ค๋ ์๋ฏธ์ด๋ค. GET์ ์กฐํ๋งํ๊ธฐ ๋๋ฌธ์ ์์ ํ์ง๋ง, POST, PUT, PATCH, DELETE๋ ์์ ํ์ง ์๋ค.
โ๏ธ ๋จ, ์์ ์ด๋ ํด๋น ์์(resource)์ด ๋ณํ๋ ๋ณํ์ง ์๋๋ง์ ๊ณ ๋ คํ ์๋ฏธ๋ค. ์ฆ, ๊ณ์ ํธ์ถํด์ ์๋ฒ์ ์ฅ์ ๊ฐ ๋ฐ์ํ๋คํด๋ ์ด๋ ์์ ์ด๋ ํน์ง๊ณผ๋ ๋ฌด๊ดํฉ๋๋ค. ์์๋ง ์์ฒด์ ์ฃผ๋ ์ํฅ๋ง ๊ณ ๋ คํ๊ธฐ ๋๋ฌธ์ด๋ค.
โ๏ธ ๋ฉฑ๋ฑ์ ํ ๋ฒ ํธ์ถํ๋ ๋๋ฒ ํธ์ถํ๋ 100๋ฒ ํธ์ถํ๋ ๊ฒฐ๊ณผ๊ฐ ๋์ผํ ์ ๋ขฐ๋์ ๊ฐ๋ ์ด๋ค.
โ๏ธ ์ฆ, ๋์ผํ ๋ฐ์ดํฐ์ GET, PUT, DELETE๋ฅผ ํ๋ฒํ๋ 100๋ฒํ๋ ์กฐํ, ๋ฎ์ด์์ฐ๊ธฐ, ์ญ์ ์ ๊ฒฐ๊ณผ๋ ๋ณ๋์ด ์๋ค. ์ด์ GET, PUT, DELETE๋ ๋ฉฑ๋ฑํ๋ค.
โ๏ธ ์ด์ ๋ฐํด POST๋ ๋ ๋ฒ ํธ์ถํ๋ฉด ์ค๋ณตํด์ ๋ฐ์ดํฐ๊ฐ ์์ฑ๋๋ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ์์ํค๊ธฐ ๋๋ฌธ์ ๋ฉฑ๋ฑํ์ง ์๋ค๊ณ ํํํ๋ค.
โ๏ธ ์๋ต ๊ฒฐ๊ณผ๋ฅผ ์บ์ฌ์์ ์ฌ์ฉํ ์ ์๋์ง์ ๋ํ ์ฌ๋ถ๋ฅผ ์บ์ฌ ๊ฐ๋ฅ์ด๋ผ ํ๋ค.
โ๏ธ GET, HEAD, POST, PATCH๋ ์บ์๊ฐ๋ฅํ์ง๋ง, ์ค์ ๋ก๋ GET, HEAD ์ ๋๋ง ์บ์๋ก ์ฌ์ฉํ๋ค.