HTTP #5 ์์ฒญ ๋ฉ์๋
by JiwonDev# HTTP URI๋ฅผ ์ด์ฉํ์ฌ ๋ฐ์ดํฐ๋ฅผ ๋ฐ์์๋ณด์
๋จ์ํ๊ฒ ์๊ฐํ๋ฉด ์๋์ ๊ฐ์ด ๋ง๋ค ์ ์๋ค. ์ด๊ฒ์ด ๊ณผ์ฐ ์ข์ URI ์ค๊ณ์ผ๊น?
# Resource์ ์๋ฏธ๋ฅผ ๋ด์์ผํ๋ค.
URI๋ ๋ฆฌ์์ค๋ฅผ ๋ํํ๋ ์๋ณ์ (Uniform Resource Identifier)์ด๋ค.
- ์ฐ๋ฆฌ๊ฐ ํ์ํ ๊ฑด Member๋ผ๋ ๋ฆฌ์์ค์ด๋ค.
- ์์ ๊ฐ์ด ์ค๊ณํ๋ฉด update, read, delete์ ๋ฐ๋ผ ๊ฐ์ ๋ฆฌ์์ค๋ฅผ ์กฐํํ๋๋ฐ ๋ค๋ฅธ URI๋ฅผ ์ฌ์ฉํด์ผํ๋ค.
- ์ด๋ ์ฌ์ฉํ๋๋ฐ์๋, API ์๋ฒ๋ฅผ ๊ฐ๋ฐํ๋๋ฐ์๋ ์ค๊ณํ๊ธฐ ์ด๋ ค์์ง๋ค.
ํ์ง๋ง ๋ชจ๋ ์์ฒญ์ [/member] ๋ผ๊ณ ๋ง ์ ๋ฌํ๊ฒ ๋๋ค๋ฉด, ์ด๋ป๊ฒ ์๋ฏธ๋ฅผ ๊ตฌ๋ถํด์ ์ ๋ฌํ ์ ์์๊น?
โก HTTP ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์. ๋ฆฌ์์ค์ ํ์๋ฅผ ๋ถ๋ฆฌํ์.
# HTTP ๋ฉ์๋์ ์ข ๋ฅ
์ฐ๋ฆฌ๋ ์์ ๊ธ์์ HTTP ์์ฒญ ๋ฉ์์ง์ ์์๋ผ์ธ์ ๋ฉ์๋์ ์ข ๋ฅ๋ฅผ ํจ๊ป ๋ณด๋ธ๋ค๊ณ ๋ฐฐ์ ๋ค.
HTTP ์คํ์์ ์ ๊ณตํ๋ ๋ฉ์๋๋ ๋ค์๊ณผ ๊ฐ๋ค.
# GET๊ณผ POST์ ์ฐจ์ด
๊ธฐ์ตํ์. GET์ ๋ฆฌ์์ค ์์ฒญ์, POST๋ ๋ฆฌ์์ค ์ฒ๋ฆฌ๋ฅผ ์๋ฏธํ๋ค.
โก [POST == ๋จ์ํ ๋ฑ๋ก, ๊ฐฑ์ ์ ์ํ ๊ธฐ๋ฅ]์ด ์๋๋ค! ๋ ๋์ ์๋ฏธ๋ก ์ฌ์ฉ๋๋ค.
- @GET - HTTP Header(=URI)์ ํ์ํ ํ๋ผ๋ฏธํฐ, ์์ฒญ ๋ฐ์ดํฐ๋ฅผ ์ ์ด์ ๋ณด๋ด๋ ๋ฐฉ์์ด๋ค.
- @POST - ์์ฒญ ๋ฐ์ดํฐ๋ฅผ Body์ ๋ฃ์ด ๋ณด๋ด๋ ๋ฐฉ์์ด๋ค. ์์ฒญ ๋ฐ์ดํฐ๋ฅผ ์จ๊ธธ ์ ์๋ค.
@ POST๊ฐ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๋ค๋๊ฒ ๋ฌด์จ๋ง์ด์ฃ ?
- ์๋ก์ด ๋ฆฌ์์ค ์์ฑ, ๋ฑ๋ก
- ์ปจํธ๋กค URI, ์์ฒญ ๋ฐ์ดํฐ ์ฒ๋ฆฌ (๊ฒฐ์ -> ๋ฐฐ๋ฌ์์ -> ๋ฐฐ๋ฌ์๋ฃ) ์ฒ๋ผ ์๋น์ค์ ํ๋ก์ธ์ค์ ์ํ๊ฐ ๋ณ๊ฒฝ๋๋ ๊ฒฝ์ฐ
- ๋ค๋ฅธ ๋ฉ์๋๋ก ๋์ฒดํ๊ธฐ ์ ๋งคํ ๊ฒฝ์ฐ :: POST ์ฌ์ฉ
โก ex1) JSON์ผ๋ก ์์ฒญ ๋ฐ์ดํฐ๋ฅผ ๋๊ฒจ์ผํ๋๋ฐ, GET์ผ๋ก ์ฒ๋ฆฌํ ์ ์๋ ๊ฒฝ์ฐ
โก ex2) PATCH๋ฅผ ์ฌ์ฉํด์ผ ํ๋๋ฐ ์๋ฒ์์ ์ง์ํด์ฃผ์ง ์๋ ๊ฒฝ์ฐ
# PUT, PATCH, DELETE
- @PUT ์ ๋ฆฌ์์ค๋ฅผ ํต์ผ๋ก ๋์ฒดํ๋ค. ์ฆ ์์ผ๋ฉด ๋์ฒดํ๊ณ ์์ผ๋ฉด ์์ฑํ๋ค.
โก ์๋ฐ์ map.put(key,value)์ ๊ฐ์ ์๋ฏธ๋ค.
์ฆ PUT์ ๊ธฐ์กด ๋ฆฌ์์ค๋ฅผ ์ญ์ ํ๊ณ ๋ฃ๋๊ฑฐ๋ผ, ๋ฆฌ์์ค์ ์ผ๋ถ๋ง ์ ๋ฌํ๋ฉด ์๋๋ค.
๊ทธ ์ธ ๋ถ๋ถ์ ์ผ๋ก ๋ณ๊ฒฝํ๊ณ ์ถ๋ค๋ฉด @PATCH๋ฅผ, ๋ฆฌ์์ค๋ฅผ ์ ๊ฑฐํ๊ณ ์ถ๋ค๋ฉด @DELETE๋ฅผ ์ฌ์ฉํ๋ค.
@ POST์ PUT์ ์ฐจ์ด
PUT์ ํด๋ผ์ด์ธํธ๊ฐ ๋ฆฌ์์ค๋ฅผ ์๋ณํ๋ค. ํน์ ๋ฆฌ์์ค๋ฅผ ๋์ฒดํ๋ ๋ฉ์๋์ด๊ธฐ ๋๋ฌธ์ด๋ค.
# HTTP ๋ฉ์๋์ ์์ฑ Safe, Idempotent, Cacheable
๊ทธ๋ฅ POST๋ก ๋ชจ๋ ์์ฒญ์ ๋ค ์ฒ๋ฆฌํด๋ ์๊ด์์ ๊ฒ ๊ฐ์๋ฐ, ์ด๋ ๊ฒ ๋๋๋ฐ์๋ ์ด์ ๊ฐ ์๋ค.
๊ฐ ๋ฉ์๋๋ณ๋ก ํน์ง์ด ๋ค๋ฅด๊ธฐ ๋๋ฌธ์ด๋ค.
@ ๋ฉ์๋์ ์์ (Safe)
ํธ์ถํด๋ ๋ฆฌ์์ค๊ฐ ๋ณ๊ฒฝ๋์ง ์๋ ์์ ์ฑ์ ์๋ฏธํ๋ค.
GET์ ์์ ํ๋ค. ํ์ง๋ง ๋ณ๊ฒฝ์ด ์ผ์ด๋๋ POST, PUT, DELETE ๊ฐ์ ๋ฉ์๋๋ ์์ ํ์ง ์๋ค.
โก ๋ค๋ง GET๋ ๋ฏธ์น๋ฏ์ด ํธ์ถํด์ ์๋ฒ ์ฅ์ ๋ฅผ ์ผ์ผํฌ ์ ์์ง๋ง, ์ฌ๊ธฐ์ ์์ ์ '๋ฆฌ์์ค์ ์์ '์ ์๋ฏธํ๋ค.
@ ๋ฉ์๋์ ๋ฉฑ๋ฑ (Idempotent, ์ฌ๋ฌ๋ฒ ํธ์ถํด๋ ๊ฒฐ๊ณผ๊ฐ ๊ฐ์๊ฐ?)
๋ฉฑ๋ฑ์ด๋ผ๋ ์ด๋ ค์ด ๋ง์ $ f(f(x)) = f(x) $ ๋ผ๋ ์ํ์ ์ธ ์ฉ์ด์์ ๋์๋ค.
์ฆ GET, PUT, DELETE ์ฒ๋ผ ํ ์ฌ์ฉ์๊ฐ ๋ช ๋ฒ์ ํธ์ถํ๋๋ผ๋ ๊ฒฐ๊ณผ๊ฐ ๊ฐ์ ๋ฉ์๋๋ฅผ ์๋ฏธํ๋ค.
โก ๋ฌผ๋ก ์ฌ์์ฒญํ๋ ์ค๊ฐ์ ๋ค๋ฅธ ๊ณณ์์ ๋ฆฌ์์ค๊ฐ ๋ณ๊ฒฝ๋์ด ๋ฉฑ๋ฑ์ด ๊นจ์ง ์ ์์ง๋ง, ์ด๋ ์ธ๋ถ์์ธ์ด๋ ์ ์ธํ๋ค.
@ ๋ฉ์๋์ ์บ์๊ฐ๋ฅ (Cacheable)
์๋ต ๊ฒฐ๊ณผ๋ฅผ ๋งค๋ฒ ์๋ก ๋ฐ์์ค์ง ์๊ณ , ์ค๊ฐ์์ ์บ์ํด์ ์ฌ์ฌ์ฉํ ์ ์๋๊ฐ?
โก ๋ณดํต GET๋ง ์บ์๊ธฐ๋ฅ์ ๋ง๋ค์ด ์ฌ์ฉํ๋ค.
'๐๊ธฐ๋ณธ ์ง์ > ์น ๊ธฐ๋ณธ์ง์' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
HTTP #7 ์ํ์ฝ๋ (200,300,400,500) (1) | 2021.09.06 |
---|---|
HTTP #6 ๊ธฐ๋ณธ์ ์ธ API ์ค๊ณ (0) | 2021.09.06 |
HTTP #4 ํน์ง๊ณผ ๋ฉ์์ง ๊ตฌ์กฐ (0) | 2021.07.18 |
HTTP #3 URI์ ์น ๋ธ๋ผ์ฐ์ ์์ฒญํ๋ฆ (0) | 2021.07.17 |
HTTP #2 ์ธํฐ๋ท ๋คํธ์ํฌ์ ์ดํด (0) | 2021.07.17 |
๋ธ๋ก๊ทธ์ ์ ๋ณด
JiwonDev
JiwonDev