728x90
1. REST
๐ก REpresentational State Transfer
- ๋ฑ์ฅ ๋ฐฐ๊ฒฝ : ๋ณต์กํ ๋คํธ์ํฌ ํต์ (ex. ์ธํฐ๋ท)๊ณผ ๋ฉํฐ ํ๋ซํผ(ex. ๋ค์ํ ๋ธ๋ผ์ฐ์ ์ ๋ชจ๋ฐ์ผ ๋๋ฐ์ด์ค ๋ฑ)์ ๋ฑ์ฅ์ ๋ฐ๋ผ ์ด๋ฅผ ๊ด๋ฆฌํ๊ธฐ ์ํ ์ง์นจ์ผ๋ก ๋ง๋ค์ด์ก๋ค
1.1. REST ๋?
- ์ํํธ์จ์ด ํ๋ก๊ทธ๋จ ์ํคํ
์ฒ์ ํ ํ์
- HTTP URI(Uniform Resource Identifier)๋ฅผ ํตํด ์์(Resource)๋ฅผ ๋ช ์ํ๊ณ
- HTTP Method (POST, GET, PUT, DELETE, PATCH ๋ฑ)์ ํตํด
- ํด๋น ์์(URI)์ ๋ํ CRUD Operation์ ์ ์ฉํ๋ ๊ฒ์ ์๋ฏธ
- Create : ๋ฐ์ดํฐ ์์ฑ (POST)
- Read : ๋ฐ์ดํฐ ์กฐํ (GET)
- Update : ๋ฐ์ดํฐ ์์ (PUT, PATCH)
- Delete : ๋ฐ์ดํฐ ์ญ์ (DELETE)์์์ ์ด๋ฆ์ผ๋ก ๊ตฌ๋ถํ์ฌ ํด๋น ์์์ ์ํ๋ฅผ ์ฃผ๊ณ ๋ฐ๋ ๋ชจ๋ ๊ฒ
1.2. ๊ตฌ์ฑ์์
- ์์(Resource) : HTTP URI
- Client๋ URI๋ฅผ ์ด์ฉํด ์์์ ์ง์ ํด๋น ์์์ ์ํ(์ ๋ณด=Payload)์ ์กฐ์์ Server์ ์์ฒญ
- ์์์ ๋ํ ํ์(Verb) : HTTP Method
- ์์์ ๋ํ ํ์์ ํํ(Representation of Resource)
- JSON, XML, TEXT, RSS๋ฑ ์ฌ๋ฌ ํํ์ ์๋ต
1.3. ํน์ง ๋ฐ ์ฅ๋จ์
- ํน์ง
- Uniform (์ ๋ํผ ์ธํฐํ์ด์ค)
- ๋ฆฌ์์ค์ ๋ํ ์กฐ์์ ํต์ผ๋๊ณ ํ์ ์ ์ธ ์ธํฐํ์ด์ค๋ก ์ํํ๋ ์ํคํ ์ฒ ์คํ์ผ
- Stateless (๋ฌด์ํ์ฑ)
- ์์ ์ ์ํ ์ํ ์ ๋ณด๋ฅผ ๋ฐ๋ก ์ ์ฅ / ๊ด๋ฆฌํ์ง ์๋๋ค
- Cacheable (์บ์ ๊ฐ๋ฅ)
- HTTP๋ผ๋ ๊ธฐ์กด ์น ํ์ค์ ๊ทธ๋๋ก ์ฌ์ฉ
- → HTTP์ ์บ์ฑ ๊ธฐ๋ฅ ์ ์ฉ ๊ฐ๋ฅ (Last-Modified ํ๊ทธ, E-Tag๋ฅผ ์ด์ฉํ์ฌ ๊ตฌํ ๊ฐ๋ฅ)
- Self-descriptiveness (์์ฒด ํํ ๊ตฌ์กฐ)
- REST API ๋ฉ์์ง๋ง ๋ณด๊ณ ๋ ์ฝ๊ฒ ์ดํด ๊ฐ๋ฅ
- Client-Server ๊ตฌ์กฐ
- Client, Server์์ ๊ฐ๋ฐํ ๋ด์ฉ์ด ๋ช
ํํ๊ณ ์์กด์ฑ ๊ฐ์
- ๊ฐ๊ฐ Client๋ ์ฌ์ฉ์ ์ธ์ฆ์ด๋ ์ปจํ ์คํธ(์ธ์ , ๋ก๊ทธ์ธ ์ ๋ณด), Server๋ API ์ ๊ณต ๋ฑ์ ์ง์ ๊ด๋ฆฌํ๋ ๊ตฌ์กฐ
- Client, Server์์ ๊ฐ๋ฐํ ๋ด์ฉ์ด ๋ช
ํํ๊ณ ์์กด์ฑ ๊ฐ์
- ๊ณ์ธตํ ๊ตฌ์กฐ
- ๋ค์ค ๊ณ์ธต ๊ตฌ์ฑ ๊ฐ๋ฅ→ PROXY, ๊ฒ์ดํธ์จ์ด ๊ฐ์ ๋คํธ์ํฌ ๊ธฐ๋ฐ ์ค๊ฐ ๋งค์ฒด ์ฌ์ฉ ๊ฐ๋ฅ
- → ๋ณด์, ๋ก๋ ๋ฐธ๋ฐ์ฑ, ์ํธํ ๊ณ์ธต ์ถ๊ฐํ๋ ๊ตฌ์กฐ์ ์ ์ฐ์ฑ
- Uniform (์ ๋ํผ ์ธํฐํ์ด์ค)
- ์ฅ๋จ์
์ฅ์ | - HTTP ํ๋กํ ์ฝ ์ธํ๋ผ๋ฅผ ๊ทธ๋๋ก ์ฌ์ฉํ์ฌ, REST API๋ฅผ ์ํ ๋ณ๋ ์ธํ๋ผ ๊ตฌ์ถ ํ์ X - HTTP ํ๋กํ ์ฝ ํ์ค์ ์ต๋ํ ํ์ฉํ์ฌ, ์ฌ๋ฌ ์ถ๊ฐ์ ์ธ ์ฅ์ ํจ๊ป ๊ฐ์ ธ๊ฐ - HTTP ํ์ค ํ๋กํ ์ฝ์ ๋ฐ๋ฅด๋ ๋ชจ๋ ํ๋ซํผ์์ ์ฌ์ฉ ๊ฐ๋ฅ - Hypermedia API์ ๊ธฐ์ค์ ์ถฉ์คํ ์งํค๋ฉฐ ๋ฒ์ฉ์ฑ ๋ณด์ฅ - REST API ๋ฉ์์ง๊ฐ ์๋ํ๋ ๋ฐ๋ฅผ ๋ช ํํ ๋ํ๋ → ์๋ํ๋ ๋ฐ ์ฝ๊ฒ ํ์ ๊ฐ๋ฅ - ์ฌ๋ฌ๊ฐ์ง ์๋น์ค ๋์์ธ์์ ์๊ธธ ์ ์๋ ๋ฌธ์ ์ต์ํ - ์๋ฒ์ ํด๋ผ์ด์ธํธ ์ญํ ์ ๋ช ํํ ๋ถ๋ฆฌ |
๋จ์ | - ํ์ค์ด ์กด์ฌํ์ง ์์ - ์ฌ์ฉ ๊ฐ๋ฅํ ๋ฉ์๋๊ฐ 4๊ฐ์ง ๋ฟ์ (HTTP Method ํํ๊ฐ ์ ํ์ ) - ๋ธ๋ผ์ฐ์ ๋ฅผ ํตํด ํ ์คํธํ ์ผ์ด ๋ง์ ์๋น์ค๋ผ๋ฉด, ์ฝ๊ฒ ๊ณ ์น ์ ์๋ URL๋ณด๋ค Header ์ ๋ณด์ ๊ฐ์ ์ฒ๋ฆฌํด์ผ ํ๋ฏ๋ก ์ ๋ฌธ์ฑ์ด ์๊ตฌ๋จ - ๊ตฌํ ๋ธ๋ผ์ฐ์ ๊ฐ ์ ๋๋ก ์ง์ํด์ฃผ์ง ๋ชปํ๋ ๋ถ๋ถ ์กด์ฌ (ex. PUT / DELETE ์ฌ์ฉ ๋ถ๊ฐ, pushState ์ง์ ์ํจ) |
2. REST API
๐กREST์ ์๋ฆฌ๋ฅผ ๋ฐ๋ฅด๋ API
2.0. API ๋?
๐กApplication Programming Interface
- ์ํํธ์จ์ด ์์ฉ ํ๋ก๊ทธ๋จ์์ ๋ค๋ฅธ ์ํํธ์จ์ด ๊ตฌ์ฑ ์์ ๋๋ ์๋น์ค์ ์ํธ ์์ฉํ๊ธฐ ์ํ ์ธํฐํ์ด์ค๋ฅผ ์ ๊ณตํ๋ ํ๋ก๊ทธ๋๋ฐ ๊ธฐ์
2.1. REST API ์ค๊ณ ๊ท์น
2.1.1. ์ค์ฌ ๊ท์น
- URI๋ ์ ๋ณด์ ์์์ ํํํด์ผ ํ๋ค
- ์์์ ๋ํ ํ์๋ HTTP Method (GET, POST, PUT, DELETE ๋ฑ)์ผ๋ก ํํํ๋ค
- ํ์๋ URI์ ํฌํจํ์ง ์๋๋ค
2.1.2. ์ธ๋ถ ๊ท์น
- URI๋ ์ ๋ฌํ๊ณ ์ ํ๋ ์์์ ๋ช
์ฌ๋ฅผ ์ฌ์ฉํ๋ค
- ์ปจํธ๋กค ์์์ ์๋ฏธํ๋ ๊ฒฝ์ฐ ์์ธ์ ์ผ๋ก ๋์ฌ ํ์ฉ
- URI ๊ฒฝ๋ก์๋ ์๋ฌธ์๊ฐ ์ ํฉํ๋ค
- ํ์ผ ํ์ฅ์๋ URI์ ํฌํจํ์ง ์๋๋ค
- ๋์ Accept Header๋ฅผ ์ฌ์ฉ (ex. GET : http://syun.com/orders/2/Accept: image/jpg )
- ์ฌ๋์ ๊ตฌ๋ถ์(/)๋ ๊ณ์ธต ๊ด๊ณ๋ฅผ ๋ํ๋ด๋๋ฐ ์ฌ์ฉํ๋ค
- URI ๋ง์ง๋ง ๋ฌธ์๋ก ์ฌ๋์(/)๋ฅผ ํฌํจํ์ง ์๋๋ค
- ๋ฐ์ค(_)์ URI์ ์ฌ์ฉํ์ง ์๊ณ , ํ์ดํ(-)์ ์ฌ์ฉํ๋ค
- ๋ฆฌ์์ค ๊ฐ์ ์ฐ๊ด ๊ด๊ณ๊ฐ ์๋ ๊ฒฝ์ฐ(ex. GET : /users/{userid}/devices (์ผ๋ฐ์ ์ผ๋ก ์์ (has)์ ๊ด๊ณ๋ฅผ ํํํ ๋) )
- → /๋ฆฌ์์ค๋ช /๋ฆฌ์์ค ID/๊ด๊ณ๊ฐ ์๋ ๋ค๋ฅธ ๋ฆฌ์์ค๋ช
3. RESTful API
๐กREST API์ ์ค๊ณ ๊ท์น์ ์ฌ๋ฐ๋ฅด๊ฒ ์งํจ ์์คํ
- REST๋ฅผ REST๋ต๊ฒ ์ฐ๊ธฐ ์ํ ๋ฐฉ๋ฒ์ผ๋ก, ๋๊ตฐ๊ฐ ๊ณต์์ ๋ฐํํ ๊ฒ์ ์๋๋ค
- REST API์ ๊ตฌ์ฑ ์์๋ฅผ ๋ฐ๋ฅด๋ฉด์, URI์ HTTP ๋ฉ์๋๋ฅผ ์ ์ ํ๊ฒ ์ฌ์ฉํ์ฌ ์์ ์กฐ์
- REST API๋ฅผ ๊ฐ์ ํ๊ณ , ๋ณด๋ค ์ผ๊ด์ฑ ์๋ API ๊ตฌํํ๋๋ก ํด์ค๋ค
- ์์ฒญ์ ๋ณด๋ด๋ ์ฃผ์๋ง์ผ๋ก๋ ์ด๋ค ๊ฒ์ ์์ฒญํ๋์ง ํ์ ๊ฐ๋ฅ (๋ ๊ฐํธํ๊ณ ์ง๊ด์ ์ธ ๊ตฌ์กฐ)
- ์ฑ๋ฅ์ด ์ค์ํ ์ํฉ์ด๋ผ๋ฉด ๊ตณ์ด RESTfulํ API๋ฅผ ๊ตฌํํ ํ์ X
- ๋ชฉ์ : ์ดํดํ๊ธฐ ์ฝ๊ณ ์ฌ์ฉํ๊ธฐ ์ฌ์ด REST API๋ฅผ ๋ง๋๋ ๊ฒ
999. ์ ๋ฆฌ
- REST : HTTP ๊ธฐ๋ฐ์ผ๋ก ๋คํธ์ํฌ ์์์ Client-Server ์ฌ์ด ํต์ ๋ฐฉ์ ์ค ํ๋
- REST API : REST๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์๋น์ค API๋ฅผ ๊ตฌํํ ๊ฒ
- RESTful : REST๋ฅผ REST๋ต๊ฒ, REST ์๋ฆฌ๋ฅผ ๋ฐ๋ฅด๋ ์์คํ
๐ References
https://junvelee.tistory.com/107
https://khj93.tistory.com/entry/๋คํธ์ํฌ-REST-API๋-REST-RESTful์ด๋#google_vignette
https://velog.io/@dongjun187/API๋-๋ฌด์์ธ๊ฐ
https://dev-coco.tistory.com/97
https://velog.io/@somday/RESTful-API-์ด๋#rest-api-ํ์-๋ฐฐ๊ฒฝ
https://digitaloasis.tistory.com/entry/rest-api-and-restful-api
https://dev-coco.tistory.com/97
https://uiop5809.tistory.com/166
728x90
'Web' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Web] ์๋ฒ ์ฑ๋ฅ ํ ์คํธ ์ข ๋ฅ์ ๋๊ตฌ ๋ฐ ๋๊ท๋ชจ ํธ๋ํฝ ์ํฉ ๋๋น (0) | 2024.05.03 |
---|---|
[Web] ์๋ธ๋ฆฟ ํํฐ (Servlet Filter) (1) | 2024.02.01 |
[Web] JSP๋? JSP ํธ์ถ๊ณผ์ / ๊ธฐ๋ณธ๊ฐ์ฒด / EL / JSTL (1) | 2024.02.01 |
[Web] ์๋ธ๋ฆฟ(Servlet)์ด๋? JSP์ MVC ํจํด์ผ๋ก์ ๋ณํ (1) | 2024.01.31 |
[Web] HTTP ์๋ต ์ํ์ฝ๋์ ์์ฒญ ๋ฉ์๋(GET / POST) (0) | 2024.01.31 |