"REpresentational State Transfer" ์ ์ฝ์๋ก,
์์์ ์ด๋ฆ(์์์ ํํ)์ผ๋ก ๊ตฌ๋ถํด ํด๋น ์์์ ์ํ(์ ๋ณด)๋ฅผ ์ฃผ๊ณ ๋ฐ๋ ๋ชจ๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค.
์ด๋ค ์์์ ๋ํด CRUD(Create, Read, Update, Delete) ์ฐ์ฐ์ ์ํํ๊ธฐ ์ํด URI(Resource)๋ก
GET, POST ๋ฑ์ ๋ฐฉ์(Method)์ ์ฌ์ฉํ์ฌ ์์ฒญ์ ๋ณด๋ด๋ฉฐ, ์์ฒญ์ ์ํ ์์์ ํน์ ํ ํํ
(Representation of Resource)๋ก ํํ๋ฉ๋๋ค.
์ฆ,ย **์์(resource)**์ย **ํํ(representation)**์ ์ํย ์ํ ์ ๋ฌ์ ๋ปํฉ๋๋ค.
-
์์ย :ย ํด๋น ์ํํธ์จ์ด๊ฐ ๊ด๋ฆฌํ๋ ๋ชจ๋ ๊ฒ ( ๋ฌธ์, ๊ทธ๋ฆผ, ๋ฐ์ดํฐ, ํด๋น ์ํํธ์จ์ด ์์ฒด ๋ฑ )
-
ํํ :ย ๊ทธ ์์์ ํํํ๊ธฐ ์ํ ์ด๋ฆ ( DB์ ํ์ ์ ๋ณด๊ฐ ์์์ด๋ฉด, 'students'๋ฅผ ์์์ ํํ์ผ๋ก ์ ํจ )
-
์ํ ์ ๋ฌ :ย ๋ฐ์ดํฐ๊ฐ ์์ฒญ๋๋ ์์ ์ ์์์ ์ํ๋ฅผ ์ ๋ฌํ๋ค. ( JSON ํน์ XML์ ํตํด ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ๋ ๊ฒ์ด ์ผ๋ฐ์ )
-
๊ธฐ๋ณธ์ ์ผ๋ก ์น์ ๊ธฐ์กด ๊ธฐ์ ๊ณผ HTTP ํ๋กํ ์ฝ์ ๊ทธ๋๋ก ํ์ฉํ๊ธฐ ๋๋ฌธ์ ์น์ ์ฅ์ ์ ์ต๋ํ ํ์ฉํ ์ ์๋ ์ํคํ ์ณ ์คํ์ผ
-
๋คํธ์ํฌ ์์์ย Client ์ Server ์ฌ์ด์ ํต์ ๋ฐฉ์ย ์ค ํ๋
- HTTP URI ๋ฅผ ํตํด ์์(Resource)์ ๋ช
์ํ๊ณ , HTTP Method(POST, GET, PUT DELETE) ๋ฅผ ํตํด ํด๋น ์์์ ๋ํ CRUD Operation์ ์ ์ฉํ๋ ๊ฒ์ ์๋ฏธ
- ์ฆ REST๋ ์์ ๊ธฐ๋ฐ์ ๊ตฌ์กฐ(ROA, Resource Oriented Architecture) ์ค๊ณ์ ์ค์ฌ์ Resource๊ฐ ์๊ณ HTTP Method๋ฅผ ํตํด Resource๋ฅผ ์ฒ๋ฆฌํ๋๋ก ์ค๊ณ๋ ์ํคํ ์ณ๋ฅผ ์๋ฏธ
- ์น ์ฌ์ดํธ์ ์ด๋ฏธ์ง, ํ ์คํธ, DB ๋ด์ฉ ๋ฑ์ ๋ชจ๋ ์์์ ๊ณ ์ ํ ID์ธ HTTP URI๋ฅผ ๋ถ์ฌํ๋ค.
- CRUD Operation
- Create: ์์ฑ(POST)
- Read: ์กฐํ(GET)
- Update: ์์ (PUT)
- Delete: ์ญ์ (DELETE)
- HEAD: header ์ ๋ณด ์กฐํ(HEAD)
GET | Read : ์ ๋ณด ์์ฒญ, URI๊ฐ ๊ฐ์ง ์ ๋ณด๋ฅผ ๊ฒ์ํ๊ธฐ ์ํด ์๋ฒ์ ์์ฒญํ๋ค. |
---|---|
POST | Create : ์ ๋ณด ์ ๋ ฅ, ํด๋ผ์ด์ธํธ์์ ์๋ฒ๋ก ์ ๋ฌํ๋ ค๋ ์ ๋ณด๋ฅผ ๋ณด๋ธ๋ค. |
PUT | Update : ์ ๋ณด ์ ๋ฐ์ดํธ, ์ฃผ๋ก ๋ด์ฉ์ ๊ฐฑ์ ํ๊ธฐ ์ํด ์ฌ์ฉํ๋ค. (๋ฐ์ดํฐ ์ ์ฒด๋ฅผ ๋ฐ๊ฟ ๋) |
PATCH | Update : ์ ๋ณด ์ ๋ฐ์ดํธ, ์ฃผ๋ก ๋ด์ฉ์ ๊ฐฑ์ ํ๊ธฐ ์ํด ์ฌ์ฉํ๋ค. (๋ฐ์ดํฐ ์ผ๋ถ๋ง ๋ฐ๊ฟ ๋) |
DELETE | Delete : ์ ๋ณด ์ญ์ , (์์ ์ฑ ๋ฌธ์ ๋ก ๋๋ถ๋ถ ์๋ฒ์์ ๋นํ์ฑํํ๋ค.) |
1.ย Server-Client (์๋ฒ-ํด๋ผ์ด์ธํธ ๊ตฌ์กฐ)
- ์์์ด ์๋ ์ชฝ์ด Server, ์์์ ์์ฒญํ๋ ์ชฝ์ด Client๊ฐ ๋ฉ๋๋ค.
- REST Server๋ API๋ฅผ ์ ๊ณตํ๊ณ ๋น์ฆ๋์ค ๋ก์ง ์ฒ๋ฆฌ ๋ฐ ์ ์ฅ์ ์ฑ ์์ง๊ณ ,
- Client๋ ์ฌ์ฉ์ ์ธ์ฆ์ด๋ context( ์ธ์ , ๋ก๊ทธ์ธ ์ ๋ณด ) ๋ฑ์ ์ง์ ๊ด๋ฆฌํ๊ณ ์ฑ ์์ง๋๋ค.
- ์ญํ ์ ํ์คํ ๊ตฌ๋ถ์ํด์ผ๋ก์จ ์๋ก ๊ฐ์ ์์กด์ฑ์ ์ค์ ๋๋ค.
2.ย Stateless (๋ฌด์ํ)
- HTTP ํ๋กํ ์ฝ์ Stateless Protocol์ด๋ฏ๋ก REST ์ญ์ ๋ฌด์ํ์ฑ์ ๊ฐ์ต๋๋ค.
- Client์ context๋ฅผ Server์ ์ ์ฅํ์ง ์์ต๋๋ค.
- ์ฆ, ์ธ์ ๊ณผ ์ฟ ํค์ ๊ฐ์ context ์ ๋ณด๋ฅผ ์ ๊ฒฝ์ฐ์ง ์์๋ ๋๋ฏ๋ก ๊ตฌํ์ด ๋จ์ํด์ง๋๋ค.
- Server๋ ๊ฐ๊ฐ์ ์์ฒญ์ ์์ ํ ๋ณ๊ฐ์ ๊ฒ์ผ๋ก ์ธ์ํ๊ณ ์ฒ๋ฆฌํฉ๋๋ค.
- ๊ฐ API ์๋ฒ๋ Client์ ์์ฒญ๋ง์ ๋จ์ ์ฒ๋ฆฌํฉ๋๋ค.
- ์ฆ, ์ด์ ์์ฒญ์ด ๋ค์ ์์ฒญ์ ์ฒ๋ฆฌ์ ์ฐ๊ด๋์ด์๋ ์๋ฉ๋๋ค. ( DB์ ์ํด ๋ฐ๋๋ ๊ฒ์ ํ์ฉ )
- Server์ ์ฒ๋ฆฌ ๋ฐฉ์์ ์ผ๊ด์ฑ์ ๋ถ์ฌํ๊ธฐ ๋๋ฌธ์ ์๋น์ค์ ์์ ๋๊ฐ ๋์์ง๋๋ค.
3.ย Cacheable (์บ์ ์ฒ๋ฆฌ ๊ธฐ๋ฅ)
- ์น ํ์ค HTTP ํ๋กํ ์ฝ์ ๊ทธ๋๋ก ์ฌ์ฉํ๋ฏ๋ก ์น์์ ์ฌ์ฉํ๋ ๊ธฐ์กด์ ์ธํ๋ผ๋ฅผ ๊ทธ๋๋ก ํ์ฉํ ์ ์์ต๋๋ค.
- ์ฆ, HTTP๊ฐ ๊ฐ์ง ๊ฐ์ฅ ๊ฐ๋ ฅํ ํน์ง ์ค ํ๋์ธ ์บ์ฑ ๊ธฐ๋ฅ์ ์ ์ฉํ ์ ์์ต๋๋ค.
- HTTP ํ๋กํ ์ฝ ํ์ค์์ ์ฌ์ฉํ๋ Last-Modified Tag ๋๋ E-Tag๋ฅผ ์ด์ฉํด ์บ์ฑ์ ๊ตฌํํฉ๋๋ค.
- ๋๋์ ์์ฒญ์ ํจ์จ์ ์ผ๋ก ์ฒ๋ฆฌํ ์ ์์ต๋๋ค.
4.ย Layered System (๊ณ์ธต ๊ตฌ์กฐ)
- Client๋ REST API Server๋ง ํธ์ถํฉ๋๋ค.
- REST Server๋ ๋ค์ค ๊ณ์ธต์ผ๋ก ๊ตฌ์ฑ๋ ์ ์์ต๋๋ค.
- ๋ณด์, ๋ก๋ ๋ฐธ๋ฐ์ฑ, ์ํธํ ๋ฑ์ ์ํ ๊ณ์ธต์ ์ถ๊ฐํ์ฌ ๊ตฌ์กฐ๋ฅผ ๋ณ๊ฒฝํ ์ ์์ต๋๋ค.
- Proxy, Gateway์ ๊ฐ์ ๋คํธ์ํฌ ๊ธฐ๋ฐ์ ์ค๊ฐ๋งค์ฒด๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค.
- ํ์ง๋ง Client๋ Server์ ์ง์ ํต์ ํ๋์ง, ์ค๊ฐ ์๋ฒ์ ํต์ ํ๋์ง๋ ์ ์ ์์ต๋๋ค.
5.ย Uniform Interface (์ธํฐํ์ด์ค ์ผ๊ด์ฑ)
- URI๋ก ์ง์ ํ Resource์ ๋ํ ์์ฒญ์ ํต์ผ๋๊ณ , ํ์ ์ ์ผ๋ก ์ํํ๋ ์ํคํ ์ฒ ์คํ์ผ์ ์๋ฏธํฉ๋๋ค.
- HTTP ํ์ค ํ๋กํ ์ฝ์ ๋ฐ๋ฅด๋ ๋ชจ๋ ํ๋ซํผ์์ ์ฌ์ฉ์ด ๊ฐ๋ฅํ๋ฉฐ, Loosely Coupling(๋์จํ ๊ฒฐํจ) ํํ๋ฅผ ๊ฐ์ต๋๋ค.
- ์ฆ, ํน์ ์ธ์ด๋ ๊ธฐ์ ์ ์ข ์๋์ง ์์
6.ย Self-Descriptiveness (์์ฒด ํํ)
- ์์ฒญ ๋ฉ์์ง๋ง ๋ณด๊ณ ๋ ์ฝ๊ฒ ์ดํดํ ์ ์๋ ์์ฒด ํํ ๊ตฌ์กฐ๋ก ๋์ด์์ต๋๋ค.
- ์ฅ์
- HTTP ํ๋กํ ์ฝ์ ์ธํ๋ผ๋ฅผ ๊ทธ๋๋ก ์ฌ์ฉํ๋ฏ๋ก REST API ์ฌ์ฉ์ ์ํ ๋ณ๋์ ์ธํ๋ผ๋ฅผ ๊ตฌ์ถํ ํ์๊ฐ ์๋ค.
- HTTP ํ๋กํ ์ฝ์ ํ์ค์ ์ต๋ํ ํ์ฉํ์ฌ ์ฌ๋ฌ ์ถ๊ฐ์ ์ธ ์ฅ์ ์ ํจ๊ป ๊ฐ์ ธ๊ฐ ์ ์๊ฒ ํด์ค๋ค.
- HTTP ํ์ค ํ๋กํ ์ฝ์ ๋ฐ๋ฅด๋ ๋ชจ๋ ํ๋ซํผ์์ ์ฌ์ฉ์ด ๊ฐ๋ฅํ๋ค.
- REST API ๋ฉ์์ง๊ฐ ์๋ํ๋ ๋ฐ๋ฅผ ๋ช ํํ๊ฒ ๋ํ๋ด๋ฏ๋ก ์๋ํ๋ ๋ฐ๋ฅผ ์ฝ๊ฒ ํ์ ํ ์ ์๋ค.
- ์๋ฒ์ ํด๋ผ์ด์ธํธ ์ญํ ์ ๋ช ํํ๊ฒ ๋ถ๋ฆฌ
- ๋จ์
- ํ์ค์ด ์กด์ฌํ์ง ์์
- ์ฌ์ฉํ ์ ์๋ ๋ฉ์๋๊ฐ 4๊ฐ์ง(HTTP Method) ๋ฟ
- ๊ตฌํ ๋ธ๋ผ์ฐ์ ์์ ์์ง ์ ๋๋ก ์ง์ํด์ฃผ์ง ๋ชปํ๋ ๋ถ๋ถ์ด ์กด์ฌ
- PUT, DELETE๋ฅผ ์ฌ์ฉํ์ง ๋ชปํ๋ ์
references
https://dev-coco.tistory.com/97
https://velog.io/@seokkitdo/Network-REST๋-REST-API๋-RESTful์ด๋