๐คREST vs REST API vs RESTful API
REST : ์์์ ์ด๋ฆ์ผ๋ก ๊ตฌ๋ถํด ํด๋น ์์์ ์ํ(์ ๋ณด)๋ฅผ ์ฃผ๊ณ ๋ฐ๋ ๋ชจ๋ ๊ฒ
REST API : REST๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์๋น์ค API๋ฅผ ๊ตฌํํ ๊ฒ
RESTful API : REST์ ์ค๊ณ ๊ท์น์ ์ ์ง์ผ์ ์ค๊ณ๋ API (REST์ ์๋ฆฌ๋ฅผ ์ ๋ฐ๋ฅด๋ ์์คํ
)
API (Application Programming Interface)
- ์์ฉ ํ๋ก๊ทธ๋จ์์ ์ฌ์ฉํ ์ ์๋๋ก ์ด์์ฒด์ ๋ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๊ฐ ์ ๊ณตํ๋ ๊ธฐ๋ฅ์ ์ ์ดํ ์ ์๊ฒ ๋ง๋ ์ธํฐํ์ด์ค
- ์์ฉํ๋ก๊ทธ๋จ์์ ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ๊ธฐ ์ํ ๋ฐฉ๋ฒ์ผ๋ก, ์ด๋ค ์ฌ์ดํธ์์ ๋ฐ์ดํฐ๋ฅผ ๊ณต์ ํ ๊ฒฝ์ฐ ์ด๋ ํ ๋ฐฉ์์ผ๋ก ์ ๋ณด๋ฅผ ์์ฒญํด์ผ ํ๋์ง, ์ด๋ ํ ๋ฐ์ดํฐ๋ฅผ ์ ๊ณต ๋ฐ์ ์ ์์์ง์ ๋ํ ๊ท๊ฒฉ
๐REST (Representational State Transfer)
-
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)
๊ตฌ์ฑ ์์
- ์์(Resource) : HTTP URI
- Client๋ URI๋ฅผ ์ด์ฉํด ์์์ ์ง์ ํ๊ณ ํด๋น ์์์ ์ํ(์ ๋ณด)์ ๋ํ ์กฐ์์ Server์ ์์ฒญํ๋ค.
- ex) '/member/:member_id'
- ์์์ ๋ํ ํ์(Verb) : HTTP Method
- ํํ (Representations) : HTTP Message PayLoad
- Client์ Server๊ฐ ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ๋ ํํ
- JSON, XML์ ํตํด ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ๋ ๊ฒ์ด ์ผ๋ฐ์
ํน์ง
1. Server-Client (์๋ฒ-ํด๋ผ์ด์ธํธ ๊ตฌ์กฐ)
- ์์์ด ์๋ ์ชฝ์ด Server, ์์์ ์์ฒญํ๋ ์ชฝ์ด Client
- Server : API ์ ๊ณต, ๋น์ฆ๋์ค ๋ก์ง ์ฒ๋ฆฌ ๋ฐ ์ ์ฅ
- Client : ์ฌ์ฉ์ ์ธ์ฆ, context (์ธ์
, ๋ก๊ทธ์ธ ์ ๋ณด) ๋ฑ์ ๊ด๋ฆฌ
- ์ญํ ์ ๊ตฌ๋ถํจ์ผ๋ก์จ ์๋ก ๊ฐ์ ์์กด์ฑ์ ์ค์ธ๋ค.
2. Stateless (๋ฌด์ํ)
- HTTP ํ๋กํ ์ฝ์ ๊ธฐ๋ณธ์ ์ผ๋ก ๋ฌด์ํ์ด๋ค. REST ์ญ์ HTTP๋ฅผ ๊ธฐ๋ณธ์ผ๋ก ํ๊ธฐ ๋๋ฌธ์ ๋ฌด์ํ์ด๋ค.
- ๋ฌด์ํ๋ ํด๋ผ์ด์ธํธ์ ์ํ(State)๋ฅผ ์๋ฒ์ ์ ์ฅํ์ง ์๋๋ค๋ ๋ป
- Client์ context๋ฅผ Server์ ์ ์ฅํ์ง ์๋๋ค.
- Server๋ ๊ฐ๊ฐ์ ์์ฒญ์ ์์ ํ ๋ณ๊ฐ์ ๊ฒ์ผ๋ก ์ธ์ํ๊ณ ์ฒ๋ฆฌํ๋ค.
- ๊ฐ API ์๋ฒ๋ Client์ ์์ฒญ๋ง์ ๋จ์ ์ฒ๋ฆฌํ๋ค.
- ์ด์ ์์ฒญ์ด ๋ค์ ์์ฒญ์ ์ฒ๋ฆฌ์ ์ฐ๊ด๋์ง ์๋๋ค.
- Server์ ์ฒ๋ฆฌ ๋ฐฉ์์ ์ผ๊ด์ฑ์ ๋ถ์ฌํ๊ณ ๋ถ๋ด์ด ์ค์ด๋ ๋ค.
3. Cacheable (์บ์ ์ฒ๋ฆฌ ๊ธฐ๋ฅ)
- HTTP ํ๋กํ ์ฝ์ ๊ทธ๋๋ก ์ฌ์ฉํ๋ฏ๋ก ์บ์ฑ ๊ธฐ๋ฅ์ ์ ์ฉํ ์ ์๋ค.
- ๋๋์ ์์ฒญ์ ํจ์จ์ ์ผ๋ก ์ฒ๋ฆฌํ ์ ์๋ค.
- ์บ์ ์ฌ์ฉ์ ํตํด ์๋ต ์๊ฐ์ด ๋นจ๋ผ์ง๊ณ ์ฑ๋ฅ, ์๋ฒ์ ์์ ์ด์ฉ๋ฅ ์ ํฅ์์ํฌ ์ ์๋ค.
4. Layered System (๊ณ์ธต ๊ตฌ์กฐ)
- Client๋ REST API Server๋ง ํธ์ถํ๋ค.
- REST Server๋ ๋ค์ค ๊ณ์ธต์ผ๋ก ๊ตฌ์ฑ๋ ์ ์๋ค.
- ๋ณด์, ๋ก๋ ๋ฐธ๋ฐ์ฑ, ์ํธํ ๋ฑ์ ์ํ ๊ณ์ธต์ ์ถ๊ฐํ์ฌ ๊ตฌ์กฐ๋ฅผ ๋ณ๊ฒฝํ ์ ์๋ค.
- Proxy, Gateway์ ๊ฐ์ ๋คํธ์ํฌ ๊ธฐ๋ฐ์ ์ค๊ฐ๋งค์ฒด๋ฅผ ์ฌ์ฉํ ์ ์๋ค.
5. Code-On-Demand (Optional)
- Server๋ก๋ถํฐ ์คํฌ๋ฆฝํธ๋ฅผ ๋ฐ์์ Client์์ ์คํํ๋ค.
- ๋ฐ๋์ ์ถฉ์กฑํ ํ์๋ ์๋ค.
6. Uniform Interface (์ธํฐํ์ด์ค ์ผ๊ด์ฑ)
- URI๋ก ์ง์ ํ Resource์ ๋ํ ์์ฒญ์ ํต์ผ๋๊ณ ํ์ ์ ์ธ ์ธํฐํ์ด์ค๋ก ์ํํ๋ค.
- HTTP ํ์ค ํ๋กํ ์ฝ์ ๋ฐ๋ฅด๋ ๋ชจ๋ ํ๋ซํผ์์ ์ฌ์ฉ์ด ๊ฐ๋ฅํ๋ค. ๋ฐ๋ผ์ ํน์ ์ธ์ด๋ ๊ธฐ์ ์ ์ข
์๋์ง ์๋๋ค.
๐REST API
- REST๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์๋น์ค API๋ฅผ ๊ตฌํํ ๊ฒ
- ์ต๊ทผ OpenAPI(๋๊ตฌ๋ ์ฌ์ฉํ ์ ์๋๋ก ๊ณต๊ฐ๋ API: ๊ตฌ๊ธ ๋งต, ๊ณต๊ณต ๋ฐ์ดํฐ ๋ฑ), ๋ง์ดํฌ๋ก ์๋น์ค(ํ๋์ ํฐ ์ดํ๋ฆฌ์ผ์ด์
์ ์ฌ๋ฌ ๊ฐ์ ์์ ์ดํ๋ฆฌ์ผ์ด์
์ผ๋ก ์ชผ๊ฐ์ด ๋ณ๊ฒฝ๊ณผ ์กฐํฉ์ด ๊ฐ๋ฅํ๋๋ก ๋ง๋ ์ํคํ
์ฒ) ๋ฑ์ ์ ๊ณตํ๋ ๊ธฐ์
๋๋ถ๋ถ์ REST API๋ฅผ ์ ๊ณตํ๋ค.
ํน์ง
- ๊ฐ ์์ฒญ์ด ์ด๋ค ๋์์ด๋ ์ ๋ณด๋ฅผ ์ํ ๊ฒ์ธ์ง๋ฅผ ๊ทธ ์์ฒญ์ ๋ชจ์ต ์์ฒด๋ก ์ถ๋ก ์ด ๊ฐ๋ฅํ๋ค.
๊ธฐ๋ณธ ๊ท์น
- URI๋ ์ ๋ณด์ ์์์ ํํํด์ผ ํ๋ค.
- ์์์ ๋ํ ํ์๋ HTTP Method(GET, POST, PUT, PATCH, DELETE)๋ก ํํํ๋ค.
- ํ์(Method)๋ URI์ ํฌํจํ์ง ์๋๋ค.
์ค๊ณ ๊ท์น
- URI๋ ๋ช
์ฌ๋ฅผ ์ฌ์ฉํ๋ค. (๋์ฌ ์ฌ์ฉ X)
- ์ฌ๋์( / )๋ก ๊ณ์ธต ๊ด๊ณ๋ฅผ ํํํ๋ค.
- URI ๋ง์ง๋ง์ ์ฌ๋์ ( / )๋ฅผ ์ฌ์ฉํ์ง ์๋๋ค.
- ์ธ๋๋ฐ( _ ) ๋์ ํ์ดํ( - )์ ์ฌ์ฉํ๋ค.
- URI๋ ์๋ฌธ์๋ก๋ง ๊ตฌ์ฑํ๋ค.
- ํ์ผํ์ฅ์๋ URI์ ํฌํจํ์ง ์๋๋ค.
- ํ์๋ฅผ ํฌํจํ์ง ์๋๋ค. (Bad ex. "http://y.com/delete-post/1")
- HTTP ์๋ต ์ํ ์ฝ๋ ์ฌ์ฉ
๐ก URI๋ ์ ๋ณด์ ์์๋ง ํํํด์ผ ํ๋ฉฐ, ์์์ ํ์๋ HTTP Method์ ๋ช
์ํ๋ค!
๐RESTful API
RESTful์ด๋ REST์ ์ค๊ณ ๊ท์น์ ์ ์ง์ผ์ ์ค๊ณ๋ API๋ก, REST์ ์๋ฆฌ๋ฅผ ๋ฐ๋ฅด๋ ์์คํ
์ ์๋ฏธํ๋ค.
REST๋ฅผ ์ฌ์ฉํ๋ค ํ์ฌ ๋ชจ๋๊ฐ RESTful ํ ๊ฒ์ด ์๋๋ผ REST API์ ์ค๊ณ ๊ท์น์ ์ฌ๋ฐ๋ฅด๊ฒ ์งํจ ์์คํ
์ RESTfulํ๋ค ๋งํ ์ ์๋ค.
- CRUD ๊ธฐ๋ฅ์ ๋ชจ๋ POST๋ก ์ฒ๋ฆฌ ํ๋ API
- URI ๊ท์น์ ์ฌ๋ฐ๋ฅด๊ฒ ์งํค์ง ์์ API
์์ ์์์ฒ๋ผ REST API์ ์ค๊ณ ๊ท์น์ ์ฌ๋ฐ๋ฅด๊ฒ ์งํค์ง ๋ชปํ ์์คํ
์ REST API๋ฅผ ์ฌ์ฉํ์์ง๋ง RESTful ํ์ง ๋ชปํ ์์คํ
์ด๋ผ๊ณ ํ ์ ์๋ค.
๋ชฉ์
- ์ดํดํ๊ธฐ ์ฝ๊ณ ์ฌ์ฉํ๊ธฐ ์ฌ์ด REST API๋ฅผ ๋ง๋๋ ๊ฒ
โ ์ฑ๋ฅ์ด ์ค์ํ ์ํฉ์์๋ ๊ตณ์ด RESTfulํ API๋ฅผ ๊ตฌํํ ํ์๋ ์๋ค!
๐๋ฉด์ ๋๋น
Q. RESTful API๋ ๋ฌด์์ธ๊ฐ์?
A.