๋ฐ์ํ
REST์ ์ ์
- ๋ํ์ ์ธ ์ํ ์ ๋ฌ์ ์ฝ์
- ์๋ ์์ด๋ ์น(www)๊ณผ ๊ฐ์ ๋ถ์ฐ ํ์ดํผ๋ฏธ๋์ด ์์คํ
์ ์ํ ์ํํธ์จ์ด ๊ฐ๋ฐ ์ํคํ
์ณ์ ํ ํ์
- REST๋ ๊ธฐ๋ณธ์ ์ผ๋ก ์น์ ๊ธฐ์กด ๊ธฐ์ ๊ณผ HTTP ํ๋กํ ์ฝ์ ๊ทธ๋๋ก ํ์ฉํ๊ธฐ ๋๋ฌธ์ ์น์ ์ฅ์ ์ ์ต๋ํ ํ์ฉํ ์ ์๋ ์ํคํ ์ณ ์คํ์ผ
- REST๋ ๋คํธ์ํฌ ์์์ Client์ Server ์ฌ์ด์ ํต์ ๋ฐฉ์ ์ค ํ๋
- ๊ตฌ์ฒด์ ์ธ ๊ฐ๋
- HTTP URI ๋ฅผ ํตํด ์์์ ๋ช ์ํ๊ณ , HTTP Method๋ฅผ ํตํด ํด๋น ์์์ ๋ํ CRUD Operation์ ์ ์ฉํ๋ ๊ฒ์ ์๋ฏธ
- ์ฆ, REST๋ ์์ ๊ธฐ๋ฐ์ ๊ตฌ์กฐ ์ค๊ณ์ ์ค์ฌ์ resource๊ฐ ์๊ณ , HTTP Method๋ฅผ ํตํด Resource๋ฅผ ์ฒ๋ฆฌํ๋๋ก ์ค๊ณ๋ ์ํคํ ์ณ๋ฅผ ์๋ฏธ
- ์น ์ฌ์ดํธ์ ์ด๋ฏธ์ง, ํ ์คํธ DB ๋ด์ฉ๋ฑ์ ๋ชจ๋ ์์์ ๊ณ ์ ํ ID์ธ HTTP URI๋ฅผ ๋ถ์ฌํจ
์ฅ์
- ์ฌ๋ฌ๊ฐ์ง ์๋น์ค ๋์์ธ์ ์๊ธธ ์ ์๋ ๋ฌธ์ ๋ฅผ ์ต์ํํด์ค
- Hypermedia API์ ๊ธฐ๋ณธ์ ์ถฉ์คํ ์งํค๋ฉด์ ๋ฒ์ฉ์ฑ์ ๋ณด์ฅํด์ค
- HTTP ํ๋กํ ์ฝ ํ์ค์ ์ต๋ํ ํ์ฉํ์ฌ ์ฌ๋ฌ ์ถ๊ฐ์ ์ธ ์ฅ์ ์ ํจ๊ป ๊ฐ์ ธ๊ฐ ์ ์๊ฒ ํด์ค
๋จ์
- ๋ธ๋ผ์ฐ์ ๋ฅผ ํตํด ํ ์คํธํ ์ผ์ด ๋ง์ ์๋น์ค๋ผ๋ฉด ์ฝ๊ฒ ๊ณ ์น ์ ์๋ URI๋ณด๋ค Header ๊ฐ์ด ์ด๋ ต๊ฒ ๋๊ปด์ง
- ๊ตฌํ ๋ธ๋ผ์ฐ์ ๊ฐ ์์ง ์ ๋๋ก ์ง์ํด์ฃผ์ง ๋ชปํ๋ ๋ถ๋ถ์ด ์กด์ฌ
- PUT, DELETE๋ฅผ ์ฌ์ฉ ๋ชปํ๋ ์
- pushState๋ฅผ ์ง์ํ์ง ์๋ ์ (history.pushState โ ๋ค๋ก๊ฐ๊ธฐ)
ํน์ง
- Server-Client
- Stateless
- Cacheable
- Layered system
- Code On Demand (option)
- Uniform Interface (์ธํฐํ์ด์ค ์ผ๊ด์ฑ)
ํ์ํ ์ด์
- ์ ํ๋ฆฌ์ผ์ด์ ๋ถ๋ฆฌ ๋ฐ ํตํฉ
- ๋ค์ํ ํด๋ผ์ด์ธํธ์ ๋ฑ์ฅ
- ์ฆ, ์ต๊ทผ์ ์๋ฒ ํ๋ก๊ทธ๋จ์ ๋ค์ํ ๋ธ๋ผ์ฐ์ ์ ๋ชจ๋ฐ์ผ ๋๋ฐ์ด์ค์์๋ ํต์ ์ ํ ์ ์์ด์ผํจ
- MSA ๋ถ์ฐ ์๋น์ค์ ๊ด๋ จ๋์ด์์ (api call์ ํตํ ๋ฐ์ดํฐ ์ฒ๋ฆฌ)
๊ตฌ์ฑ ์์
- ์์(Resource) : URI
- ๋ชจ๋ ์์์ ๊ณ ์ ํ id๊ฐ ์กด์ฌํ๊ณ , ์ด ์์์ Server์ ์กด์ฌ
- ์์์ ๊ตฌ๋ณํ๋ id๋ 'localhost:8080/user/:userid'์ ๊ฐ์ HTTP URI
- Client๋ URI๋ฅผ ์ด์ฉํด์ ์์์ ์ง์ ํ๊ณ ํด๋น ์์์ ์ํ(์ ๋ณด)์ ๋ํ ์กฐ์์ Server์ ์์ฒญ
- ํ์(Verb) : Http Method
- HTTP ํ๋กํ ์ฝ์ Method๋ฅผ ์ฌ์ฉ
- GET, POST, PUT, DELETE, HEAD ์ ๊ฐ์ ๋ฉ์๋๋ฅผ ์ ๊ณตํจ
- ํํ (Representation Of Resource)
- Client๊ฐ ์์์ ์ํ(์ ๋ณด)์ ๋ํ ์กฐ์์ ์์ฒญํ๋ฉด Server๋ ์ด์ ์ ์ ํ ์๋ตํํ(Representation)์ ๋ณด๋
- REST์์ ํ๋์ ์์์ JSON, XML, TEXT, RSS ๋ฑ ์ฌ๋ฌ ํํ์ Representation์ผ๋ก ๋ํ๋ด์ด ์ง ์ ์์
- ์๋ ์๋ XML์ด์์ง๋ง ํ๋์๋ JSON์ผ๋ก ํํํ๊ณ ์์
REST API
- API๋ ํด๋น ์ ํ๋ฆฌ์ผ์ด์ ์ ์ ์ดํ ์ ์๊ฒ ํด์ฃผ๋ ์ค๊ฐ ์ธํฐํ์ด์ค(์ฐ๊ฒฐ์ )
- ์๋ฅผ ๋ค์ด, ํค๋ณด๋๋ผ๋ ์ธํฐํ์ด์ค๋ฅผ ํตํด ํ๋์จ์ด์ ์ ๋ ฅํด์ฃผ๋ ๊ธฐ๋ฅ์ ํด์ฃผ๋ ๊ฒ๊ณผ ๊ฐ์
- ์ํ ์กฐํ ์๋น์ค API๋ฅผ ํตํด ํน์ ๋ช ๋ น๋ง ๋ด๋ฆฌ๋ฉด ํด๋น ์ ํ๋ฆฌ์ผ์ด์ ์ด ๊ทธ์ ๋ง๋ ๊ธฐ๋ฅ์ ์ํ
์ ์
- REST๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์๋น์ค API๋ฅผ ๊ตฌํํ ๊ฒ
- ์ต๊ทผ OpenAPI, ๋ง์ดํฌ๋ก ์๋น์ค๋ฑ์ ์ ๊ณตํ๋ ์ ์ฒด ๋๋ถ๋ถ์ REST API๋ฅผ ์ ๊ณต
ํน์ง
- REST ๊ธฐ๋ฐ์ผ๋ก ์์คํ ์ ๋ถ์ฐํด ํ์ฅ์ฑ๊ณผ ์ฌ์ฌ์ฉ์ ๋์ฌ ์ ์ง๋ณด์ ๋ฐ ์ด์ฉ์ ํธ๋ฆฌํ๊ฒ ํ ์ ์์
- REST๋ HTTP ํ์ค์ ๊ธฐ๋ฐ์ผ๋ก ๊ตฌํํ๋ฏ๋ก, HTTP๋ฅผ ์ง์ํ๋ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ก ํด๋ผ์ด์ธํธ, ์๋ฒ๋ฅผ ๊ตฌํํ ์ ์์
๊ธฐ๋ณธ ์ค๊ณ ๊ท์น
- URI๋ ์์์ ํํํด์ผ ํจ
- resource๋ ๋ช ์ฌ
- ์๋ฌธ์ ๋ณต์ํ
- GET /members/1
- ์์์ ๋ํ ํ์๋ HTTP Method์ผ๋ก ํํํจ
- URI์ HTTP Method๊ฐ ๋ค์ด๊ฐ๋ฉด ์๋จ
- GET /members/delete/1 โ DELETE /members/1
- ์ด๋ค ํ์๋ ํ๋์ ๊ดํด์ ๋์ฌ ํํ์ด ๋ค์ด๊ฐ๋ฉด ์๋จ
- GET /members/insert/2 โ POST /members/2
- GET /members/show/1 โ GET /members/1
- URI์ HTTP Method๊ฐ ๋ค์ด๊ฐ๋ฉด ์๋จ
REST API ์ค๊ณ ๊ท์น
- ์ฌ๋์ ๊ตฌ๋ถ์(/)๋ ๊ณ์ธต ๊ด๊ณ๋ฅผ ๋ํ๋ด๋๋ฐ ์ฌ์ฉ
- URI ๋ง์ง๋ง ๋ฌธ์๋ก ์ฌ๋์(/)๋ฅผ ํฌํจํ์ง ์์
- ๋์๋ฌธ์ ๊ตฌ๋ถ์ผ๋ก์ kebab case ํ์์ ์ฌ์ฉ
Kebab case : ๋ชจ๋ ์๋ฌธ์๋ก ํํํ๋ฉฐ ๋จ์ด์ ๋จ์ด ์ฌ์ด๋ฅผ ๋์(-)๋ฅผ ์ด์ฉํ์ฌ ๊ตฌ๋ถ, ์คํ๋ง์ yml ํ์ผ์ด๋ url ์ฃผ์์์ ์ฌ์ฉ
- ๋ฐ์ค(_) ์ URI์ ์ฌ์ฉํ์ง ์์
- ๋ฐ์ค์ ๋ณด๊ธฐ ์ด๋ ต๊ฑฐ๋ ๋ฐ์ค ๋๋ฌธ์ ๋ฌธ์๊ฐ ๊ฐ๋ ค์ง๊ธฐ๋ ํ๋ฏ๋ก ๊ฐ๋ ์ฑ์ ์ํด ์ฌ์ฉํ์ง ์์
- URI ๊ฒฝ๋ก์๋ ์๋ฌธ์๊ฐ ์ ํฉ
- URI ๊ฒฝ๋ก์๋ ๋๋ฌธ์ ์ฌ์ฉ์ ํผํ๋๋ก ํจ
- ํ์ผ ํ์ฅ์๋ URI์ ํฌํจํ์ง ์์
- REST API์์๋ ๋ฉ์์ง ๋ฐ๋ ๋ด์ฉ์ ํฌ๋งท์ ๋ํ๋ด๊ธฐ ์ํ ํ์ผ ํ์ฅ์๋ฅผ URI ์์ ํฌํจ์ํค์ง ์์
- ๋ฆฌ์์ค ๊ฐ์๋ ์ฐ๊ด ๊ด๊ณ๊ฐ ์๋ ๊ฒฝ์ฐ
- /๋ฆฌ์์ค๋ช /๋ฆฌ์์ค ID/๊ด๊ณ๊ฐ ์๋ ๋ค๋ฅธ ๋ฆฌ์์ค ๋ช
- ex ) GET :/users/{userid}/devices (์ผ๋ฐ์ ์ผ๋ก ์์ 'has'์ ๊ด๊ณ๋ฅผ ํํํ ๋)
- :id๋ ํ๋์ ํน์ resource๋ฅผ ๋ํ๋ด๋ ๊ณ ์ ๊ฐ
- ex ) student๋ฅผ ์์ฑํ๋ route:POST /students
- ex ) id = 12์ธ student๋ฅผ ์ญ์ ํ๋ route:DELETE /students/12
RESTful
๊ฐ๋
- RESTful์ ์ผ๋ฐ์ ์ผ๋ก REST๋ผ๋ ์ํคํ
์ณ๋ฅผ ๊ตฌํํ๋ ์น ์๋น์ค๋ฅผ ๋ํ๋ด๊ธฐ ์ํด ์ฌ์ฉ๋๋ ์ฉ์ด์
- ์ฆ, REST ์๋ฆฌ๋ฅผ ๋ฐ๋ฅด๋ ์์คํ ์ RESTful์ด๋ ์ฉ์ด๋ก ์ง์นญ๋จ
- RESTful์ REST๋ฅผ REST ๋ต๊ฒ ์ฐ๊ธฐ ์ํ ๋ฐฉ๋ฒ์ผ๋ก, ๋๊ตฐ๊ฐ ๊ณต์์ ์ผ๋ก ๋ฐํํ๋ ๊ฒ์ด ์๋
๋ชฉ์
- ์ดํดํ๊ธฐ ์ฝ๊ณ ์ฌ์ฉํ๊ธฐ ์ฌ์ด REST API ๋ง๋๋ ๊ฒ
- RESTful API๋ฅผ ๊ตฌํํ๋ ๊ทผ๋ณธ์ ์ธ ๋ชฉ์ ์ด ํผํฌ๋จผ์ค ํฅ์์ ์๋๊ฒ ์๋๋ผ, ์ผ๊ด์ ์ธ ์ปจ๋ฒค์ ์ ํตํ API์ ์ดํด๋ ๋ฐ ํธํ์ฑ์ ๋์ด๋๊ฒ ์ฃผ ๋๊ธฐ์ด๋, ํผํฌ๋จผ์ค๊ฐ ์ค์ํ ์ํฉ์์๋ ๊ตณ์ด RESTful API๋ฅผ ๊ตฌํํ ํ์๋ ์์
RESTful ํ์ง ๋ชปํ ๊ฒฝ์ฐ
- ex ) CRUD ๊ธฐ๋ฅ์ ๋ชจ๋ POST๋ก๋ง ์ฒ๋ฆฌํ๋ API
- ex ) route์ resource, id ์ธ์ ์ ๋ณด๊ฐ ๋ค์ด๊ฐ๋ ๊ฒฝ์ฐ (/students/updateName)
728x90
๋ฐ์ํ
'์ทจ๋ฝ๊ธฐ์' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[์ฐ์ํ ํ ํฌ์ฝ์ค ๋ฐฑ์๋ 5๊ธฐ] ํ๋ฆฌ์ฝ์ค 1์ฃผ์ฐจ ํ๊ณ (1) | 2022.11.03 |
---|---|
๋ฉด์ ๋ณต๊ธฐ - 2 ๐ (0) | 2022.11.03 |
๋ฉด์ ๋ณต๊ธฐ - 1 ๐ญ (0) | 2022.09.27 |
๋ฉด์ ์ค๋น - 2 (0) | 2022.09.27 |
๋ฉด์ ์ค๋น - 1 (0) | 2022.09.19 |