-
[HTTP] HTTP ๋ฉ์๋์ ์ข ๋ฅ(GET, POST, PUT, PATCH, DELETE)์ ์์ฑHTTP 2023. 7. 10. 04:48728x90
๐ท HTTP ์ค๊ณํด๋ณด๊ธฐ
์๊ตฌ์ฌํญ
ํ์ ์ ๋ณด ๊ด๋ฆฌ API๋ฅผ ๋ง๋ค์ด๋ผ.
• ํ์ ๋ชฉ๋ก ์กฐํ
• ํ์ ์กฐํ
• ํ์ ๋ฑ๋ก
• ํ์ ์์
• ํ์ ์ญ์ ๐๐
API URI ์ค๊ณ
URI(Uniform Resource Identifier)
• ํ์ ๋ชฉ๋ก ์กฐํ /read-member-list
• ํ์ ์กฐํ /read-member-by-id
• ํ์ ๋ฑ๋ก /create-member
• ํ์ ์์ /update-member
• ํ์ ์ญ์ /delete-member๊ฐ ๊ธฐ๋ฅ์ ์ ์ ์๋๋ก URI์ ์ด๋ฐ์์ผ๋ก ๋ง๋ ๋ค๋ฉด ๊ณผ์ฐ ์ข์ ์ค๊ณ์ผ๊น?
โ์ค๊ณ์ ๊ฐ์ฅ ์ค์ํ๊ฑด ๋ฆฌ์์ค ์๋ณ์ด๋คโ
๐ป API URI ๊ณ ๋ฏผ
• ๋ฆฌ์์ค์ ์๋ฏธ๋ ๋ญ๊น?
- ํ์์ ๋ฑ๋กํ๊ณ ์์ ํ๊ณ ์กฐํํ๋๊ฒ ๋ฆฌ์์ค๊ฐ ์๋๋ค!
- ์) ๋ฏธ๋ค๋์ ์บ๋ผ -> ๋ฏธ๋ค๋์ด ๋ฆฌ์์ค
• ํ์์กฐํ๊ฐ ์๋ ํ์์ด๋ผ๋ ๊ฐ๋ ์์ฒด๊ฐ ๋ฐ๋ก ๋ฆฌ์์ค๋ค.
• ๋ฆฌ์์ค๋ฅผ ์ด๋ป๊ฒ ์๋ณํ๋๊ฒ ์ข์๊น?
• ํ์์ ๋ฑ๋กํ๊ณ ์์ ํ๊ณ ์กฐํํ๋ ๊ฒ์ ๋ชจ๋ ๋ฐฐ์ ํด๋ณธ๋ค.
• ํ์์ด๋ผ๋ ๋ฆฌ์์ค๋ง ์๋ณํ๋ฉด ๋๋ค. -> ํ์ ๋ฆฌ์์ค๋ฅผ URI์ ๋งคํํ๋ค๐ฝ๐ฝ๐ฝ
๐ ์์
• ํ์ ๋ชฉ๋ก ์กฐํ /members
• ํ์ ์กฐํ /members/{id}
• ํ์ ๋ฑ๋ก /members/{id}
• ํ์ ์์ /members/{id}
• ํ์ ์ญ์ /members/{id}
๋๋จธ์ง ์กฐํ, ๋ฑ๋ก, ์์ , ์ญ์ ๋ฅผ ์ด๋ป๊ฒ ๊ตฌ๋ถํ ๊ฒ์ธ๊ฐ?
• ์ฐธ๊ณ : ๊ณ์ธต ๊ตฌ์กฐ์ ์์๋ฅผ ์ปฌ๋ ์ ์ผ๋ก ๋ณด๊ณ ๋ณต์๋จ์ด ์ฌ์ฉ ๊ถ์ฅ(member -> members)
๐ป ๋ฆฌ์์ค์ ํ์๋ฅผ ๋ถ๋ฆฌํ๊ธฐ
๊ฐ์ฅ ์ค์ํ ๊ฒ์ ๋ฆฌ์์ค๋ฅผ ์๋ณํ๋ ๊ฒ
• URI๋ ๋ฆฌ์์ค๋ง ์๋ณํจ!
• ๋ฆฌ์์ค์ ํด๋น ๋ฆฌ์์ค๋ฅผ ๋์์ผ๋ก ํ๋ ํ์์ ๋ถ๋ฆฌ
- ๋ฆฌ์์ค: ํ์
- ํ์: ์กฐํ, ๋ฑ๋ก, ์ญ์ , ๋ณ๊ฒฝ
• ๋ฆฌ์์ค๋ ๋ช ์ฌ, ํ์๋ ๋์ฌ (๋ฏธ๋ค๋์ ์บ๋ผ)
• ํ์(๋ฉ์๋)๋ HTTP ๋ฉ์๋๋ฅผ ํตํด์ ์ฒ๋ฆฌํ๋ค.
๐ธHTTP ๋ฉ์๋
: ํด๋ผ์ด์ธํธ๊ฐ ์๋ฒ์ ์์ฒญํ ๋ ๊ธฐ๋ํ๋ ํ๋์ด๋ค.
<HTTP ๋ฉ์๋ ์ข ๋ฅ>
• GET: ๋ฆฌ์์ค ์กฐํ
• POST: ์์ฒญ ๋ฐ์ดํฐ ์ฒ๋ฆฌ, ์ฃผ๋ก ๋ฑ๋ก์ ์ฌ์ฉ
• PUT: ํด๋น ๋ฆฌ์์ค๊ฐ ์์ผ๋ฉด ์์ฑ, ์์ผ๋ฉด ๋์ฒด๋ฅผ ์งํํจ
• PATCH: ๋ฆฌ์์ค ๋ถ๋ถ ๋ณ๊ฒฝ
• DELETE: ๋ฆฌ์์ค ์ญ์
๐ท ๋ฉ์๋ ์ข ๋ฅ
๐ GET
๋ฆฌ์์ค ์กฐํ
• ์๋ฒ์ ์ ๋ฌํ๊ณ ์ถ์ ๋ฐ์ดํฐ๋ query(์ฟผ๋ฆฌ ํ๋ผ๋ฏธํฐ, ์ฟผ๋ฆฌ ์คํธ๋ง)๋ฅผ ํตํด์ ์ ๋ฌ
• ๋ฉ์์ง ๋ฐ๋๋ฅผ ์ฌ์ฉํด์ ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌํ ์ ์์ง๋ง, ์ง์ํ์ง ์๋ ๊ณณ์ด ๋ง์์ ๊ถ์ฅํ์ง
์์๐ ์์
ํด๋ผ์ด์ธํธ๊ฐ ์์ ์ ์์ฒญํจ
์๋ฒ์์ GET์ ๋ณด๊ณ ์๋ต๋ฐ์ดํฐ๋ฅผ ์ ๋ฌํจ
๐ POST
• ์์ฒญ ๋ฐ์ดํฐ ์ฒ๋ฆฌ
• ๋ฉ์์ง ๋ฐ๋๋ฅผ ํตํด ์๋ฒ๋ก ์์ฒญ ๋ฐ์ดํฐ ์ ๋ฌ
• ์๋ฒ๋ ์์ฒญ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌ
• ๋ฉ์์ง ๋ฐ๋๋ฅผ ํตํด ๋ค์ด์จ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๋ ๋ชจ๋ ๊ธฐ๋ฅ์ ์ํํ๋ค.
• ์ฃผ๋ก ์ ๋ฌ๋ ๋ฐ์ดํฐ๋ก ์ ๊ท ๋ฆฌ์์ค ๋ฑ๋ก, ํ๋ก์ธ์ค ์ฒ๋ฆฌ์ ์ฌ์ฉ์ฃผ๋ก ๋ฑ๋ก์ ์ฌ์ฉ๋จ
์๋ฒ์์ ์์ฒญ์ ๋ด์์จ ๋ฐ์ดํฐ์ HTTP์ ๋ด์ฉ์ ํ์ธํ์ฌ ์์ ์ ์ฒ๋ฆฌํ๋ค.
๐ป POST๊ฐ ์์ฒญ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๋ ๋ฐฉ๋ฒ
POST๋ ์ฌ๋ฌ๊ฐ์ง์ ๋ฐ์ดํฐ ์ฒ๋ฆฌ๋ฐฉ์์ด ์๋ค.
• ์ ์: POST ๋ฉ์๋๋ ๋์ ๋ฆฌ์์ค๊ฐ ๋ฆฌ์์ค์ ๊ณ ์ ํ ์๋ฏธ ์ฒด๊ณ์ ๋ฐ๋ผ ์์ฒญ์ ํฌํจ ๋ ํํ์ ์ฒ๋ฆฌํ๋๋ก ์์ฒญํฉ๋๋ค. (๊ตฌ๊ธ ๋ฒ์ญ)
• ex)
• HTML ์์์ ์ ๋ ฅ ๋ ํ๋์ ๊ฐ์ ๋ฐ์ดํฐ ๋ธ๋ก์ ๋ฐ์ดํฐ ์ฒ๋ฆฌ ํ๋ก์ธ์ค์ ์ ๊ณต
• ์) HTML FORM์ ์ ๋ ฅํ ์ ๋ณด๋ก ํ์ ๊ฐ์ , ์ฃผ๋ฌธ ๋ฑ์์ ์ฌ์ฉ
• ๊ฒ์ํ, ๋ด์ค ๊ทธ๋ฃน, ๋ฉ์ผ๋ง ๋ฆฌ์คํธ, ๋ธ๋ก๊ทธ ๋๋ ์ ์ฌํ ๊ธฐ์ฌ ๊ทธ๋ฃน์ ๋ฉ์์ง ๊ฒ์
• ์) ๊ฒ์ํ ๊ธ์ฐ๊ธฐ, ๋๊ธ ๋ฌ๊ธฐ
• ์๋ฒ๊ฐ ์์ง ์๋ณํ์ง ์์ ์ ๋ฆฌ์์ค ์์ฑ
• ์) ์ ๊ท ์ฃผ๋ฌธ ์์ฑ
• ๊ธฐ์กด ์์์ ๋ฐ์ดํฐ ์ถ๊ฐ
• ์) ํ ๋ฌธ์ ๋์ ๋ด์ฉ ์ถ๊ฐํ๊ธฐ
์ฆ, ์ ํด์ง๊ฒ ์๊ธฐ ๋๋ฌธ์ URI์ POST ์์ฒญ์ด ์ค๋ฉด ์์ฒญ ๋ฐ์ดํฐ๋ฅผ ์ด๋ป๊ฒ ์ฒ๋ฆฌํ ์ง ๋ฆฌ์์ค๋ง๋ค ๋ฐ๋ก ์ ํด์ผ ํ๋ค.๐ ์ ๋ฆฌ
1. ์ฃผ๋ก ์ ๋ฆฌ์์ค ์์ฑ(๋ฑ๋ก)
• ์๋ฒ๊ฐ ์์ง ์๋ณํ์ง ์์ ์ ๋ฆฌ์์ค ์์ฑ
2. ์์ฒญ ๋ฐ์ดํฐ ์ฒ๋ฆฌ
• ๋จ์ํ ๋ฐ์ดํฐ๋ฅผ ์์ฑํ๊ฑฐ๋, ๋ณ๊ฒฝํ๋ ๊ฒ์ ๋์ด์ ํ๋ก์ธ์ค๋ฅผ ์ฒ๋ฆฌํด์ผ ํ๋ ๊ฒฝ์ฐ
• ์) ์ฃผ๋ฌธ์์ ๊ฒฐ์ ์๋ฃ -> ๋ฐฐ๋ฌ์์ -> ๋ฐฐ๋ฌ์๋ฃ ์ฒ๋ผ ๋จ์ํ ๊ฐ ๋ณ๊ฒฝ์ ๋์ด ํ๋ก์ธ์ค์ ์ํ๊ฐ ๋ณ๊ฒฝ๋๋ ๊ฒฝ์ฐ
• POST์ ๊ฒฐ๊ณผ๋ก ์๋ก์ด ๋ฆฌ์์ค๊ฐ ์์ฑ๋์ง ์์ ์๋ ์์
• ์) POST /orders/{orderId}/start-delivery (์ปจํธ๋กค URI)๋ก ๊ตฌํํด์ผํ๋ ์ํฉ๋ ์๋ค.
3. ๋ค๋ฅธ ๋ฉ์๋๋ก ์ฒ๋ฆฌํ๊ธฐ ์ ๋งคํ ๊ฒฝ์ฐ
• ์) JSON์ผ๋ก ์กฐํ ๋ฐ์ดํฐ๋ฅผ ๋๊ฒจ์ผ ํ๋๋ฐ, GET ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๊ธฐ ์ด๋ ค์ด ๊ฒฝ์ฐ
• ์ ๋งคํ๋ฉด POST๋ฅผ ์ฌ์ฉํจ
๐ PUT
• ๋ฆฌ์์ค๋ฅผ ๋์ฒดํจ
• ๋ฆฌ์์ค๊ฐ ์์ผ๋ฉด ์์ ํ ๋์ฒด, ์์ผ๋ฉด ์์ฑ(๋ฎ์ด์ฐ๊ธฐ)
• ์ค์! ํด๋ผ์ด์ธํธ๊ฐ ๋ฆฌ์์ค์ ์์น๋ฅผ ์ ํํ ์๊ณ URI ์ง์ ํ๋ค๋ฆฌ์์ค๋ฅผ ์์ ํ ๋์ฒดํ๋ค๋๊ฒ ์ด๋ค ์๋ฏธ์ผ๊น?
๊ธฐ์กด์ ์ ์ฅ๋๊ฒ๊ณผ ํ๋์๊ฐ ๋ค๋ฅด๋ ์์ ํ ๋์ฒด๋์ด ๋ฎ์ด์ฐ๊ธฐ๊ฐ ๋จ
๋ถ๋ถ๋ณ๊ฒฝ์ ์ํ ๋๋ PATCH๋ฅผ ์ฌ์ฉํ๋ค.
๐ PATCH
• ๋ฆฌ์์ค ๋ถ๋ถ ๋ณ๊ฒฝ
๐ DELETE
• ๋ฆฌ์์ค ์ ๊ฑฐ
๐ท ๋ฉ์๋์ ์์ฑ
๐ธ 1. ์์ (Safe)
• ํธ์ถํด๋ ๋ฆฌ์์ค๋ฅผ ๋ณ๊ฒฝํ์ง ์๋๋ค.
Q: ๊ทธ๋๋ ๊ณ์ ํธ์ถํด์, ๋ก๊ทธ ๊ฐ์๊ฒ ์์ฌ์ ์ฅ์ ๊ฐ ๋ฐ์ํ๋ฉด์?
A: ์์ ์ ํด๋น ๋ฆฌ์์ค๋ง ๊ณ ๋ คํ๋ค. ๊ทธ๋ฐ ๋ถ๋ถ๊น์ง ๊ณ ๋ คํ์ง ์๋๋คGET์ ๋จ์ํ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ค๋๊ฑฐ๋ผ ์์ ํจ
๐ธ 2. ๋ฉฑ๋ฑ(Idempotent)
f(f(x)) = f(x)
ํ ๋ฒ ํธ์ถํ๋ ๋ ๋ฒ ํธ์ถํ๋ 100๋ฒ ํธ์ถํ๋ ๊ฒฐ๊ณผ๊ฐ ๋๊ฐ๋ค.
• ๋ฉฑ๋ฑ ๋ฉ์๋
• GET: ํ ๋ฒ ์กฐํํ๋ , ๋ ๋ฒ ์กฐํํ๋ ๊ฐ์ ๊ฒฐ๊ณผ๊ฐ ์กฐํ๋๋ค.
• PUT: ๊ฒฐ๊ณผ๋ฅผ ๋์ฒดํ๋ค. ๋ฐ๋ผ์ ๊ฐ์ ์์ฒญ์ ์ฌ๋ฌ๋ฒ ํด๋ ์ต์ข ๊ฒฐ๊ณผ๋ ๊ฐ๋ค.
• DELETE: ๊ฒฐ๊ณผ๋ฅผ ์ญ์ ํ๋ค. ๊ฐ์ ์์ฒญ์ ์ฌ๋ฌ๋ฒ ํด๋ ์ญ์ ๋ ๊ฒฐ๊ณผ๋ ๋๊ฐ๋ค.
• POST: ๋ฉฑ๋ฑ์ด ์๋๋ค! ๋ ๋ฒ ํธ์ถํ๋ฉด ๊ฐ์ ๊ฒฐ์ ๊ฐ ์ค๋ณตํด์ ๋ฐ์ํ ์ ์๋คํ์ฉ
• ์๋ ๋ณต๊ตฌ ๋ฉ์ปค๋์ฆ
• ์๋ฒ๊ฐ TIMEOUT ๋ฑ์ผ๋ก ์ ์ ์๋ต์ ๋ชป์ฃผ์์ ๋, ํด๋ผ์ด์ธํธ๊ฐ ๊ฐ์ ์์ฒญ์ ๋ค์ ํด๋ ๋๋๊ฐ์ ํ๋จ ๊ทผ๊ฑฐ๊ฐ ๋จ= ๋๊ฐ์ ์์ ์ ๋ฐ๋ณตํด๋ ๊ฒฐ๊ณผ๊ฐ ๋ฌ๋ผ์ง์ง ์์ผ๋๊น
๐ธ 3. ์บ์๊ฐ๋ฅ(Cacheable)
• ์๋ต ๊ฒฐ๊ณผ ๋ฆฌ์์ค๋ฅผ ์บ์ํด์ ์ฌ์ฉํด๋ ๋๋๊ฐ?
• GET, HEAD, POST, PATCH ์บ์๊ฐ๋ฅ
• ์ค์ ๋ก๋ GET, HEAD ์ ๋๋ง ์บ์๋ก ์ฌ์ฉ
• POST, PATCH๋ ๋ณธ๋ฌธ ๋ด์ฉ๊น์ง ์บ์ ํค๋ก ๊ณ ๋ คํด์ผ ํ๋๋ฐ, ๊ตฌํ์ด ์ฝ์ง ์์728x90'HTTP' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[HTTP] ๋น ์ฐ๊ฒฐ์ฑ(connectionless), HTTP ๋ฉ์ธ์ง (0) 2023.07.10 [HTTP] HTTP, ํด๋ผ์ด์ธํธ ์๋ฒ ๊ตฌ์กฐ, StateFul, Stateless (0) 2023.07.10 [HTTP] URI, URN, URL์ ์น ๋ธ๋ผ์ฐ์ ์์ฒญ์ ํ๋ฆ (0) 2023.07.10 [HTTP] ์ธํฐ๋ท ๋คํธ์ํฌ (IP, TCP, UDP, PORT, DNS)์ ๊ฐ๋ ๊ณผ ์์ (0) 2023.07.09