1. REST(REpresentational State Transfer)
REST๋ ์์์ ์ด๋ฆ์ผ๋ก ๊ตฌ๋ถํด ํด๋น ์์์ ์ํ๋ฅผ ์ฃผ๊ณ ๋ฐ๋ ๋ชจ๋ ๊ฒ์ ์๋ฏธํ๋ค. ์ฆ, ์์(resource)์ ํํ(representation)์ ์ํ ์ํ ์ ๋ฌ์ ๋ปํ๋ค.
- ์์: ํด๋น ์ํํธ์จ์ด๊ฐ ๊ด๋ฆฌํ๋ ๋ชจ๋ ๊ฒ์ด๋ค. Ex) ๋ฌธ์, ๊ทธ๋ฆผ, ๋ฐ์ดํฐ, ํด๋น ์ํํธ์จ์ด ์์ฒด ๋ฑ
- ํํ: ์์์ ํํํ๊ธฐ ์ํ ์ด๋ฆ์ด๋ค. Ex) DB์ ํ์ ์ ๋ณด๊ฐ ์์์ด๋ฉด students๋ฅผ ์์์ ํํ์ผ๋ก ์ ํ๋ค.
- ์ํ ์ ๋ฌ: ๋ฐ์ดํฐ๊ฐ ์์ฒญ๋๋ ์์ ์ ์์์ ์ํ๋ฅผ ์ ๋ฌํ๋ค. JSON ํน์ XML์ ํตํด ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ๋ ๊ฒ์ด ์ผ๋ฐ์ ์ด๋ค.
๊ธฐ๋ณธ์ ์ผ๋ก ์น์ ๊ธฐ์กด ๊ธฐ์ ๊ณผ HTTP ํ๋กํ ์ฝ์ ๊ทธ๋๋ก ํ์ฉํ๊ธฐ ๋๋ฌธ์ ์น์ ์ฅ์ ์ ์ต๋ํ ํ์ฉํ ์ ์๋ ์ํคํ ์ฒ ์คํ์ผ์ด๋ค.
1) ๊ตฌ์ฑ ์์
์ด๋ค ์์์ ๋ํด CRUD(Create, Read, Update, Delete) ์ฐ์ฐ์ ์ํํ๊ธฐ ์ํด URI(Resource)๋ก GET, POST ๋ฑ์ ๋ฐฉ์(Method)์ ์ฌ์ฉํ์ฌ ์์ฒญ์ ๋ณด๋ด๋ฉฐ, ์์ฒญ์ ์ํ ์์์ ํน์ ํ ํํ(Representation of Resource)๋ก ํํ๋๋ค.
- ์์(Resource)
- ๋ชจ๋ ์์์๋ ๊ณ ์ ํ ID๊ฐ ์กด์ฌํ๊ณ ์ด ์์์ Server์ ์กด์ฌํ๋ค.
- ์์์ ๊ตฌ๋ณํ๋ ID๋ '/exgroups/:exgroup_id'์ ๊ฐ์ HTTP URI์ด๋ค.
- Client๋ URI๋ฅผ ์ด์ฉํด ์์์ ์ง์ ํ๊ณ ํด๋น ์์์ ์ํ(์ ๋ณด)์ ๋ํ ์กฐ์์ Server์ ์์ฒญํ๋ค.
- ํ์(Verb)
- HTTP ํ๋กํ ์ฝ์ Method๋ฅผ ์ฌ์ฉํ๋ค.
- HTTP ํ๋กํ ์ฝ์ GET, POST, PUT, PATCH, DELETE์ Method๋ฅผ ์ ๊ณตํ๋ค. (CRUD)
- GET: Read, URI๊ฐ ๊ฐ์ง ์ ๋ณด๋ฅผ ๊ฒ์ํ๊ธฐ ์ํด ์๋ฒ์ ์์ฒญํ๋ค.
- POST: Create, ํด๋ผ์ด์ธํธ์์ ์๋ฒ๋ก ์ ๋ฌํ๋ ค๋ ์ ๋ณด๋ฅผ ๋ณด๋ธ๋ค.
- PUT: Update, ๋ฐ์ดํฐ ์ ์ฒด๋ฅผ ๊ฐฑ์ ํ๊ธฐ ์ํด ์ฌ์ฉํ๋ค.
- PATCH: Update, ๋ฐ์ดํฐ ์ผ๋ถ๋ง ๊ฐฑ์ ํ๊ธฐ ์ํด ์ฌ์ฉํ๋ค.
- DELETE: Delete, ์์ ์ฑ ๋ฌธ์ ๋ก ๋๋ถ๋ถ ์๋ฒ์์ ๋นํ์ฑํํ๋ค.
- ํํ(Representation of Resource)
- Client์ Server๊ฐ ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ๋ ํํ๋ก JSON, XML, TEXT, RSS ๋ฑ์ด ์๋ค.
- JSON, XML์ ํตํด ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ๋ ๊ฒ์ด ์ผ๋ฐ์ ์ด๋ค.
2) ํน์ง
- Server-Client(์๋ฒ-ํด๋ผ์ด์ธํธ ๊ตฌ์กฐ)
- ์์์ด ์๋ ์ชฝ์ด Server์ด๊ณ ์์์ ์์ฒญํ๋ ์ชฝ์ด Client์ด๋ค.
- Server๋ API๋ฅผ ์ ๊ณตํ๊ณ ๋น์ฆ๋์ค ๋ก์ง ์ฒ๋ฆฌ ๋ฐ ์ ์ฅ์ ์ฑ ์์ง๊ณ Client๋ ์ฌ์ฉ์ ์ธ์ฆ์ด๋ context(์ธ์ , ๋ก๊ทธ์ธ ์ ๋ณด) ๋ฑ์ ์ง์ ๊ด๋ฆฌํ๊ณ ์ฑ ์์ง๋ค.
- ์ญํ ์ ํ์คํ ๊ตฌ๋ถ์ํด์ผ๋ก์จ ์๋ก ๊ฐ์ ์์กด์ฑ์ ์ค์ผ ์ ์๋ค.
- Stateless(๋ฌด์ํ)
- HTTP ํ๋กํ ์ฝ์ Stateless Protocol์ด๋ฏ๋ก REST ์ญ์ ๋ฌด์ํ์ฑ์ ๊ฐ๋๋ค.
- Client์ context๋ฅผ Server์ ์ ์ฅํ์ง ์๋๋ค. ์ฆ, ์ธ์ ๊ณผ ์ฟ ํค์ ๊ฐ์ context ์ ๋ณด๋ฅผ ์ ๊ฒฝ ์ฐ์ง ์์๋ ๋๋ฏ๋ก ๊ตฌํ์ด ๋จ์ํด์ง๋ค.
- Server๋ ๊ฐ๊ฐ์ ์์ฒญ์ ์์ ํ ๋ณ๊ฐ์ ๊ฒ์ผ๋ก ์ธ์ํ๊ณ ์ฒ๋ฆฌํ๋ค.
- ๊ฐ API ์๋ฒ๋ Client์ ์์ฒญ๋ง์ ๋จ์ ์ฒ๋ฆฌํ๋ค. ์ฆ, ์ด์ ์์ฒญ์ด ๋ค์ ์์ฒญ์ ์ฒ๋ฆฌ์ ์ฐ๊ด๋์ด์๋ ์ ๋๋ค.
- Server์ ์ฒ๋ฆฌ ๋ฐฉ์์ ์ผ๊ด์ฑ์ ๋ถ์ฌํ๊ธฐ ๋๋ฌธ์ ์๋น์ค์ ์์ ๋๊ฐ ๋์์ง๋ค.
- Cacheable(์บ์ ์ฒ๋ฆฌ ๊ธฐ๋ฅ)
- ์น ํ์ค HTTP ํ๋กํ ์ฝ์ ๊ทธ๋๋ก ์ฌ์ฉํ๋ฏ๋ก ์น์์ ์ฌ์ฉํ๋ ๊ธฐ์กด์ ์ธํ๋ผ๋ฅผ ๊ทธ๋๋ก ํ์ฉํ ์ ์๋ค.
- ์ฆ, HTTP๊ฐ ๊ฐ์ง ๊ฐ์ฅ ๊ฐ๋ ฅํ ํน์ง ์ค ํ๋์ธ ์บ์ฑ ๊ธฐ๋ฅ์ ์ ์ฉํ ์ ์๋ค.
- HTTP ํ๋กํ ์ฝ ํ์ค์์ ์ฌ์ฉํ๋ Last-Modified Tag ๋๋ E-Tag๋ฅผ ์ด์ฉํด ์บ์ฑ์ ๊ตฌํํ๋ค.
- ๋๋์ ์์ฒญ์ ํจ์จ์ ์ผ๋ก ์ฒ๋ฆฌํ ์ ์๋ค.
- ์น ํ์ค HTTP ํ๋กํ ์ฝ์ ๊ทธ๋๋ก ์ฌ์ฉํ๋ฏ๋ก ์น์์ ์ฌ์ฉํ๋ ๊ธฐ์กด์ ์ธํ๋ผ๋ฅผ ๊ทธ๋๋ก ํ์ฉํ ์ ์๋ค.
- Layered System(๊ณ์ธต ๊ตฌ์กฐ)
- Client๋ REST API Server๋ง ํธ์ถํ๋ค.
- REST Server๋ ๋ค์ค ๊ณ์ธต์ผ๋ก ๊ตฌ์ฑ๋ ์ ์๋ค.
- ๋ณด์, ๋ก๋ ๋ฐธ๋ฐ์ฑ, ์ํธํ ๋ฑ์ ์ํ ๊ณ์ธต์ ์ถ๊ฐํ์ฌ ๊ตฌ์กฐ๋ฅผ ๋ณ๊ฒฝํ ์ ์๋ค.
- Proxy, Gateway์ ๊ฐ์ ๋คํธ์ํฌ ๊ธฐ๋ฐ์ ์ค๊ฐ ๋งค์ฒด๋ฅผ ์ฌ์ฉํ ์ ์๋ค.
- ํ์ง๋ง Client๋ Server์ ์ง์ ํต์ ํ๋์ง, ์ค๊ฐ ์๋ฒ์ ํต์ ํ๋์ง๋ ์ ์ ์๋ค.
- Uniform Interface(์ธํฐํ์ด์ค ์ผ๊ด์ฑ)
- URI๋ก ์ง์ ํ Resource์ ๋ํ ์์ฒญ์ ํต์ผ๋๊ณ ํ์ ์ ์ผ๋ก ์ํํ๋ ์ํคํ ์ฒ ์คํ์ผ์ ์๋ฏธํ๋ค.
- HTTP ํ์ค ํ๋กํ ์ฝ์ ๋ฐ๋ฅด๋ ๋ชจ๋ ํ๋ซํผ์์ ์ฌ์ฉ์ด ๊ฐ๋ฅํ๋ฉฐ, Loosely Coupling(๋์จํ ๊ฒฐํจ) ํํ๋ฅผ ๊ฐ๋๋ค. ์ฆ, ํน์ ์ธ์ด๋ ๊ธฐ์ ์ ์ข ์๋์ง ์๋๋ค.
- Self-Descriptiveness(์์ฒด ํํ)
- ์์ฒญ ๋ฉ์์ง๋ง ๋ณด๊ณ ๋ ์ฝ๊ฒ ์ดํดํ ์ ์๋ ์์ฒด ํํ ๊ตฌ์กฐ๋ก ๋์ด์๋ค.
2. REST API
REST API๋ REST์ ํน์ง์ ๊ธฐ๋ฐ์ผ๋ก ์๋น์ค API๋ฅผ ๊ตฌํํ ๊ฒ์ ๋งํ๋ค.
- ๊ฐ์ฅ ํฐ ํน์ง์ ๊ฐ ์์ฒญ์ด ์ด๋ค ๋์์ด๋ ์ ๋ณด๋ฅผ ์ํ ๊ฒ์ธ์ง๋ฅผ ๊ทธ ์์ฒญ์ ๋ชจ์ต ์์ฒด๋ก ์ถ๋ก ์ด ๊ฐ๋ฅํ๋ค๋ ์ ์ด๋ค.
- ์ต๊ทผ OpenAPI, ๋ง์ดํฌ๋ก ์๋น์ค ๋ฑ์ ์ ๊ณตํ๋ ๊ธฐ์ ๋๋ถ๋ถ์ REST API๋ฅผ ์ ๊ณตํ๋ค.
REST API ์ค๊ณ ์ ๊ฐ์ฅ ์ค์ํ ํญ๋ชฉ์ ๋ค์๊ณผ ๊ฐ๋ค.
์ฒซ ๋ฒ์งธ, URI๋ ์ ๋ณด์ ์์์ ํํํด์ผ ํ๋ค.
๋ ๋ฒ์งธ, ์์์ ๋ํ ํ์๋ HTTP Method(GET, POST, PUT, PATCH, DELETE)๋ก ํํํ๋ค.
3. RESTful API
RESTful์ REST์ ์ค๊ณ ๊ท์น์ ์ ์ง์ผ์ ์ค๊ณ๋ API๋ฅผ RESTfulํ API๋ผ๊ณ ํ๋ค. ์ฆ, REST์ ์๋ฆฌ๋ฅผ ์ ๋ฐ๋ฅด๋ ์์คํ ์ RESTful์ด๋ ์ฉ์ด๋ก ์ง์นญ๋๋ค.
- RESTfulํ๊ฒ ๋ง๋ API๋ ์์ฒญ์ ๋ณด๋ด๋ ์ฃผ์๋ง์ผ๋ก๋ ์ด๋ค ๊ฒ์ ์์ฒญํ๋์ง ํ์ ์ด ๊ฐ๋ฅํ๋ค.
- RESTful API๋ ์ดํดํ๊ธฐ ์ฝ๊ณ ์ฌ์ฉํ๊ธฐ ์ฌ์ด REST API๋ฅผ ๋ง๋๋ ๊ฒ์ด ๋ชฉ์ ์ด๋ค. ๋ง์ฝ, ์ฑ๋ฅ์ด ์ค์ํ ์ํฉ์ด๋ผ๋ฉด ๊ตณ์ด RESTful API๋ฅผ ๊ตฌํํ ํ์๋ ์๋ค.