๐ HTTP์ ๋ฉฑ๋ฑ์ฑ · ์์ ์ฑ · ์บ์์ฑ ๐ฏ ์๋ฒฝ ์ดํดํ๊ธฐ
HTTP ๋ฉ์๋์ ์์ฑ
์ฃผ์ HTTP Method์ธ GET / POST / PUT / PATCH / DELETE ๋ ๊ฐ ๋ฉ์๋์ ๋์ ๊ณผ์ ๋ฟ๋ง ์๋๋ผ, ๋ฉ์๋์ ์์ฑ ๋ํ ์ ํ์๊ฐ ์๋ค. ์๋ํ๋ฉด ์ด๋ ํ HTTP ๋ฉ์๋๋ก ์๋ฒ์ ์์ฒญํ๋๋์ ๋ฐ๋ผ API ์ค๊ณ๋ ๋ณต๊ตฌ ๋ฉ์ปค๋์ฆ ์บ์ ์ต์ ํ ๋ฑ, ์ค๊ณ ๋ก์ง์ด ๋ฌ๋ผ์ง ์ ์๊ธฐ ๋๋ฌธ์ด๋ค.
HTTP ๋ฉ์๋์ ์์ฑ์ผ๋ก๋ ํฌ๊ฒ 3 ๊ฐ์ง์ธ ์์ (Safe), ๋ฉฑ๋ฑ(Idempotent), ์บ์ ๊ฐ๋ฅ(Cacheable)์ด ์๋ค. ์ด๋ค์ ํ๋์ฉ ์ดํด๋ณด๋ ์๊ฐ์ ๊ฐ์ ธ๋ณด์.
์์ ์ฑ(Safe)
HTTP ๋ฉ์๋์ ์์ ์ฑ์ด๋ ๋ณด์ ์ทจ์ฝ์ฑ์ ๋งํ๋ ๊ฒ์ด ์๋๋ผ ํธ์ถํด๋ ๋ฆฌ์์ค๊ฐ ๋ณ๊ฒฝ๋์ง ์๋ ์ฑ์ง์ ๋งํ๋ ๊ฒ์ด๋ค.
์ ๋ง ์ฝ๊ฒ ์๊ฐํด์ GET ๋ฉ์๋๋ ๋จ์ํ ๋ฐ์ดํฐ๋ฅผ ์กฐํํ๋ ๊ธฐ๋ฅ์ ์ํํ๊ธฐ ๋๋ฌธ์ ๋ฆฌ์์ค๋ฅผ ๋ณ๊ฒฝ ๋ฐ ์์ ํ์ง ์์ผ๋ ์์ ํ HTTP ๋ฉ์๋์ด๋ค.
๋ฐ๋ฉด์ POST PUT PATCH DELETE ์ ๊ฐ์ ๋ฉ์๋๋ค์ ํธ์ถํ ๊ฒฝ์ฐ ๋ฐ์ดํฐ์ ๋ณ๊ฒฝ์ด ๋ฐ์ํ๊ฑฐ๋, ์๋ฒ์์ ์ญ์ ๋๊ธฐ ๋๋ฌธ์ ์์ ํ์ง ์์ HTTP ๋ฉ์๋๋ผ๊ณ ๋ณผ ์ ์๋ค.
๋ฌผ๋ก ํธ๋ํฝ์ด ๋ชฐ๋ ค ์๋ง์ GET ์์ฒญ์ ์ํด ์๋ฒ๊ฐ ํฐ์ง๊ฒ ๋๋ฉด '์์ ์ฑ' ์ด๋ผ๋ ํน์ฑ์ ๋ถํฉ๋์ง ์๋๋ค๊ณ ์๊ฐํ ์ง๋ ๋ชจ๋ฅด๊ฒ ์ง๋ง, ์ฌ๊ธฐ์ ๋งํ๋ ์์ ์ฑ์, ๋ฆฌ์์ค๋ฅผ ์์ / ์ญ์ ํ์ง ์์ผ๋ฏ๋ก ๋ฐ์ดํฐ์ ์ผ๊ด์ฑ ์ ์ง์ ์์ด ์์ ํ๋ค๋ ์๋ฏธ์ด๋ค.
์ฆ, ๋ฉ์๋๊ฐ ์ ์ฒด์ ์ธ ์์คํ ์ฅ์ ๋ก๋ถํฐ ์์ ํ๋ค๋ ์๋ฏธ๋ฅผ ๊ฐ์ง์ง๋ ์๋๋ค.
๋ฉฑ๋ฑ์ฑ(Idempotent)
๋ฉฑ๋ฑ(ๅช็ญ)์ด๋ผ๋ ๋จ์ด์ ๋ป์ ์ํ์ด๋ ์ ์ฐํ์์ ์ฐ์ฐ์ ์ฌ๋ฌ ๋ฒ ์ ์ฉํ๋๋ผ๋ ๊ฒฐ๊ณผ๊ฐ ๋ฌ๋ผ์ง์ง ์๋ ์ฑ์ง์ ์๋ฏธํ๋ค.
์์ ์ ์๋ฅผ HTTP์ ๋ฉฑ๋ฑ์ฑ(Idempotent)์ ๋์ ํด๋ณด์๋ฉด, ๋ฉฑ๋ฑ์ฑ์ด๋ ์์ฒญ(Request)์ ํ ๋ฒ์ ํธ์ถํ๋ ์ฌ๋ฌ ๋ฒ์ ํธ์ถํ๋ ๊ทธ ๊ฒฐ๊ณผ๊ฐ ๊ฐ์์ ์๋ฏธํ๋ค. ์ฆ, ๋์ผํ ์์ฒญ์ ํ๋ฒ ๋ณด๋ด๋ ๊ฒ๊ณผ ์ฌ๋ฌ๋ฒ ์ฐ์์ผ๋ก ๋ณด๋ด๋ ๊ฒ์ด ๊ฐ์ ํจ๊ณผ๋ฅผ ๊ฐ์ง๊ณ , ์๋ฒ์ ์ํ๋ ๋์ผํ๊ฒ ๋จ์ ๋ ํด๋น HTTP ๋ฉ์๋๊ฐ ๋ฉฑ๋ฑ์ฑ์ ๊ฐ์ง๋ค๊ณ ๋งํ๋ค.
๋ฉฑ๋ฑ์ ๊ฐ๋ ์ ์์ (safe)๊ณผ ํผ๋ํ๊ธฐ ์ฌ์ด๋ฐ,
- HTTP ๋ฉ์๋์ ์์ ์ด ํ ๋ฒ์ ํธ์ถํ๋ ์ฌ๋ฌ ๋ฒ์ ํธ์ถํ๋ ๋ฆฌ์์ค์ ์์ ์ด ๋ฐ์ํ์ง ์๋ ์์ฑ์ด๊ณ ,
- HTTP ๋ฉ์๋์ ๋ฉฑ๋ฑ์ ๋ฆฌ์์ค์ ์์ ์ด ๋ฐ์ํ๋ค๊ณ ํ๋๋ผ๋ ๋ฉ์๋๋ฅผ ์ฌ๋ฌ ๋ฒ ์คํํ ๊ฒฐ๊ณผ๊ฐ ํ ๋ฒ ์คํํ ๊ฒฐ๊ณผ์ ๊ฐ๋ค๋ฉด ๋ง์กฑํ๋ ์์ฑ์ด๋ผ๋ ์ฐจ์ด์ ์ด ์๋ค.
๋ํ ํธ์ถ์ ์คํํ ๊ฒฐ๊ณผ๊ฐ ์๋ฏธํ๋ ๊ฒ์ด ์๋ต ์ํ ์ฝ๋๊ฐ ์๋ ์๋ฒ์ ์ํ๋ผ๋ ์ ๋ ์ ์ํด์ผ ํ๋ค. ์๋ฅผ๋ค์ด ๋๊ฐ์ ์์ฒญ์ ํ์ ๋ ์๋ตํ๋ ์ํ์ฝ๋๊ฐ ๋ค๋ฅด๋๋ผ๋ ์๋ฒ์ ์ํ๊ฐ ๊ฐ์ ์ํ๋ผ๋ฉด ๋ฉฑ๋ฑ์ฑ์ด ์๋ค๊ณ ํ๋จํ๋ ๊ฒ์ด๋ค
HTTP ์คํ์ ๋ช ์๋ ๊ฒ์ ์ํ๋ฉด GET, PUT, DELETE๋ ๋ฉฑ๋ฑ์ฑ์ ๊ฐ์ง๋๋ก, POST์ PATCH๋ ๋ฉฑ๋ฑ์ฑ์ ๊ฐ์ง์ง ์๋๋ก ๊ตฌํํด์ผ ํ๋ค. ๊ทธ ์ด์ ์ ๋ํด์ ํ๋์ฉ ์ดํด๋ณด์.
GET์ ๋ฉฑ๋ฑ (O)
GET์ ๋ฐ์ดํฐ๋ฅผ ํ ๋ฒ์ ์กฐํํ๋ ์ฌ๋ฌ ๋ฒ์ ์กฐํํ๋ ๊ฐ์ ๊ฒฐ๊ณผ๊ฐ ์กฐํ๋๋ฏ๋ก ์์ ๊ณผ ๋ฉฑ๋ฑ์ ๋์์ ๋ง์กฑํ๋ ๋ฉ์๋์ด๋ค.
๋ค์์ GET ๋ฉ์๋๋ก ํธ์ถ๋๋ API์ ๋ํ ๊ฐ๋ตํ ์์์ด๋ค.
- GET /post/1 ์์ฒญ
- ์๋ฒ์์ id๊ฐ์ด 1์ธ ๊ฒ์๊ธ์ ์กฐํ
- ํด๋น ๊ฒ์๊ธ ๋ฐ์ดํฐ๋ฅผ ์๋ต
์์ ๊ฒฝ์ฐ ๊ฐ์ ์์ฒญ์ ์ฌ๋ฌ๋ฒ ๋ณด๋ด๋๋ผ๋ ์๋ฒ์ ์ํ๋ ํญ์ ๊ฐ๊ฒ ๋๋ค.
์ด์ฒ๋ผ GET ๋ฉ์๋๊ฐ ๋ฉฑ๋ฑ์ฑ์ ๊ฐ์ ธ์ผ ํ ์ด์ ๋ ์ง๊ด์ ์ผ๋ก ์ ์ ์๋ค.
๋ฉฑ๋ฑ ์ ์ด์ง ์์ GET์ ์ค๊ณ
ํ์ง๋ง ๋ง์ฝ ๊ฐ๋ฐ์๊ฐ ์กฐํ์ ๊ธฐ๋ฅ์ ์ถ๊ฐํ๋ฉด์, ๋ค์๊ณผ ๊ฐ์ด ๊ฒ์๊ธ์ ์กฐํํ๋ฉด ๋์์ ์กฐํ์๋ ์ฌ๋ฆฌ๋๋ก ๊ตฌํํ๋ฉด ์ด๋ป๊ฒ ๋ ๊น?
- GET /post/1 ์์ฒญ
- ์๋ฒ์์ id๊ฐ์ด 1์ธ ๊ฒ์๊ธ์ ์กฐํ
- ํด๋น ๊ฒ์๊ธ์ ์กฐํ์ ๋ฐ์ดํฐ๋ฅผ 1 ์ฆ๊ฐ
- ํด๋น ๊ฒ์๊ธ ๋ฐ์ดํฐ๋ฅผ ์๋ต
์ด ๊ฒฝ์ฐ, GET ์์ฒญ์ ์ฌ๋ฌ๋ฒ ๋ณด๋ผ ๊ฒฝ์ฐ ์๋ฒ์ ๋ฐ์ดํฐ ์ํ๋ ๋งค๋ฒ ๋ฐ๋๊ฒ ๋ ๊ฒ์ด๋ค.
์ฆ, ์์ GET ์์ฒญ ๋ก์ง์ ๋ฉฑ๋ฑ์ฑ์ ๊ฐ์ง์ง ์๋ ๊ฒ์ด๋ฉฐ, ๊ฐ๋ฐ์๋ HTTP ์คํ์ ๋ถํฉํ์ง ์๊ฒ API๋ฅผ ๊ตฌํํ๋ค๊ณ ๋ณผ ์ ์๋ค.
๋ฐ๋ผ์ GET์ ๋ฉฑ๋ฑ์ฑ์ ๋ง๊ฒ API๋ฅผ ์ค๊ณํ๊ธฐ ์ํด์๋, ์กฐํ์ ์ปฌ๋ผ์ ๊ฐ์ ์ฆ๊ฐ์ํค๋ ์์ฒญ์ PATCH ์์ฒญ์ผ๋ก ๋ฐ๋ก ๋ถ๋ฆฌํ๋ ๊ฒ์ด ์ฌ๋ฐ๋ฅด๋ค.
๋ฉฑ๋ฑํ๋ค๊ณ ํด์ ๊ฒฐ๊ณผ๊ฐ ํญ์ ๊ฐ์๊ฒ์ ์๋
GET์ด ๋ฉฑ๋ฑ์ฑ์ ๋ง์กฑํ๊ธฐ ๋๋ฌธ์, ์ด๋ค ์ํฉ์์๋ ์ฌ๋ฌ ๋ฒ ์์ฒญํ ๊ฒฝ์ฐ ํญ์ ๊ฐ์ ๊ฒฐ๊ณผ๋ฌผ์ ๋ด๋๋ ๋ค๊ณ ํ์ง๋ง, ์ด๋ ์๋ฐํ ๋งํ๋ฉด ํ๋ฆฌ๋ค.
๋ค์๊ณผ ๊ฐ์ ์ํฉ์ ์๊ฐํด๋ณด์.
- A ๊ฐ GET /members/100 ํตํด ๋ฆฌ์์ค๋ฅผ ์กฐํ
- B ๊ฐ PUT /members/100 ํตํด ๋ฆฌ์์ค๋ฅผ ๋ณ๊ฒฝ
- A ๊ฐ GET /members/100 ํตํด ๋ฆฌ์์ค๋ฅผ ๋ค์ ์กฐํ
์์ ์ํฉ์ A ๊ฐ 100๋ฒ์งธ ๋ฉค๋ฒ์ ๋ํ ๋ฆฌ์์ค ์กฐํ์ ๋ํด ์ฌ์์ฒญ์ ํ๊ธฐ ์ง์ , B ๊ฐ ํด๋น ๋ฆฌ์์ค๋ฅผ ๋ณ๊ฒฝํ ๊ฒฝ์ฐ์ด๋ค.
์ด๋๋ A ๊ฐ ๋ฉฑ๋ฑ์ฑ์ด ์๋ GET ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์๋๋ฐ๋ ๋ถ๊ตฌํ๊ณ , ์ค๊ฐ์ B์ ๊ฐ์ ์ผ๋ก ์ธํด ์๋ต๋ฐ๋ ๊ฒฐ๊ณผ๊ฐ์ด ๋ฌ๋ผ์ง๊ฒ ๋๋ค.
๊ทธ๋ผ ๋ฉฑ๋ฑ์ฑ์ด ๊นจ์ง ์๋ชป๋ ์ค๊ณ๊ฐ ์๋๋ ๋ผ๊ณ ๋ฐ๋ฌธ ํ ์ ์๊ฒ ์ง๋ง, ๋ฉฑ๋ฑ์ฑ์ ์ฌ๋ถ๋ ์ธ๋ถ ์์ธ์ผ๋ก ์ธํด ์ค๊ฐ์ ๋ฆฌ์์ค๊ฐ ๋ณ๊ฒฝ๋๋ ๊ฒ์ ๊ณ ๋ คํ์ง ์์ผ๋ฉฐ, ๋ํ ์๋ฒ์ ์ํ ๊ธฐ์ค์ผ๋ก ํ๋จํ๊ธฐ ๋๋ฌธ์ GET์ ๋ฉฑ๋ฑ์ฑ์ ๋ฌธ์ ๊ฐ ์๋ ๊ฒ๋ค.
์๋ฒ์ ์ํ๋ฅผ ๋ฐ๊พผ๊ฑด PUT ๋ฉ์๋์ด์ง GET ๋ฉ์๋๋ ์ถฉ์คํ ์ดํํ๊ธฐ ๋๋ฌธ์ด๋ค.
DELETE์ ๋ฉฑ๋ฑ (O)
GET์ด ๋จ์ ์กฐํ๋ผ๋ฉด, DELETE๋ ๋จ์ ์ญ์ ์ด๋ค. ๋ฐ๋ผ์ DELETE๋ ๋ฉฑ๋ฑ์ฑ์ ๊ฐ์ง๋ค.
DELETE๋ฅผ ์ฒ์ ์์ฒญ ํ๋ฉด, ์๋ฒ์์ ํด๋น ๋ฆฌ์์ค๋ ์ญ์ ๊ฐ ๋๋ค. ์ดํ DELETE๋ฅผ ์ฌ๋ฌ๋ฒ ์์ฒญํ๋๋ผ๋ ํด๋น ๋ฆฌ์์ค๋ ์ญ์ ๋ ์ํ ๊ทธ๋๋ก ์ผ ๊ฒ์ด๋ ์๋ฒ์ ์ํ๋ ๋ณํ์ง ์๋๋ค.
์๋ฒ์์ ์ญ์ ๋์์ด ๋๋ ์๋ฒ์ ์ํ๊ฐ ๋ณ๊ฒฝ๋ ๊ฒ์ด ์๋๋๋ผ๊ณ ์๊ฐํ๊ฒ ์ง๋ง, ๋ค์ํ๋ฒ ๋งํ์ง๋ง ๋ฉฑ๋ฑ์ฑ์ ํ๋ฒ ํธ์ถํ๋ ๋๋ฒ ํธ์ถํ๋ ๊ฒฐ๊ณผ ์ํ๊ฐ ๊ฐ๋ค๋ ์๋ฏธ์ด์ง, ์ ํ ๋ณ๊ฒฝ์ด ์ผ์ด๋์ง ์์์ ์๋ฏธํ๋ ๊ฒ์ ์๋๋ค.
์ฆ, ์ฒ์ ์์ฒญํ๋ ๋ค์ ์ฌ๋ฌ๋ฒ ์์ฒญ์ ํ๋ ์๋ฒ์ ์ํ๋ ๋ฆฌ์์ค๊ฐ ์ญ์ ๋ ์ํ๋ฅผ ๋ฐํํ๊ณ ์ถ๊ฐ์ ์ธ ๋์์ ํ์ง ์์ผ๋ ๋ฉฑ๋ฑํ๋ค๋ ๊ฒ์ด๋ค.
๋ฉฑ๋ฑ ์ ์ด์ง ์์ DELTE์ ์ค๊ณ
์ถ๊ฐ์ ์ผ๋ก ์ด๋ฌํ DELTE์ ๋ฉฑ๋ฑ์ฑ ๋๋ฌธ์, DELETE API๋ฅผ ์ค๊ณํ ๋์๋ ์ ํํ ์๋ณ์๋ฅผ ํตํด ๋ฆฌ์์ค๋ฅผ ์ง์ ํด์ผ ํ๋ค.
์๋ฅผ๋ค์ด ๊ฒ์๊ธ์ ์ญ์ ํ ๋ ์ ํํ ๊ฒ์๊ธ ID ๊ฐ์ด ์๋ last๋ผ๋ ๊ตฌ์กฐ๋ก ์ข ๋ ์ ์ฐํ๊ฒ ์๋ฒ์์ ์ฒ๋ฆฌ๋๋๋ก ๊ตฌํํ์๋ค๊ณ ๊ฐ์ ํ์.
๊ทธ๋ด๋ฏํ ๋ก์ง์ผ๋ก ๋ณด์ด๊ฒ ์ง๋ง, ์ด๋ฐ ๊ฒฝ์ฐ ํด๋น DELETE ์์ฒญ์ ์ฌ๋ฌ๋ฒ ๋ณด๋ด๊ฒ ๋๋ฉด ๋งค๋ฒ ๋ง์ง๋ง ๊ฒ์๊ธ์ ์ญ์ ํ๊ธฐ ๋๋ฌธ์ ๋งค๋ฒ ์๋ฒ์ ์ํ๊ฐ ๋ณํ๊ฒ ๋๋ค.
์ฆ, ๋ฉฑ๋ฑ์ฑ์ ๊ฐ์ง์ง ์๋ ๊ฒ์ด๋ค. ๋ฐ๋ผ์ ์ด๋ฐ ๊ฒฝ์ฐ์๋ DELETE๋ก ๊ตฌํํ๋ ๊ฑด HTTP ์คํ์ ์ณ์ง ์๊ณ , ๋ฉฑ๋ฑ์ฑ์ ๊ฐ์ง์ง ์๋ POST๋ฅผ ์ฐ๋๊ฒ ์คํ์์ผ๋ก ๋ง๋ค.
POST์ ๋ฉฑ๋ฑ (X)
๋ฐ๋๋ก POST ๋ฉ์๋๋ ๋ฉฑ๋ฑ์ ๋ง์กฑํ์ง ์๋๋ค.
POST๋ ์๋ฒ๋ก ๋ฐ์ดํฐ๋ฅผ ์ ์กํ์ฌ ์๋ก์ด ์์์ ์์ฑํ๋ ์ญํ ์ ํ๋ค. ๋ฐ๋ผ์ ์์ฒญ์ ์ฌ๋ฌ๋ฒ ๋ณด๋ด๋ ๊ฒฝ์ฐ ๋งค๋ฒ ์๋ก์ด ์์์ด ์๊ฒจ๋๋ ๊ฒ์ด๋ฉฐ, ์ด๋ ์๋ฒ์ ์ํ๊ฐ ๋ณ๊ฒฝ๋๋ ๊ฒ์ ์๋ฏธํ๋ค.
๋ณต๊ตฌ ๋ฉ์ปค๋์ฆ์ ๋ฐ์ ธ์ผ ํ๋ ๋ฉฑ๋ฑ์ฑ
ํด๋ผ์ด์ธํธ๊ฐ ์๋ฒ์๊ฒ HTTP ๋ฉ์ธ์ง๋ฅผ ์ ์กํ์๋๋ฐ, TIMEOUT ๊ณผ ๊ฐ์ ๋ฌธ์ ๋ค๋ก ์ธํด ์ ์์ ์ธ ์๋ต์ ์ ๋ฌ๋ฐ์ง ๋ชปํ๋ค๊ณ ๊ฐ์ ํด๋ณด์.
์ ์์ ์ธ ์๋ต์ ๋ฐ์ง ๋ชปํ๋ค๋ฉด ๋ค์ ์์ฒญํ๋ฉด ๊ทธ๋ง์ด๋ผ๊ณ ์๊ฐํ๊ฒ ์ง๋ง ์ฌ๊ธฐ์ HTTP์ ๋ฉฑ๋ฑ์ฑ์ ์ ๋ฌด๊ฐ ๋ค์ด๊ฐ๊ฒ ๋๋ค.
์ผ๋ฐ์ ์ผ๋ก GET ์ด๋ DELETE ๊ฐ์ ๋ฉ์๋๋ค์ ์ฌ๋ฌ ๋ฒ ํธ์ถํ์ฌ๋ ์๋ต ๊ฒฐ๊ณผ๋ ๋ณํจ์ด ์๊ธฐ ๋๋ฌธ์, ํต์ ์ฅ์ ์ ๋๊ฐ์ ์์ฒญ์ ์ฌ์ ์กํ๋๋ก ์ค๊ณํด๋ ๋ฌธ์ ๋ ์์ ๊ฒ์ด๋ค.
ํ์ง๋ง POST ์ ๊ฐ์ ๋ฉฑ๋ฑํ์ง ์๊ฒ ์ค๊ณ๋ ๋ฉ์๋๋ค์ ๋๊ฐ์ ์์ฒญ์ ๋ค์ ์ ์กํ ๊ฒฝ์ฐ ๋ฌธ์ ๋ฐ์ ๊ฐ๋ฅ์ฑ ์์ง๊ฐ ์๋ค. ์๋ํ๋ฉด ํต์ ์ฅ์ ์ด์ ๊ฐ ์๋ฒ ์์ฒด๊ฐ ๋ฌธ์ ์ผ์๋ ์๊ณ ์๋๋ฉด ์ธํฐ๋ท ์ ์ด ๋ฌธ์ ์ผ์๋ ์๊ธฐ ๋๋ฌธ์ด๋ค.
๋ง์ผ ์๋ฒ์์๋ ์ ์ ์ฒ๋ฆฌํ๋๋ฐ ์๋ต ๊ณผ์ ์์ ๋คํธ์ํฌ ๋ฌธ์ ๋ก ์ ์์ ์ธ ์๋ต์ ๋ฐ์ง ์์๋ค๋ฉด, POST๋ฅผ ์ฌ์์ฒญ ํด๋ฒ๋ฆฌ๋ฉด ์๋ฒ ์ ์ฅ์์ ์ฒ๋ฆฌ๋ฅผ ํ ๋ฒ ๋ ํ๊ฒ ๋๋ ๊ฒฐ๊ณผ๋ฅผ ๋ณ๊ฒ ๋๋ค.
๋ง์ผ ์ด๊ฒ์ด ๋๊ณผ ๊ด๋ จ๋ ๊ฒฐ์ ์ ๊ฐ์ ์๋น์ค๋ผ๋ฉด ๊ฒฐ์ ๊ฐ ์ค๋ณต์ผ๋ก ๋๋ ํฐ ๋ฌธ์ ๋ก ์ง๊ฒฐ๋๋ค.
๋ฐ๋ผ์ POST ์์ฒญ ๊ฐ์ ๊ฒฝ์ฐ ๋ ํฐ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์๊ธฐ ๋๋ฌธ์ ์์ฒญ์ ๋ ๋ณด๋ด๋ ๊ฒ์ด ์๋ ๋ค๋ฅธ ์กฐ์น๋ฅผ ์ทจํ ์ ์๋๋ก ์ค๊ณํ๋ ๊ฒ์ด ์ ์ ํ ๊ฒ์ด๋ค.
์ด๋ ๊ฒ ๋ณต๊ตฌ ๋งค์ปค๋์ฆ์ ์ฌ์ฉ ๊ฐ๋ฅ ์ฌ๋ถ์ ์์ด์ HTTP์ ๋ฉฑ๋ฑ์ ์ธ ์์ฑ์ ์ค๊ณ์ ์ค์ฌ์ด ๋๊ฒ ๋๋ค.
PUT์ ๋ฉฑ๋ฑ (O)
PUT ๋ฉ์๋๋ ๋์ ๋ฆฌ์์ค๋ฅผ ๋ฎ์ด์์ ๋ณ๊ฒฝํ๊ฑฐ๋, ๋์ ๋ฆฌ์์ค๊ฐ ์๋ค๋ฉด ์๋ก ์ถ๊ฐํ๋ค.
๊ทธ๋์ ๋ง์ผ ๋์ ๋ฆฌ์์ค๊ฐ ์๋ค๋ฉด PUT์ด POST์ ๊ฐ์ ๋์์ ํ๊ฒ ๋๋๋ฐ, ๋ฐ๋ฉด POST๋ ๋งค๋ฒ ์๋ก์ด ์์์ ๋ง๋๋ ๋ฐ๋ฉด, PUT์ ํด๋น ์์์ด ์ด๋ฏธ ์๋ค๋ฉด ๋ฐ์ดํฐ๋ง ๋ฎ์ด์ด๋ค.
๋ฐ๋ผ์ ์์ฒญ์ ํ๋ฒํ๋ ์ฌ๋ฌ๋ฒํ๋ ๊ฒฐ๊ตญ ์๋ฒ์ ์ํ๋ ๊ฐ์์ง๋, PUT์ ๋ฉฑ๋ฑํ๋ค.
๋ฉฑ๋ฑํ๋ค๊ณ ํด์ ๊ฒฐ๊ณผ๊ฐ ํญ์ ๊ฐ์๊ฒ์ ์๋
GET์ ๋ฉฑ๋ฑ ๋ถ๋ถ์์ ์๊ฐํ๋ ๊ฒ ์ฒ๋ผ PUT๋ ์์ธ ์ผ์ด์ค๊ฐ ์๋ค.
PUT ์์ฒญ์ ๋ณด๋๋๋ฐ, ์๋ก์ด ๋ฐ์ดํฐ๋ฅผ ์์ฑํ ๊ฒฝ์ฐ 201(Created) ์ํ์ฝ๋๋ฅผ ์๋ตํ๋ฉฐ, ๊ธฐ์กด ๋ฐ์ดํฐ๋ฅผ ๋ฎ์ด์ด ๊ฒฝ์ฐ 200(OK) ํน์ 204(No Content)๋ฅผ ์๋ตํ๊ฒ ๋๋ค.
์ํ์ฝ๋ | ์ค๋ช |
200 OK | ์์ฒญ์ด ์ฌ๋ฐ๋ฅด๊ฒ ์ํ๋์์ (GET, PUT) |
201 Created | ์๋ฒ๊ฐ ์๋ก์ด ๋ฆฌ์์ค๋ฅผ ์์ฑํ์ (POST, PUT) |
204 No Content | ์๋ตํ ๋ฐ์ดํฐ๊ฐ ์์ (HTTP Body ๊ฐ ์์). (DELETE, PUT) |
๋ฌผ๋ก ๋ค๋ฅธ ์ํ ์ฝ๋๋ฅผ ์๋ตํ๋ค๊ณ ํด์ ๋ฉฑ๋ฑ ํ์ง ์๋ค๋ ๊ฒ์ ๊ฒฐ์ฝ ์๋๋ค. ์๋ฒ์ ์ํ๋ ๋์ผํ๋ฏ๋ก ๋ฉฑ๋ฑ์ฑ์ ๊ฐ์ง๋ค๊ณ ํ ์ ์๋ค.
๋ค๋ง ๋์ผํ ์์ฒญ์ ์ฌ๋ฌ๋ฒ ๋ณด๋ด๋๋ผ๋ ์ํ ์ฝ๋๋ผ๋ ๊ฒฐ๊ณผ๊ฐ์ด ๋ค๋ฅผ์ ์๋ค๋ ์ ๋ง ๊ธฐ์ตํ๋ฉด ๋๋ค.
PATCH์ ๋ฉฑ๋ฑ (O or X)
PUT์ด ๋ฆฌ์์ค ์ ์ฒด ๊ต์ฒด ๋ผ๋ฉด, PATCH๋ ๋ฆฌ์์ค์ ๋ถ๋ถ์ ์ธ ์์ ์ ํ ๋ ์ฌ์ฉ๋๋ค.
PATCH์ ํน์ดํ ์ ์ ๊ธฐ๋ณธ์ ์ผ๋ก ๋ฉฑ๋ฑ์ฑ์ ๊ฐ์ง์ง ์๋ ๋ฉ์๋์ธ๋ฐ, ๊ทธ ๊ตฌํ์ PUT๊ณผ ๋์ผํ ๋ฐฉ์์ผ๋ก ํ ๊ฒฝ์ฐ ๋ฉฑ๋ฑ์ฑ์ ๊ฐ์ง๊ฒ ๋๋ ํน์ฑ์ ์ง๋๊ณ ์๋ค.
์ฆ, PATCH๋ ๋ฉฑ๋ฑํ๊ฒ ์ค๊ณํ ์๋ ์๊ณ , ๋ฉฑ๋ฑํ์ง ์๋๋ก ์ค๊ณํ ์๋ ์๋ค๋ ๋ง์ด๋ค.
์ฌ์ค PUT๊ณผ PATCH ๋ฉ์๋์ ์ง์ง ์ค์ํ ์ฐจ์ด์ ์ ์ ์ฒด ๊ต์ฒด, ์ผ๋ถ ๊ต์ฒด ํ์์ ์ฐจ์ด๊ฐ ์๋๋ผ, PUT ๋ฉ์๋๋ ๋ฐ๋์ ๋ฉฑ๋ฑ์ฑ์ ๋ณด์ฅํ์ง๋ง PATCH ๋ฉ์๋๋ ๋ฉฑ๋ฑ์ฑ์ ๋ณด์ฅํ์ง ์์ ์๋ ์๋ค๋ ๊ฒ์ด๋ค.
PATCH์ ๋ฉฑ๋ฑ ์ ์ธ ์ค๊ณ
PATCH ๋ฉ์๋์ ์์ ํ ๋ฆฌ์์ค์ ์ผ๋ถ๋ถ๋ง ๋ด์์ ๋ณด๋ด๋ ๊ฒฝ์ฐ์๋ ๋ฉฑ๋ฑ์ฑ์ด ๋ณด์ฅ๋๋ค.
ํ๋ฒ ์์ฒญ์ ๋ณด๋ธํ ๊ฐ์ ์์ฒญ์ ์ฌ๋ฌ๋ฒ ํ๋๋ผ๋ ๋ณ๊ฒฝ๋ ๊ฐ์ ๊ฒฐ๊ณผ๊ฐ ๋์ค๊ธฐ ๋๋ฌธ์ด๋ค.
// ๊ธฐ์กด์ ๋ฆฌ์์ค
{
id: 1,
name: "๊น์ฒ ์",
age: 15
}
// ๋ณ๊ฒฝ๋ ๋ฆฌ์์ค
{
id: 1,
name: "๊น์ฒ ์",
age: 20
}
PATCH์ ๋ฉฑ๋ฑ ์ ์ด์ง ์์ ์ค๊ณ
PATCH์ ๋๋ค๋ฅธ ํน์ง์ผ๋ก๋ HTTP ์คํ์ ๊ตฌํ ๋ฐฉ๋ฒ์ ์ ํ์ด ์๋ค๋ ๊ฒ์ด๋ค.
๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ์์ฒ๋ผ ๊ผญ ๋ฐ์ดํฐ๋ฅผ ๋๋ค๋ฅธ ๋ฐ์ดํฐ๋ก '๋์ฒด' ํ๋๋ก ๊ตฌ์ฑํ ํ์๋ ์๋ค.
์๋ฅผ๋ค์ด PATCH์ ๋์์ '์ฆ๊ฐ'๋ฅผ ํตํ ๋ณ๊ฒฝ์ด๋ผ๊ณ ํ๋ฉด ์ํฉ์ด ๋ฌ๋ผ์ง๋ค.
์๋ ์์์ ๊ฒฝ์ฐ ๋์ผํ ์์ฒญ์ ์ฌ๋ฌ๋ฒ ๋ณด๋ด๋ฉด, ๋งค ์์ฒญ๋ง๋ค age๊ฐ 1์ฉ ์ฆ๊ฐํ๋๋ก PATCH api๋ฅผ ์ค๊ณ ํ์๋ค. ์ด๋ด๊ฒฝ์ฐ ๋์ผํ ์์ฒญ์ ์ฌ๋ฌ๋ฒ ํ๋ฉด ํ ์๋ก age์ ๊ฐ์ด ๊ณ์ ๋ฌ๋ผ์งํ ๋, ๋ฉฑ๋ฑ์ฑ์ ๊ฐ์ง์ง ์๋ ๊ฒ์ด๋ค.
// ๊ธฐ์กด์ ๋ฆฌ์์ค
{
id: 1,
name: "๊น์ฒ ์",
age: 15
}
// ๋ณ๊ฒฝ๋ ๋ฆฌ์์ค
{
id: 1,
name: "๊น์ฒ ์",
age: 16
}
์บ์ ๊ฐ๋ฅ์ฑ(Cacheable)
์บ์ ๊ฐ๋ฅ์ฑ์ ์๋ต ๊ฒฐ๊ณผ ๋ฆฌ์์ค๋ฅผ ์บ์ฑํด์ ํจ์จ์ ์ผ๋ก ์ฌ์ฉํ ์ ์๋๊ฐ ์ ๋ํ ์ฌ๋ถ์ด๋ค.
์บ์(Cache)๊ฐ ๊ผญ ์ด์์ฒด์ ๋ ์๋ฒ์๋ง ์๋ ๊ฒ์ด ์๋๋ผ, ๋ธ๋ผ์ฐ์ ์์ฒด๋ ํ๋์ ์ํํธ์จ์ด๋ผ ์บ์ ๊ณต๊ฐ์ ๊ฐ์ง๊ณ ์๋๋ฐ, ํด๋ผ์ด์ธํธ๊ฐ ์๋ฒ์ ํ ๋ฒ ์์ฒญํ๋ ๋ฐ์ดํฐ์ ๋ํด ๋งค ์์ฒญ๋ง๋ค ๋ค์ ์ ์กํ ํ์๊ฐ ์๋๋ก ๋ธ๋ผ์ฐ์ ๊ฐ ์์์ ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ๋ณด๊ดํ๊ณ ์๋ ์ฅ์์ด๋ค.
์ฆ, ์บ์ฑ์ด ๊ฐ๋ฅํ HTTP ๋ฉ์๋๋ ๋น ๋ฅด๊ฒ ๊ฒฐ๊ณผ๊ฐ์ ๋ฐ์ ์ ์๋ค๋ ์๋ฆฌ์ด๋ค.
1. ์ฒ์ ์น์ฌ์ดํธ์ ์ ์ํ ๋ ์๋ฒ๋ก๋ถํฐ ๋ฆฌ์์ค๋ฅผ ๋ชจ๋ ๋ฐ์์จ๋ค
2. ์น์ฌ์ดํธ๋ฅผ ์ฌ๋ฐฉ๋ฌธ ํ ๊ฒฝ์ฐ ์บ์์์ ๋ฆฌ์์ค๋ฅผ ๊ฐ์ ธ์ค๊ธฐ ๋๋ฌธ์ ๋น ๋ฅด๊ฒ ๋ก๋ ๋๋ค.
์์ ํ์์ ๋ณผ์ ์๋ฏ์ด, GET, POST, PATCH ๋ฉ์๋๋ ์คํ ์์ผ๋ก ์บ์๊ฐ ๊ฐ๋ฅํ๋ค.
ํ์ง๋ง ์ค์ ๋ก๋ GET์ด๋ HEAD ์ ๋๋ง ์บ์๋ก ์ด์ฉ์ด ๊ฐ๋ฅํ๊ณ POST ์ PATCH ๋ ์ง์๋์ง ์๋ ๊ฒฝ์ฐ๊ฐ ์ผ๋ฐ์ ์ด๋ผ๊ณ ํ๋ค.
์๋ํ๋ฉด ๋ธ๋ผ์ฐ์ ์ ์บ์๋ฅผ ์ด์ฉํ๋ ค๋ฉด ์๋ณธ ๋ฐ์ดํฐ๊ฐ ๋ณ๊ฒฝ๋์ง ์๊ณ ์ ์ง๋์ด์ผ ํ๋๋ฐ, POST, PUT, DELETE, PATCH ๋ ๊ธฐ๋ณธ์ ์ผ๋ก ๋ฐ์ดํฐ ๋ณ๊ฒฝ์ด ๋๋ ๋ฉ์๋ ์ด๊ธฐ ๋๋ฌธ์, ๋ง์ผ ํธ์ถ๋ก ์ธํด ๋ฐ์ดํฐ๊ฐ ๋ณ๊ฒฝ๋๊ฒ ๋๋ฉด ์๋ณธ ๋ฐ์ดํฐ ๋ํ ๋ณ๊ฒฝ๋๊ธฐ์ด ์บ์ ๋ฐ์ดํฐ ๋ถ์ผ์น ๋ฌธ์ ๊ฐ ์๊ธฐ๊ธฐ ๋๋ฌธ์ด๋ค.
๋ฐ๋ฉด GET์ ๋ฑ URI๋ง ํค๋ก ์ก๊ณ ์บ์ํ๋ฉด ๋์ ๊ฐ๋จํ๋ค.
๋ฐ๋ผ์, GET HEAD ๋ฉ์๋๋ ์บ์๊ฐ ๊ฐ๋ฅํ๊ธฐ ๋๋ฌธ์ ๋ธ๋ผ์ฐ์ ์์ ๋ฆฌ์์ค๋ฅผ ์์๋ก ๋ณด๊ดํ ์ ์๊ณ , ๋๋จธ์ง ๋ฉ์๋๋ค์ ๊ตฌํ์ ๋ณต์ก์ฑ ํน์ ์ ์ง์ ์ด๋ ค์ ๋๋ฌธ์ ์บ์๋ฅผ ์ด์ฉํ์ง ์๋๋ค๊ณ ์๊ฐํ๋ฉด ๋๋ค.
# ์ฐธ๊ณ ์๋ฃ
๋ชจ๋ ๊ฐ๋ฐ์๋ฅผ ์ํ HTTP ์น ๊ธฐ๋ณธ ์ง์ - ๊น์ํ
https://velog.io/@cataiden/http-method-properties
https://www.section.io/engineering-education/understanding-browser-caching/