[HTTP] 4.HTTP ๋ฉ์๋
1. HTTP API ๋ง๋ค๊ธฐ
<ํ์ ์ ๋ณด ๊ด๋ฆฌ API ๋ง๋ค๊ธฐ>
[์๊ตฌ์ฌํญ]
- ํ์ ๋ชฉ๋ก ์กฐํ
- ํ์ ์กฐํ
- ํ์ ๋ฑ๋ก
- ํ์ ์์
- ํ์ ์ญ์
[URI]
- ํ์ ๋ชฉ๋ก ์กฐํ /read-member-list
- ํ์ ์กฐํ /read-member-by-id
- ํ์ ๋ฑ๋ก /create-member
- ํ์ ์์ /update-member
- ํ์ ์ญ์ /delete-member
์ด๊ฒ ์ข์ URI ์ค๊ณ์ผ๊น?
-> ๋ฆฌ์์ค๋ฅผ ๊ธฐ์ค์ผ๋ก ์ค๊ณํด์ผํจ! (์ค์) -> ๋ฆฌ์์ค ์๋ณ
API URI ๊ณ ๋ฏผ
- ๋ฆฌ์์ค์ ์๋ฏธ
> ํ์์ ๋ฑ๋กํ๊ณ ์์ ํ๊ณ ์กฐํํ๋ ๊ฒ์ด ๋ฆฌ์์ค๊ฐ ์๋๋ค!
> ex) ๋ฏธ๋ค๋์ ์บ๋ผ -> ๋ฏธ๋ค๋์ด ๋ฆฌ์์ค
> ํ์์ด๋ผ๋ ๊ฐ๋ ์์ฒด๊ฐ ๋ฐ๋ก ๋ฆฌ์์ค
- ๋ฆฌ์์ค๋ฅผ ์ด๋ป๊ฒ ์๋ณํ๋๊ฒ ์ข์๊น?
> ํ์์ ๋ฑ๋กํ๊ณ ์์ ํ๊ณ ์กฐํํ๋ ๊ฒ์ ๋ชจ๋ ๋ฐฐ์
> ํ์์ด๋ผ๋ ๋ฆฌ์์ค๋ง ์๋ณํ๋ฉด ๋จ -> ํ์ ๋ฆฌ์์ค๋ฅผ URI์ ๋งตํ
/members/{id} |
๋ฆฌ์์ค์ ํ์๋ฅผ ๋ถ๋ฆฌ : ๊ฐ์ฅ ์ค์ํ ๊ฒ์ ๋ฆฌ์์ค๋ฅผ ์๋ณํ๋ ๊ฒ!
- URI๋ ๋ฆฌ์์ค๋ง ์๋ณ!
- ๋ฆฌ์์ค์ ํด๋น ๋ฆฌ์์ค๋ฅผ ๋์์ผ๋กํ๋ ํ์๋ฅผ ๋ถ๋ฆฌ
> ๋ฆฌ์์ค : ํ์
> ํ์ : ์กฐํ/๋ฑ๋ก/์ญ์ /๋ณ๊ฒฝ
- ๋ฆฌ์์ค๋ ๋ช ์ฌ, ํ์๋ ๋์ฌ (๋ฏธ๋ค๋์ ์บ๋ผ)
- ํ์(๋ฉ์๋)๋ ์ด๋ป๊ฒ ๊ตฌ๋ถ? -> HTTP ๋ฉ์๋๊ฐ ํด์ค
2. HTTP ๋ฉ์๋ - GET, POST
HTTP ๋ฉ์๋
GET : ๋ฆฌ์์ค ์กฐํ POST : ์์ฒญ ๋ฐ์ดํฐ ์ฒ๋ฆฌ, ์ฃผ๋ก ๋ฑ๋ก์ ์ฌ์ฉ PUT : ๋ฆฌ์์ค๋ฅผ ๋์ฒด, ํด๋น ๋ฆฌ์์ค๊ฐ ์์ผ๋ฉด ์์ฑ PATCH : ๋ฆฌ์์ค ๋ถ๋ถ ๋ณ๊ฒฝ DELETE : ๋ฆฌ์์ค ์ญ์ |
๊ธฐํ ๋ฉ์๋
HEAD : GET๊ณผ ๋์ผํ์ง๋ง ๋ฉ์์ง ๋ถ๋ถ์ ์ ์ธํ๊ณ , ์ํ ์ค๊ณผ ํค๋๋ง ๋ฐํ OPTIONS : ๋์ ๋ฆฌ์์ค์ ๋ํ ํต์ ๊ธฐ๋ฅ ์ต์ (๋ฉ์๋)์ ์ค๋ช (์ฃผ๋ก CORS์์ ์ฌ์ฉ) CONNECT : ๋์ ์์์ผ๋ก ์๋ณ๋๋ ์๋ฒ์ ๋ํ ํฐ๋์ ์ค์ TRACE : ๋์ ๋ฆฌ์์ค์ ๋ํ ๊ฒฝ๋ก๋ฅผ ๋ฐ๋ผ ๋ฉ์์ง ๋ฃจํ๋ฐฑ ํ ์คํธ ์ํ |
1) GET
- ๋ฆฌ์์ค ์กฐํ
- ์๋ฒ์ ์ ๋ฌํ๊ณ ์ถ์ ๋ฐ์ดํฐ๋ query(์ฟผ๋ฆฌ ํ๋ผ๋ฏธํฐ, ์ฟผ๋ฆฌ ์คํธ๋ง)๋ฅผ ํตํด์ ์ ๋ฌ
- ๋ฉ์์ง ๋ฐ๋๋ฅผ ์ฌ์ฉํด์ ๋ฐ์ดํฐ ์ ๋ฌํ ์ ์์ง๋ง, ์ง์ํ์ง ์๋ ๊ณณ์ด ๋ง์ ๊ถ์ฅ X
- ๋ฆฌ์์ค ์กฐํ1 : ๋ฉ์์ง ์ ๋ฌ
- ๋ฆฌ์์ค ์กฐํ2 : ์๋ฒ ๋์ฐฉ
- ๋ฆฌ์์ค ์กฐํ3 : ์๋ต ๋ฐ์ดํฐ
2) POST
- ์์ฒญ ๋ฐ์ดํฐ ์ฒ๋ฆฌ
- ๋ฉ์์ง ๋ฐ๋๋ฅผ ํตํด ์๋ฒ๋ก ์์ฒญ ๋ฐ์ดํฐ ์ ๋ฌ
- ์๋ฒ๋ ์์ฒญ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌ
๋ฉ์์ง ๋ฐ๋๋ฅผ ํตํด ๋ค์ด์จ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๋ ๋ชจ๋ ๊ธฐ๋ฅ์ ์ํ
- ์ฃผ๋ก ์ ๋ฌ๋ ๋ฐ์ดํฐ๋ก ์ ๊ท ๋ฆฌ์์ค ๋ฑ๋ก, ํ๋ก์ธ์ค ์ฒ๋ฆฌ์ ์ฌ์ฉ
- ๋ฆฌ์์ค ๋ฑ๋ก1 - ๋ฉ์์ง ์ ๋ฌ
- ๋ฆฌ์์ค ๋ฑ๋ก2 - ์ ๊ท ๋ฆฌ์์ค ์์ฑ
- ๋ฆฌ์์ค ๋ฑ๋ก3 - ์๋ต ๋ฐ์ดํฐ
- ์ ๊ท๋ก ์์ ์์ฑ๋๋ฉด HTTP/1.1 201 Created ๋ผ๊ณ ๋ณด๋ (200์ผ๋ก ๋ณด๋ด๋๋จ)
- 201๋ก ๋ณด๋ผ๋ Location ๋ณด๋ด์ค (์ ๊ท ์์ฑ๋ ์์์ path ๋ณด๋ด์ฃผ๊ณ , ๋ฑ๋ก๋ ์์ ๋ฐ์ดํฐ๋ ๋ณด๋ด์ค)
์์ฒญ ๋ฐ์ดํฐ๋ฅผ ์ด๋ป๊ฒ ์ฒ๋ฆฌํ๋ค๋ ๋ป์ผ๊น?
- ์คํ : POST ๋ฉ์๋๋ ๋์ ๋ฆฌ์์ค๊ฐ ๋ฆฌ์์ค์ ๊ณ ์ ํ ์๋ฏธ ์ฒด๊ณ์ ๋ฐ๋ผ ์์ฒญ์ ํฌํจ๋ ํํ์ ์ฒ๋ฆฌํ๋๋ก ์์ฒญ - POST๋ ๋ค์๊ณผ ๊ฐ์ ๊ธฐ๋ฅ์ ์ฌ์ฉ๋จ 1) HTML ์์์ ์ ๋ ฅ๋ ํ๋์ ๊ฐ์ ๋ฐ์ดํฐ ๋ธ๋ก์ ๋ฐ์ดํฐ ์ฒ๋ฆฌ ํ๋ก์ธ์ค์ ์ ๊ณต ex) HTML FORM์ ์ ๋ ฅํ ์ ๋ณด๋ก ํ์๊ฐ์ , ์ฃผ๋ฌธ ๋ฑ์ ์ฌ์ฉ 2) ๊ฒ์ํ, ๋ด์ค ๊ทธ๋ฃน, ๋ฉ์ผ๋ง ๋ฆฌ์คํธ, ๋ธ๋ก๊ทธ ๋๋ ์ ์ฌํ ๊ธฐ์ฌ ๊ทธ๋ฃน์ ๋ฉ์์ง ๊ฒ์ ex) ๊ฒ์ํ ๊ธ์ฐ๊ธฐ, ๋๊ธ ๋ฌ๊ธฐ 3) ์๋ฒ๊ฐ ์์ง ์๋ณํ์ง ์์ ์ ๋ฆฌ์์ค ์์ฑ ex) ์ ๊ท ์ฃผ๋ฌธ ์์ฑ 4) ๊ธฐ์กด ์์์ ๋ฐ์ดํฐ ์ถ๊ฐ ex) ํ ๋ฌธ์ ๋์ ๋ด์ฉ ์ถ๊ฐ |
ํต์ฌ)
์ด ๋ฆฌ์์ค URI์(/members) POST์์ฒญ์ด ์ค๋ฉด ์์ฒญ ๋ฐ์ดํฐ๋ฅผ ์ด๋ป๊ฒ ์ฒ๋ฆฌํ ์ง ๋ฆฌ์์ค๋ง๋ค ๋ฐ๋ก ์ ํด์ผํจ -> ์ ํด์ง ๊ฒ์ด ์์
์ ๋ฆฌ)
1) ์ ๋ฆฌ์์ค ์์ฑ(๋ฑ๋ก)
- ์๋ฒ๊ฐ ์์ง ์๋ณํ์ง ์์ ์ ๋ฆฌ์์ค ์์ฑ
2) ์์ฒญ ๋ฐ์ดํฐ ์ฒ๋ฆฌ
- ๋จ์ํ ๋ฐ์ดํฐ๋ฅผ ์์ฑํ๊ฑฐ๋, ๋ณ๊ฒฝํ๋ ๊ฒ์ ๋์ด์ ํ๋ก์ธ์ค๋ฅผ ์ฒ๋ฆฌํด์ผํ๋ ๊ฒฝ์ฐ
ex) ์ฃผ๋ฌธ์์ ๊ฒฐ์ ์๋ฃ -> ๋ฐฐ๋ฌ์์ -> ๋ฐฐ๋ฌ์๋ฃ ์ฒ๋ผ ๋จ์ํ ๊ฐ ๋ณ๊ฒฝ์ ๋์ด ํ๋ก์ธ์ค์ ์ํ๊ฐ ๋ณ๊ฒฝ๋๋ ๊ฒฝ์ฐ
- POST์ ๊ฒฐ๊ณผ๋ก ์๋ก์ด ๋ฆฌ์์ค๊ฐ ์์ฑ๋์ง ์์ ์๋ ์์
ex) POST/orders/(orderId)/start-delivery (์ปจํธ๋กค URI)
3) ๋ค๋ฅธ ๋ฉ์๋๋ก ์ฒ๋ฆฌํ๊ธฐ ์ ๋งคํ ๊ฒฝ์ฐ
ex) JSON์ผ๋ก ์กฐํ ๋ฐ์ดํฐ๋ฅผ ๋๊ฒจ์ผํ๋๋ฐ, GET ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๊ธฐ ์ด๋ ค์ด ๊ฒฝ์ฐ
- ์ ๋งคํ๋ฉด POST
3. HTTP ๋ฉ์๋ - PUT, PATCH, DELETE
1) PUT
๋ฆฌ์์ค๋ฅผ ๋์ฒด
- ๋ฆฌ์์ค๊ฐ ์์ผ๋ฉด ๋์ฒด
- ๋ฆฌ์์ค๊ฐ ์์ผ๋ฉด ์์ฑ
- ์ฝ๊ฒ ์ด์ผ๊ธฐํ๋ฉด ๋ฎ์ด๋ฒ๋ฆฌ๋ ๊ฒ
ํด๋ผ์ด์ธํธ๊ฐ ๋ฆฌ์์ค๋ฅผ ์๋ณ (์ค์)
- ํด๋ผ์ด์ธํธ๊ฐ ๋ฆฌ์์ค ์์น๋ฅผ ์๊ณ URI ์ง์
- POST์ ์ฐจ์ด์
POST - ํด๋ผ์ด์ธํธ๊ฐ /members ์ด๋์ ์ง์ด๋ฃ๋์ง ๋ชจ๋ฆ
PUT - ํด๋ผ์ด์ธํธ๊ฐ /members 100์ ์ง์ด๋ฃ๋๋ค๊ณ ๋ช ์
- ๋ฆฌ์์ค๊ฐ ์๋ ๊ฒฝ์ฐ
- ํด๋ผ์ด์ธํธ๊ฐ 100์ ๋ฃ๋๋ค๊ณ ์ง์
- ์๋ฒ์ 100์ด ์ด๋ฏธ ์๋ค๋ฉด ๋ฆฌ์์ค ๋์ฒด
์ฃผ์) ๋ฆฌ์์ค๋ฅผ ์์ ํ ๋์ฒดํ๋ค!!!
(ํน์ ๋ฆฌ์์ค ์์ /๋ณ๊ฒฝ์ด ์๋)
2) PATCH
- ๋ฆฌ์์ค ๋ถ๋ถ ๋ณ๊ฒฝ
- age๋ง 50์ผ๋ก ๋ณ๊ฒฝ ๊ฐ๋ฅ!!
- PATCH ์ง์ ์ํ๋ ๊ฒฝ์ฐ -> POST ์ฐ๋ฉด๋จ!
3) DELETE
- ๋ฆฌ์์ค ์ ๊ฑฐ
- members 100๋ฒ ์ง์ฐ๊ฒ ๋ค -> ๋ฆฌ์์ค ์ ๊ฑฐ
4. HTTP ๋ฉ์๋์ ์์ฑ
1) ์์ (Safe Methods)
- ํธ์ถํด๋ ๋ฆฌ์์ค๋ฅผ ๋ณ๊ฒฝํ์ง ์์
- ๊ทธ๋๋ ๊ณ์ ํธ์ถํด์ ๋ก๊ทธ ์์ฌ์ ์ฅ์ ๋ฐ์ ? -> ์์ ์ ํด๋น ๋ฆฌ์์ค๋ง ๊ณ ๋ ค
2) ๋ฉฑ๋ฑ (Idempotent Methods)
- f(f(x)) = f(x)
- ํ ๋ฒ ํธ์ถํ๋ , 100๋ฒ ํธ์ถํ๋ ๊ฒฐ๊ณผ๊ฐ ๋๊ฐ๋ค
- ๋ฉฑ๋ฑ ๋ฉ์๋
GET : ํ ๋ฒ ์กฐํํ๋ , ๋ ๋ฒ ์กฐํํ๋ ๊ฐ์ ๊ฒฐ๊ณผ๊ฐ ์กฐํ๋จ
PUT : ๊ฒฐ๊ณผ๋ฅผ ๋์ฒด, ๋ฐ๋ผ์ ๊ฐ์ ์์ฒญ์ ์ฌ๋ฌ๋ฒ ํด๋ ์ต์ข
๊ฒฐ๊ณผ๋ ๊ฐ์
DELETE : ๊ฒฐ๊ณผ๋ฅผ ์ญ์ , ๊ฐ์ ์์ฒญ์ ์ฌ๋ฌ๋ฒ ํด๋ ์ญ์ ๋ ๊ฒฐ๊ณผ๋ ๊ฐ์POST : ๋ฉฑ๋ฑ์ด ์๋๋ค! ๋ ๋ฒ ํธ์ถํ๋ฉด ๊ฐ์ ๊ฒฐ์ ์ค๋ณต ๋ฐ์ ๊ฐ๋ฅ
- ํ์ฉ
> ์๋ ๋ณต๊ตฌ ๋ฉ์ปค๋์ฆ
> ์๋ฒ๊ฐ TIMEOUT ๋ฑ์ผ๋ก ์ ์ ์๋ต ๋ชป์ค๋ ํด๋ผ์ด์ธํธ๊ฐ ๊ฐ์ ์์ฒญ์ ๋ค์ ํด๋ ๋๋๊ฐ? ํ๋จ ๊ทผ๊ฑฐ
Q : ์ฌ์์ฒญ ์ค๊ฐ์ ๋ค๋ฅธ ๊ณณ์์ ๋ฆฌ์์ค๋ฅผ ๋ณ๊ฒฝํด๋ฒ๋ฆฌ๋ฉด? (GET / PUT / GET)
A : ๋ฉฑ๋ฑ์ ์ธ๋ถ ์์ธ์ผ๋ก ์ค๊ฐ์ ๋ฆฌ์์ค๊ฐ ๋ณ๊ฒฝ๋๋ ๊ฒ๊น์ง๋ ๊ณ ๋ คํ์ง ์์
3) ์บ์๊ฐ๋ฅ (Cacheable Methods)
- ์๋ต ๊ฒฐ๊ณผ ๋ฆฌ์์ค๋ฅผ ์บ์ํด์ ์ฌ์ฉํด๋ ๋๋๊ฐ?
- GET / HEAD / POST / PATCH ์บ์ ๊ฐ๋ฅ
- ์ค์ ๋ก GET / HEAD ์ ๋๋ง ์บ์๋ก ์ฌ์ฉ
- POST / PATCH ์บ์ ํค๋ก ๊ณ ๋ คํด์ผํ๋๋ฐ ๊ตฌํ ์ด๋ ค์
'๐จโ๐ป Web Development > HTTP' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[HTTP] 6.HTTP ์ํ์ฝ๋ (0) | 2023.03.03 |
---|---|
[HTTP] 5.HTTP ๋ฉ์๋ ํ์ฉ (0) | 2023.03.03 |
[HTTP] 3.HTTP ๊ธฐ๋ณธ (0) | 2023.03.02 |
[HTTP] 2.URI์ ์น๋ธ๋ผ์ฐ์ ์์ฒญ ํ๋ฆ (0) | 2023.03.02 |
[HTTP] 1.์ธํฐ๋ท ๋คํธ์ํฌ (0) | 2023.03.02 |
์ต๊ทผ๋๊ธ