ํ๋ก ํธ์๋์ ๋ฐฑ์๋๊ฐ ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ์ผ๋ฉฐ ์๋ํ๋ ์น ํ๊ฒฝ์์ API๋ ๋น ์ง ์ ์๋ ๊ฐ๋ ์ด๋ค. API์ REST API์ ๋ํ ๋ด์ฉ์ ๋ฐฐ์ฐ๊ณ ์ ๋ฆฌํด๋ณด์๋ค.
๐ API
ํ๋ก๊ทธ๋จ ๊ฐ ์ํธ์์ฉ์ ๋์์ฃผ๋ ์ธํฐํ์ด์ค
API๋ ์๋ก ๋ค๋ฅธ ์ํํธ์จ์ด๊ฐ ์๋ก ์ํตํ ์ ์๊ฒ ํด์ฃผ๋ ํต๋ก ์ญํ ์ ํ๋ค.
์ธํฐํ์ด์ค๋?
๋ ๊ฐ์ฒด ์ฌ์ด๋ฅผ ์ค์ฌํ๊ณ ์ฐ๊ฒฐํ๋ ๋งค๊ฐ
์๋ฅผ ํ์ด, ์ฐ๋ฆฌ๊ฐ ์ค๋งํธํฐ์ ์ฌ์ฉํ ๋๋ ๋ฒํผ์ด๋ ํ๋ฉด์ ํฐ์นํ๋ฉด์ ์ฌ์ฉํ๋ค. ์ด๋ ๊ฒ ์ฌ๋-๊ธฐ๊ธฐ ์ฌ์ด๋ฅผ ์ฐ๊ฒฐํด์ฃผ๋ ์ธํฐํ์ด์ค๋ฅผ GUI๋ผ๊ณ ํ๋ค.
- GUI: ๋ฒํผ, ์์ด์ฝ ๋ฑ ๊ทธ๋ํฝ ์์๋ก ์ ์ดํ๋ ์ธํฐํ์ด์ค
- CLI: ํ ์คํธ ๋ช ๋ น์ด๋ก ์ปดํจํฐ์ ์ํตํ๋ ์ธํฐํ์ด์ค
๐ API๋ ๊ฐ๋ฐ์์ ์๋ฒ, ๋๋ ํ๋ก๊ทธ๋จ๊ณผ ํ๋ก๊ทธ๋จ ์ฌ์ด๋ฅผ ์ฐ๊ฒฐํ๋ ์ธํฐํ์ด์ค
๋ฐฑ์๋ ๊ฐ๋ฐ์์ API
๋ฐฑ์๋ ๊ฐ๋ฐ์๋ ๋น์ฆ๋์ค ๋ก์ง์ ์ฒ๋ฆฌํ๊ณ , ์ด ๋ก์ง์ ์ธ๋ถ์์ ์ฌ์ฉํ ์ ์๋๋ก API๋ก ๋ง๋ค์ด ์ ๊ณตํ๋ค.
๐ REST API
API์๋ ์ฌ๋ฌ ์ข ๋ฅ๊ฐ ์๋๋ฐ, ์น ๊ฐ๋ฐ์์๋ ๋๋ถ๋ถ REST API๋ฅผ ์ฌ์ฉํ๋ค.
REST๋?
REprisentational State Transfer, HTTP ํต์ ์์ ์์์ ํจ์จ์ ์ผ๋ก ์ฃผ๊ณ ๋ฐ๊ธฐ ์ํ ์ํคํ ์ฒ ์คํ์ผ
REST API๋ฅผ ๋ง๋ ๋ค๋ ๊ฑด, REST ๊ท์น์ ์ ์งํจ API๋ฅผ ๋ง๋ ๋ค๋ ๋ป์ด๋ค.
๐ REST API = HTTP ๊ท์ฝ์ ์ ์ง์ผ ๋ง๋ API
RESTful์ด๋?
REST๋งํผ RESTful์ ๋ง์ด ๋ค์ด๋ดค์ ๊ฒ์ด๋ค.
REST ์์น์ ์ ์ง์ผ ๊ตฌํํ API๋ฅผ RESTful API๋ผ๊ณ ํ๋ค.
"RESTful"ํ๋ค๋ ๊ฒ์ ์ค๊ณ๊ฐ ๊น๋ํ๊ณ , HTTP ํ๋กํ ์ฝ์ ์ ํ์ฉํ๊ณ ์์์ ์๋ฏธํ๋ค.
HTTP์ REST API
์น์ ์ธํฐ๋ท์ด๋ผ๋ ๋คํธ์ํฌ ์์์ ์๋ํ๋ค. ์ธํฐ๋ท์์ ์ ๋ณด๋ฅผ ์ฃผ๊ณ ๋ฐ์ผ๋ ค๋ฉด ๋ฐ๋์ ๊ท์น์ด ํ์ํ๋ฐ, ์ด ๋ ์ฌ์ฉํ๋ ๊ท์น์ด ๋ฐ๋ก HTTP(HyperText Transfer Protocol)์ด๋ค.
REST API๋ ์ด HTTP ์์์ ์๋ํ๋ฉฐ, ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ๊ธฐ ์ํด ๋ค์ ์์๋ค์ ์ฌ์ฉํ๋ค.
- ์ฃผ์(URL): ์ด๋ค ๋ฆฌ์์ค์ ์ ๊ทผํ ์ง ๋ํ๋ธ๋ค.
- HTTP ๋ฉ์๋: ์ด๋ค ๋์์ ํ ์ง ๋ํ๋ธ๋ค(GET, POST, PUT, DELETE ๋ฑ)
- ๋ฐ์ดํฐ: ์๋ฒ์ ์ ๋ฌํ๊ฑฐ๋, ์๋ฒ๋ก๋ถํฐ ๋ฐ์์ฌ ์ค์ ์ ๋ณด
REST API์ ํน์ง
REST API๋ ๋ค์ ํน์ง์ ๊ฐ์ง๋ค.
1. ํด๋ผ์ด์ธํธ-์๋ฒ ๊ตฌ์กฐ
์ฌ์ฉ์ ์ธํฐํ์ด์ค์ ๋ฐ์ดํฐ ์ ์ฅ/์ฒ๋ฆฌ๋ฅผ ๋ช
ํํ ๋ถ๋ฆฌํ๋ค.
2. ๋ฌด์ํ์ฑ(Stateless)
์๋ฒ๋ ์์ฒญ ๊ฐ์ ์ํ๋ฅผ ์ ์ฅํ์ง ์๋๋ค.
๋ชจ๋ ์์ฒญ์ ํ์ํ ์ ๋ณด๋ฅผ ๋
๋ฆฝ์ ์ผ๋ก ๋ด๊ณ ์์ด์ผ ํ๋ค.
3. ์บ์ ๊ฐ๋ฅ(Cachealbe)
์๋ต์ ์บ์๊ฐ ๊ฐ๋ฅํ๊ฒ ์ค๊ณํ ์ ์์ด ์ฑ๋ฅ ํฅ์์ ๋์์ด ๋๋ค.
4. ๊ณ์ธตํ ๊ตฌ์กฐ(Layered System)
ํด๋ผ์ด์ธํธ๋ ์ค๊ฐ์๋ฒ(ํ๋ก์, ๋ก๋ ๋ฐธ๋ฐ์)๋ฅผ ๊ฑฐ์ณ ์์ฒญํด๋ ๋ฌธ์ ์์ด ์๋ํด์ผ ํ๋ค.
5. ์ผ๊ด๋ ์ธํฐํ์ด์ค(Uniform Interface)
REST์ ํต์ฌ ์์น์ผ๋ก, ๋ชจ๋ ๋ฆฌ์์ค๋ URI๋ก ์๋ณ๋๊ณ , HTTP ๋ฉ์๋๋ก ํ์๋ฅผ ํํํ๋ค.
URI
โญ Uniform Resource Identifier, ์ธํฐ๋ท ์์์ ์๋ณํ๊ธฐ ์ํ ํตํฉ ์์ ์๋ณ์
REST API ์ค๊ณ ๊ท์น
REST API๋ฅผ ์ฌ์ฉํ ๋๋ ๋ค์๊ณผ ๊ฐ์ URL ์ค๊ณ ๊ท์น์ ์ง์ผ์ผ ํ๋ค.
- ์๋ฌธ์๋ง ์ฌ์ฉ
- ์ธ๋์ค์ฝ์ด(
-
) ๋์ ํ์ดํ(-
) ์ฌ์ฉ - ๋ง์ง๋ง์ ์ฌ๋์(
/
)๋ฅผ ๋ถ์ด์ง ์์ - URL์ ํ์(๋์ฌ)๋ฅผ ๋ฃ์ง ์์ -
/getProducts
โ,/products
โ - ํ์ผ ํ์ฅ์๋ฅผ ์ฌ์ฉํ์ง ์์
- ๋ฆฌ์์ค๋ ๋ณต์ํ์ผ๋ก ์์ฑ -
/product
โ,/products
โ
REST API ์ค๊ณ ์์
http://localhost:8888/์ ์ฒด ์ํ ์กฐํ
http://localhost:8888/์ํ ๋ฑ๋ก
http://localhost:8888/์ ์ฒด ์ํ ์ญ์
์ด์ฒ๋ผ ๋์ํ๋ API๋ฅผ ์ค๊ณํด๋ณด์.
GET /products -> ์ ์ฒด ์ํ ์กฐํ
POST /product -> ์ํ ๋ฑ๋ก
DELETE /products -> ์ ์ฒด ์ํ ์ญ์
์ด๋ ๊ฒ ์ค๊ณํ ์ ์๋ค.
๋ํ ๋ง์ฝ ํ๋์ ์ํ๋ง ์กฐํํ๊ณ ์ถ๋ค๋ฉด,
GET /products/1
GET /products/2
์ด๋ ๊ฒ ID ๊ฐ์ URL์ ํฌํจ์์ผ, ๊ฐ์ API ์๋ํฌ์ธํธ ๊ตฌ์กฐ๋ฅผ ์ ์งํ๋ฉด์๋ ์ ๋์ ์ธ ์์ฒญ์ด ๊ฐ๋ฅํ๋ค.
์๋ํฌ์ธํธ
โญ ํด๋ผ์ด์ธํธ๊ฐ ์๋ฒ์ ์์ฒญ์ ๋ณด๋ด๋ URL ๊ฒฝ๋ก
API ๊ฐ๋ ์ ๋ง๋ค๊ณ , API ์ค๊ณ ์์น์ ๋ฐฐ์ ๋ค. ๋์ฌ๋ฅผ ์ฐ์ง ์๋๋ค๋๊ฒ ์์ง ์ต์ํ์ง ์๋ค. ์ฌ๋ฌ๊ฐ์ง API ๋ฌธ์๋ฅผ ๋ณด๊ณ , API ์ค๊ณ์ ๋ํ ๊ฐ์ ์ก์๋ด์ผ๊ฒ ๋ค.