RESTful API๋?
RESTful์ด๋?
๋ ์ปดํจํฐ ์์คํ
์ด ์ธํฐ๋ท์ ํตํด ์ ๋ณด๋ฅผ ์์ ํ๊ฒ ๊ตํ
ํ๊ธฐ ์ํด ์ฌ์ฉํ๋ ์ธํฐํ์ด์ค์ด๋ค.
๋๋ถ๋ถ์ ๋น์ฆ๋์ค ์ ํ๋ฆฌ์ผ์ด์
์ ๋ค์ํ ํ์คํฌ๋ฅผ ์ํํ๊ธฐ ์ํด ๋ค๋ฅธ ๋ด๋ถ ์ ํ๋ฆฌ์ผ์ด์
๋ฐ ์๋ ํํฐ ์ ํ๋ฆฌ์ผ์ด์
๊ณผ ํต์ ํด์ผ ํ๋๋ฐ, RESTful API
๋ ์์ ํ๊ณ ์ ๋ขฐ
ํ ์ ์์ผ๋ฉฐ ํจ์จ์ ์ธ ์ํํธ์จ์ด ํต์ ํ์ค
์ ๋ฐ๋ฅด๋ฏ๋ก ์ด๋ฌํ ์ ๋ณด ๊ตํ์ ์ง์
ํฉ๋๋ค.
RESTful์ ์์๊ฐ๊ธฐ ์ ์์๋์ด์ผ ํ REST๋?
HTTP URI
๋ฅผ ํตํด ์์์ ๋ช
์ํ๊ณ , HTTP Method(POST, GET, PUT, DELETE)๋ฅผ ํตํด ํด๋น ์์์ ๋ํ CRUD OPERATION์ ์ ์ฉํ๋ ๊ฒ์ ์๋ฏธํ๋ค.
์ฆ, REST
๋ ์์ ๊ธฐ๋ฐ์ ๊ตฌ์กฐ(ROA: Resource Oriented Architecture) ์ค๊ณ์ ์ค์ฌ
์ Resource๊ฐ ์๊ณ HTTP Method
๋ฅผ ํตํด
Resource๋ฅผ ์ฒ๋ฆฌํ๋๋ก ์ค๊ณ๋ ์ํคํ
์ณ
๋ฅผ ์๋ฏธํ๋ค.
์น์ ๋ชจ๋ ์์์ ๊ณ ์ ํ ID์ธ HTTP URI
๋ฅผ ๋ถ์ฌํ๋ค.
REST์ ๊ตฌ์ฑ
1. ์์(Resource) - URI
- ๋ชจ๋ ์์์ ๊ณ ์ ํ ID๊ฐ ์กด์ฌํ๊ณ , ์ด ์์์ Server์ ์กด์ฌํ๋ค.
- ์์์ ๊ตฌ๋ณํ๋ ID๋
/Developer/id/sany
์ ๊ฐ์HTTP URI
์ด๋ค.
2. ํ์ (Verb) - Http Method
- HTTP ํ๋กํ ์ฝ์
Method
๋ฅผ ์ฌ์ฉํ๋ค. - HTTP ํ๋กํ ์ฝ์ GET, POST, PUT, DELETE์ ๊ฐ์ ๋ฉ์๋๋ฅผ ์ ๊ณตํ๋ค.
3. ํํ (Representation of Resource)
Client
๊ฐ ์์์ ์ํ(์ ๋ณด)์ ๋ํ ์กฐ์์์์ฒญ(Request)
ํ๋ฉดServer
๋ ์ด์ ์ ์ ํ์๋ต(Representation)
์ ๋ณด๋ธ๋ค.- REST์์ ํ๋์ ์์์ JSON, XML, TEXT, RSS ๋ฑ ์ฌ๋ฌ ํํ์ Representation์ผ๋ก ๋ํ๋ผ ์ ์๋ค.
- ํ์ฌ๋
JSON์ผ๋ก ์ฃผ๊ณ ๋ฐ๋ ๊ฒ์ด ๋๋ถ๋ถ
์ด๋ค.
REST์ ํน์ง
1. Server-Client(์๋ฒ-ํด๋ผ์ด์ธํธ ๊ตฌ์กฐ)
2. Stateless(๋ฌด์ํ)
3. Cacheable(์บ์ ์ฒ๋ฆฌ ๊ฐ๋ฅ)
4. Layered System(๊ณ์ธตํ)
5. Uniform Interface(์ธํฐํ์ด์ค ์ผ๊ด์ฑ)
REST์ ์ฅ๋จ์
์ฅ์
HTTP ํ๋กํ ์ฝ์ ์ธํ๋ผ๋ฅผ ๊ทธ๋๋ก ์ฌ์ฉ
ํ๋ฏ๋ก REST API ์ฌ์ฉ์ ์ํ ๋ณ๋์ ์ธํ๋ผ๋ฅผ ๊ตฌ์ถํ ํ์๊ฐ ์๋ค.- HTTP ํ๋กํ ์ฝ์ ํ์ค์ ์ต๋ํ ํ์ฉํ์ฌ ์ฌ๋ฌ ์ถ๊ฐ์ ์ธ ์ฅ์ ์ ํจ๊ป ๊ฐ์ ธ๊ฐ ์ ์๊ฒ ํด ์ค๋ค.
HTTP ํ์ค ํ๋กํ ์ฝ์ ๋ฐ๋ฅด๋
๋ชจ๋ ํ๋ซํผ์์์ฌ์ฉ์ด ๊ฐ๋ฅ
ํ๋ค.- Hypermedia API์ ๊ธฐ๋ณธ์ ์ถฉ์คํ ์งํค๋ฉด์
๋ฒ์ฉ์ฑ์ ๋ณด์ฅ
ํ๋ค. - REST API ๋ฉ์์ง๊ฐ ์๋ํ๋ ๋ฐ๋ฅผ ๋ช
ํํ๊ฒ ๋ํ๋ด๋ฏ๋ก
์ฝ๊ฒ ํ์
ํ ์ ์๋ค. - ์ฌ๋ฌ ๊ฐ์ง ์๋น์ค ๋์์ธ์์ ์๊ธธ ์ ์๋
๋ฌธ์ ๋ฅผ ์ต์ํ
ํ๋ค. - ์๋ฒ์ ํด๋ผ์ด์ธํธ์
์ญํ ์ ๋ช ํํ๊ฒ ๋ถ๋ฆฌ
ํ๋ค.
๋จ์
- ํ์ค์ด ์์ฒด๊ฐ ์กด์ฌํ์ง ์์
์ ์๊ฐ ํ์
ํ๋ค. - HTTP Method
ํํ๊ฐ ์ ํ์
์ด๋ค. - ๋ธ๋ผ์ฐ์ ๋ฅผ ํตํด ํ
์คํธํ ์ผ์ด ๋ง์ ์๋น์ค๋ผ๋ฉด ์ฝ๊ฒ ๊ณ ์น ์ ์๋ URL๋ณด๋ค Header ์ ๋ณด์ ๊ฐ์ ์ฒ๋ฆฌํด์ผ ํ๋ฏ๋ก
์ ๋ฌธ์ฑ์ด ์๊ตฌ
๋๋ค. ๊ตฌํ ๋ธ๋ผ์ฐ์
์์ํธํ์ด ๋์ง ์์
์ง์ํด์ฃผ์ง ๋ชปํ๋ ๋์์ด ๋ง๋ค.(์ต์คํด๋ก์ด)
RESTful์ ๋ชฉ์
-
์ดํดํ๊ธฐ ์ฝ๊ณ ์ฌ์ฉํ๊ธฐ ์ฌ์ด REST API๋ฅผ ๋ง๋๋ ๊ฒ์ด๋ค.
-
RESTfulํ API๋ฅผ ๊ตฌํํ๋ ๊ทผ๋ณธ์ ์ธ ๋ชฉ์ ์
์ผ๊ด์ ์ธ ์ปจ๋ฒค์ ์ ํตํ API์ ์ดํด๋ ๋ฐ ํธํ์ฑ์ ๋์ด๋ ๊ฒ
์ด๋, ์ฑ๋ฅ์ด ์ค์ํ ์ํฉ์์๋ ๊ตณ์ด RESTfulํ API๋ฅผ ๊ตฌํํ ํ์๋ ์๋ค.
RESTful ํ์ง ๋ชปํ ๊ฒฝ์ฐ
- Ex1) CRUD ๊ธฐ๋ฅ์ ๋ชจ๋ POST๋ก๋ง ์ฒ๋ฆฌํ๋ API
- Ex2) route์ resource, id ์ธ์ ์ ๋ณด๊ฐ ๋ค์ด๊ฐ๋ ๊ฒฝ์ฐ(/students/updateName)
RESTful API๋ฅผ ์ฌ์ฉํ๋ฉด ์ด๋ค ์ด์ ์ด ์๋?
ํ์ฅ์ฑ
REST API๋ฅผ ๊ตฌํํ๋ ์์คํ
์ REST๊ฐ ํด๋ผ์ด์ธํธ-์๋ฒ ์ํธ ์์ฉ
์ ์ต์ ํ
ํ๊ธฐ ๋๋ฌธ์ ํจ์จ์ ์ผ๋ก ํฌ๊ธฐ ์กฐ์ ํ ์ ์๋ค.
๋ฌด์ํ
๋ ์๋ฒ๊ฐ ๊ณผ๊ฑฐ ํด๋ผ์ด์ธํธ ์์ฒญ ์ ๋ณด๋ฅผ ์ ์งํ ํ์๊ฐ ์๊ธฐ ๋๋ฌธ์ ์๋ฒ ๋ก๋๋ฅผ ์ ๊ฑฐํ๋ค.
์ ๊ด๋ฆฌ๋ ์บ์ฑ
์ ์ผ๋ถ ํด๋ผ์ด์ธํธ-์๋ฒ ์ํธ ์์ฉ์ ๋ถ๋ถ์ ์ผ๋ก ๋๋ ์์ ํ ์ ๊ฑฐํ๋ค. ์ด๋ฌํ ๋ชจ๋ ๊ธฐ๋ฅ์ ์ฑ๋ฅ์ ์ ํ์ํค๋ ํต์ ๋ณ๋ชฉ ํ์์ ์ผ์ผํค์ง ์
์ผ๋ฉด์ ํ์ฅ์ฑ์ ์ง์
ํ๋ค.
์ ์ฐ์ฑ
RESTful ์น ์๋น์ค๋ ์์ ํ ํด๋ผ์ด์ธํธ-์๋ฒ ๋ถ๋ฆฌ๋ฅผ ์ง์ํ๋ค.
๊ฐ ๋ถ๋ถ์ด ๋
๋ฆฝ์ ์ผ๋ก ๋ฐ์ ํ ์ ์๋๋ก ๋ค์ํ ์๋ฒ ๊ตฌ์ฑ ์์
๋ฅผ ๋จ์ํ
ํ๊ณ ๋ถ๋ฆฌ
ํ๋ค.
์๋ฒ ์ ํ๋ฆฌ์ผ์ด์ ์ ํ๋ซํผ ๋๋ ๊ธฐ์ ๋ณ๊ฒฝ์ ํด๋ผ์ด์ธํธ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ํฅ์ ์ฃผ์ง ์๋๋ค.
์ ํ๋ฆฌ์ผ์ด์
ํจ์๋ฅผ ๊ณ์ธตํ
ํ๋ ๊ธฐ๋ฅ์ ์ ์ฐ์ฑ์ ๋์ฑ ํฅ์
์ํจ๋ค.(Ex1 ๊ฐ๋ฐ์๋ ์ ํ๋ฆฌ์ผ์ด์
๋ก์ง์ ๋ค์ ์์ฑํ์ง ์๊ณ ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ณ์ธต์ ๋ณ๊ฒฝํ ์ ์๋ค.)
๋ ๋ฆฝ์ฑ
REST API๋ ์ฌ์ฉ๋๋ ๊ธฐ์ ๊ณผ ๋ ๋ฆฝ์ ์ด๋ค.
API ์ค๊ณ์ ์ํฅ์ ์ฃผ์ง ์๊ณ ๋ค์ํ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ก ํด๋ผ์ด์ธํธ ๋ฐ ์๋ฒ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ชจ๋ ์์ฑํ ์ ์๋ค.
๋ํ ํต์ ์ ์ํฅ์ ์ฃผ์ง ์๊ณ ์์ชฝ์ ๊ธฐ๋ณธ ๊ธฐ์ ์ ๋ณ๊ฒฝํ ์ ์๋ค.
REST API ์ค๊ณ๊ท์น
- URI๋ ๋์ฌ๋ณด๋ค๋ ๋ช ์ฌ๋ฅผ, ๋๋ฌธ์๋ณด๋ค๋ ์๋ฌธ์๋ฅผ ์ฌ์ฉํ์ฌ์ผ ํ๋ค.
- ์ฌ๋์( / )๋ก ๊ณ์ธต ๊ด๊ณ๋ฅผ ํํํ๋ค.
- URI์ ๋ง์ง๋ง์๋ ์ฌ๋์( / )๋ฅผ ๋ถ์ด์ง ์๋๋ค.
- ์ธ๋๋ฐ( _ ) ๋์ ํ์ดํฐ( - )์ ์ฌ์ฉํ๋ค.
- ๊ฐ๋ ์ฑ์ด ๋จ์ด์ง๋ ๊ฒฝ์ฐ ํ์ดํ( - )์ ์ฌ์ฉํ๋ค.
- ๋๋ฌธ์์ ์๋ฌธ์๋ก URI๋ฅผ ์ ์ํ๋ฉด ๊ธฐ์ตํ๊ธฐ ์ด๋ ค์ฐ๋ฉฐ ์๋ชป ์ ์ ๊ฐ๋ฅ์ฑ์ด ๋์์ง๋ค.
- ํ์ผํ์ฅ์๋ URI์ ํฌํจํ์ง ์๋๋ค
๋๋ง
REST API ์ค๊ณ๊ท์น์ ๋ฐ๋ผ RESTfulํ API๋ฅผ ๋ง๋ค์ ์๋๋ก ์ถ๊ฐ์ ์ผ๋ก ์ค์ต์ ์งํํด ๋ณด๋ ๊ธ์ ์์ฑํด ๋ณด์์ผ ๊ฒ ๋ค.
REST API๋ ๋์ฌ๋ก ์์ฑํ๋ ๊ฒ๋ณด๋ค๋ ๋ช ์ฌ๋ก ์์ฑํด ์ฃผ๋ ๊ฒ์ด ์ข๋ค.
์ฉ์ด์ ๋ฆฌ
API: ๋ค๋ฅธ ์ํํธ์จ์ด ์์คํ ๊ณผ ํต์ ํ๊ธฐ ์ํด ๋ฐ๋ผ์ผ ํ๋ ๊ท์น
REST(Representational State Transfer): API ์๋ ๋ฐฉ์์ ๋ํ ์กฐ๊ฑด์ ๋ถ๊ณผํ๋ ์ํํธ์จ์ด ์ํคํ
์ฒ -> REST API
์ RESTful API
๋ ๊ฐ์ ์๋ฏธ๋ก ์ฌ์ฉํ ์ ์๋ค.
CRUD Operation: CRUD๋ ๋๋ถ๋ถ์ ์ปดํจํฐ ์ํํธ์จ์ด๊ฐ ๊ฐ์ง๋ ๊ธฐ๋ณธ์ ์ธ ๋ฐ์ดํฐ ์ฒ๋ฆฌ ๊ธฐ๋ฅ์ธ Create(์์ฑ), Read(์ฝ๊ธฐ), Update(๊ฐฑ์ ), Delete(์ญ์ )๋ฅผ ๋ฌถ์ด์ ์ผ์ปซ๋ ๋ง๋ก REST์์์ CRUD Operation ๋์ ์์๋ ๋ค์๊ณผ ๊ฐ๋ค. Http Method์ ๋ํด์
- Create : ๋ฐ์ดํฐ ์์ฑ(POST)
- Read : ๋ฐ์ดํฐ ์กฐํ(GET)
- Update : ๋ฐ์ดํฐ ์์ (PUT, PATCH)
- Delete : ๋ฐ์ดํฐ ์ญ์ (DELETE)
- HEAD : header ์ ๋ณด ์กฐํ(HEAD)
๋ก๋๋ฐธ๋ฐ์ฑ: ์๋ฒ๊ฐ ์ฒ๋ฆฌํด์ผ ํ ์ ๋ฌด ํน์ ์์ฒญ(Load)์ ์ฌ๋ฌ ๋์ ์๋ฒ๋ก ๋๋์ด(Balancing) ์ฒ๋ฆฌํ๋ ๊ฒ์ ์๋ฏธ
PROXY ์๋ฒ: ๋ณด์์์ ๋ฌธ์ ๋ก ์ง์ ํต์ ํ ์ ์์๋ ์ค๊ณ ํด์ฃผ๋ ์๋ฒ
๊ฒ์ดํธ์จ์ด: ํ ๋คํธ์ํฌ(segment)์์ ๋ค๋ฅธ ๋คํธ์ํฌ๋ก ์ด๋ํ๊ธฐ ์ํ์ฌ ๊ฑฐ์ณ์ผ ํ๋ ์ง์ , ์๋ก ๋ค๋ฅธ ๋คํธ์ํฌ(๊ธฐ์ข ์ด ๋ค๋ฅธ ๋คํธ์ํฌ)๋ฅผ ์ฐ๊ฒฐ
์ฐธ๊ณ ๋งํฌ
RESTful API๋ ๋ฌด์์ ๋๊น?
Day1, 2-2. ๊ทธ๋ฐ REST API๋ก ๊ด์ฐฎ์๊ฐ
[Network] REST๋? REST API๋? RESTful์ด๋?