๋ฐ์ํ
HTTP Protocol
- HTTP (Hyper Text Transfer Protocol)๋ก RFC 2616์์ ๊ท์ ๋ Web์์ ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ๋ ํ๋กํ ์ฝ.
- TCP๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ REST์ ํน์ง์ ๋ชจ๋ ๊ตฌํํ๊ณ ์๋ Web๊ธฐ๋ฐ์ ํ๋กํ ์ฝ
HTTP ํต์ ๋ฐฉ๋ฒ
- HTTP๋ ๋ฉ์์ง๋ฅผ ์ฃผ๊ณ (Request) ๋ฐ๋ (Response) ํํ์ ํต์ ๋ฐฉ๋ฒ.
ใ
ใ
HTTP Method
GET
- ๋ฆฌ์์ค์ ์กฐํ์ ์ฌ์ฉํ๋ค.
- ์๋ฒ์ ์ ๋ฌํ๊ณ ์ถ์ ๋ฐ์ดํฐ๋ฅผ query(parameter, query string)์ ํตํด ์ ๋ฌํ๋ค.
- ๋ฉ์์ง ๋ฐ๋๋ฅผ ํตํด ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌํ ์๋ ์์ง๋ง ์ง์ํ์ง ์๋ ๊ณณ๋ ์กด์ฌํ๊ธฐ ๋๋ฌธ์ ๊ถ์ฅโ
POST
- ๋ฉ์์ง ๋ฐ๋๋ฅผ ํตํด ์๋ฒ๋ก ์์ฒญ ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌํ๋ค. ์๋ฒ๋ ๋ฉ์์ง ๋ฐ๋๋ฅผ ํตํด ๋ค์ด์จ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๋ ๋ชจ๋ ๊ธฐ๋ฅ์ ์ํํ๋ค.
- ์ฃผ๋ก ์ ๊ท ๋ฆฌ์์ค์ ๋ฑ๋ก, ํ๋ก์ธ์ค ์ฒ๋ฆฌ ๋ฑ์ ์ฌ์ฉํ๋ค
- ์ ๊ท ๋ฆฌ์์ค๋ฅผ ๋ฑ๋กํ๋ค๋ฉด ์๋ก ์์ฑ๋์๋ค๋ 201 ์ํ ์ฝ๋์ ์์ฑ๋ URI ๊ฒฝ๋ก(Location)๋ฅผ ๋ฐํํ๋ค
- ๋ํ, ๋ค๋ฅธ ๋ฉ์๋๋ก ์ฒ๋ฆฌํ๊ธฐ ์ ๋งคํ ๊ฒฝ์ฐ ์ฃผ๋ก ์ฌ์ฉ๋๋ค. ์กฐํํ ๋ ๋ฐ์ดํฐ๋ฅผ ๋๊ธฐ๊ธฐ ์ด๋ ค์ด ๊ฒฝ์ฐ ๋ฐ์ดํฐ๋ฅผ ๋๊ธฐ๋ ๋ฐ ์ฌ์ฉํ ์ ์์ง๋ง ์กฐํ๋ GET์ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข๋ค! POST๋ ์บ์ฑํ๊ธฐ ์ด๋ ต๊ธฐ ๋๋ฌธ...
PUT
- ๋ชฉ์ ๋ฆฌ์์ค๋ฅผ ํ์ฌ ๋ฉ์์ง์ ๊ฐ์ผ๋ก ์์ฑํ๊ฑฐ๋ ๋ง์ฝ ์กด์ฌํ๋ค๋ฉด ๊ธฐ์กด ๋ฆฌ์์ค๋ฅผ ์ญ์ ํ๊ณ ๋ฎ์ด์ฐ๊ธฐ ํ๋ค.
๐ก POST์ PUT์ ์ด๋ป๊ฒ ๊ตฌ๋ถํด์ ์ฌ์ฉํ ๊น?
PUT์ POST์ ๋ค๋ฅด๊ฒ ํด๋ผ์ด์ธํธ๊ฐ ๋ฆฌ์์ค์ ์์น๋ฅผ ์๊ณ URI๋ฅผ ์ง์ ํด ์ฃผ์ด์ผ ํ๋ค!
ex) PUT /members/100
PATCH
- ๋ฆฌ์์ค๋ฅผ ๋ถ๋ถ์ ์ผ๋ก ๋ณ๊ฒฝํ๋ค.
- ์ง์ํ์ง ์๋ ๊ฒฝ์ฐ๋ ์์ด ์ด๋ฐ ๊ฒฝ์ฐ POST๋ก ๋์ฒดํ์ฌ ์ฌ์ฉ
DELETE
ํน์ ๋ฆฌ์์ค์ ์ญ์ ๋ฅผ ์์ฒญํ๋ ๋ฐ ์ฌ์ฉ
๊ธฐํ ๋ฉ์๋
์ ์ฌ์ฉ๋์ง ์๋ ๋ฉ์๋๋ค
- HEAD : GET๊ณผ ๋์ผํ์ง๋ง ๋ฉ์์ง ๋ฐ๋๋ฅผ ์ ์ธํ๊ณ ๋ฐํ
- OPTIONS : ๋์ ๋ฆฌ์์ค์ ๋ํ ํต์ ์ ์ค์ ํ๋ ๋ฐ ์ฌ์ฉ
- CONNECT : ๋์ ์์์ผ๋ก ์๋ณ๋๋ ์๋ฒ์ ๋ํ ํฐ๋์ ์ค์
- TRACE : ๋์ ๋ฆฌ์์ค์ ๋ํ ๊ฒฝ๋ก๋ฅผ ๋ฐ๋ผ ๋ฉ์์ง ๋ฃจํ๋ฐฑ ํ ์คํธ๋ฅผ ์ํ
HTTP ๋ฉ์๋์ ์์ฑ
์์ Safe
ํธ์ถํด๋ ๋ฆฌ์์ค๋ฅผ ๋ณ๊ฒฝํ์ง ์๋ ํน์ฑ
๋ฉฑ๋ฑ์ฑ Idempotent
- ๋์ผํ ์์ฒญ์ ์ฌ๋ฌ ๋ฒ ๋ณด๋ด๋ ํ ๋ฒ ๋ณด๋ด๋ ๊ฒ๊ณผ ๊ฐ์ ๊ฒ
- ์ธ๋ถ ์์ธ์ผ๋ก ์ค๊ฐ์ ๋ฆฌ์์ค๊ฐ ๋ณ๊ฒฝ๋๋ ๊ฒ์ ๊ณ ๋ คํ์ง ์๊ณ ํด๋น ์์ฒญ์ ๊ธฐ์ค์ผ๋ก ๊ณ ๋ คํ๋ค
- ์ฌ๋ฐ๋ฅด๊ฒ ๊ตฌํํ GET, PUT, DELETE ๋ฉ์๋๋ ๋ฉฑ๋ฑ์ฑ์ ์ง๋ ์ผ ํ๋ค.
์)
DELETE /members/100 → 200
DELETE /members/100 → 404
DELETE๋ฅผ ์ฌ๋ฌ ๋ฒ ํธ์ถํ๋ฉด ์๋ต ์ฝ๋๋ ๋ฌ๋ผ์ง ์ ์์ง๋ง, 100๋ฒ member๊ฐ ์ญ์ ๋ ๊ฒ์ ๋์ผ
์บ์ ๊ฐ๋ฅ Cacheable
- ์๋ต ๊ฒฐ๊ณผ๋ฅผ ์๋ฒ์ ์บ์ ํด์ ์ฌ์ฉํด๋ ๋๋ ๋ฉ์๋
- GET, HEAD, POST, PATCH๊ฐ ๊ฐ๋ฅํ์ง๋ง ์ค๋ฌด์์๋ ๊ตฌํ์ด ์ด๋ ต๊ธฐ ๋๋ฌธ์ GET, HEAD ์ ๋๋ง ์บ์ ํ์ฌ ์ฌ์ฉ
HTTP ์๋ต ์ํ ์ฝ๋
์ํ์ฝ๋ | ํฐ ์๋ฏธ |
---|---|
1xx | ์ฒ๋ฆฌ์ค |
2xx | ์ฑ๊ณต |
3xx | ๋ฆฌ๋ค์ด๋ ํธ |
4xx | ํด๋ผ์ด์ธํธ ์๋ฌ |
5xx | ์๋ฒ์๋ฌ |
์ํ์ฝ๋ | ๊ฒฐ๊ณผ |
---|---|
200 | ํด๋ผ์ด์ธํธ์ ์์ฒญ์ ์ ์์ ์ผ๋ก ์ํํจ |
201 | ํด๋ผ์ด์ธํธ๊ฐ ์ด๋ ํ ๋ฆฌ์์ค ์์ฑ์ ์์ฒญ ํด๋น ๋ฆฌ์์ค๊ฐ ์ฑ๊ณต์ ์ผ๋ก ์์ฑ๋จ(POST๋ฅผ ํตํ ๋ฆฌ์์ค ์์ฑ ์์ ์) |
301 | ๋ฆฌ์์ค๊ฐ ๋ค๋ฅธ ์ฅ์๋ก ๋ณ๊ฒฝ๋จ์ ์๋ฆผ |
303 | Client์์ ์๋์ผ๋ก ์๋ก์ด ๋ฆฌ์์ค๋ก ์์ฒญ ์ฒ๋ฆฌ |
400 | ํด๋ผ์ด์ธํธ์ ์์ฒญ์ด ๋ถ์ ์ ํ ๊ฒฝ์ฐ ์ฌ์ฉํ๋ ์๋ต ์ฝ๋ |
401 | (๊ถํ ์์, ์ธ์ฆ ์คํจ)ํด๋ผ์ด์ธํธ๊ฐ ์ธ์ฆ๋์ง ์์ ์ํ์์ ๋ณดํธ๋ ๋ฆฌ์์ค๋ฅผ ์์ฒญํ์ ๋ ์ฌ์ฉํ๋ ์๋ต ์ฝ๋ |
403 | ์ ์ ์ธ์ฆ์ํ์ ๊ด๊ณ ์์ด ์๋ตํ๊ณ ์ถ์ง ์์ ๋ฆฌ์์ค๋ฅผ ํด๋ผ์ด์ธํธ๊ฐ ์์ฒญํ์ ๋ ์ฌ์ฉํ๋ ์๋ต ์ฝ๋ (403 ๋ณด๋ค๋ 400์ด๋ 404๋ฅผ ์ฌ์ฉํ ๊ฒ์ ๊ถ๊ณ . 403 ์์ฒด๊ฐ ๋ฆฌ์์ค๊ฐ ์กด์ฌํ๋ค๋ ๋ป์ด๊ธฐ ๋๋ฌธ์) |
405 | ํด๋ผ์ด์ธํธ๊ฐ ์์ฒญํ ๋ฆฌ์์ค์์๋ ์ฌ์ฉ ๋ถ๊ฐ๋ฅํ Method๋ฅผ ์ด์ฉํ์ ๊ฒฝ์ฐ ์ฌ์ฉํ๋ ์๋ต ์ฝ๋ |
301 | ํด๋ผ์ด์ธํธ๊ฐ ์์ฒญํ ๋ฆฌ์์ค์ ๋ํ URI๊ฐ ๋ณ๊ฒฝ ๋์์ ๋ ์ฌ์ฉํ๋ ์๋ต ์ฝ๋ (์๋ต ์ Location header์ ๋ณ๊ฒฝ๋ URI๋ฅผ ์ ์ด ์ค์ผ ํฉ๋๋ค.) |
500 | ์๋ฒ์ ๋ฌธ์ ๊ฐ ์์ ๊ฒฝ์ฐ ์ฌ์ฉํ๋ ์๋ต ์ฝ๋ |
503 | ์๋น์ค ์ ์ง (์ ๊ฒ ๋ฑ๋ฑ...) |
ใ
Reference :pushpin:
- https://ko.wikipedia.org/wiki/REST
- http://blog.remotty.com/blog/2014/01/28/lets-study-rest/
- https://yangbongsoo.gitbooks.io/study/content/restc758_c774_d574_c640_c124_acc4.html
- https://girawhale.tistory.com/66
- https://meetup.toast.com/posts/92
- http://spoqa.github.io/2012/02/27/rest-introduction.html