๋ชฉ์ฐจ
1. ์ฃผ์ ์ ์ ์ด์
2. API
- API์ ๊ฐ๋
- API์ ๊ธฐ๋ฅ
- API์ ํํ
- REST API
- API์ ์ข
๋ฅ
3. ์์ฝ ์ ๋ฆฌ ๋ฐ ๋ฉด์ ํ QnA
๋ฒ์ธ. ๋ณ๋์ IT์ฉ์ด
1. ์ฃผ์ ์ ์ ์ด์
IT์
๊ณ์์ API๋ผ๋ ์ฉ์ด๋ฅผ ์๋นํ ๋ง์ด ์ฌ์ฉํ๋ ๊ฒ์ ๋ชฉ๊ฒฉํ ์ ์๋ค. ๋ฌผ๋ก ์ด๋ฌํ ๋ฌธํ์ ์นํ์ ์ธ ๊ฐ๋ฐ์๋ผ๋ฉด ๋น์ฐํ ์ดํดํ๊ณ ๋์ด๊ฐ์ ๊ฒ์ด์ง๋ง, ์
๊ณ์ ์ฒ์ ์ง์
ํ ์ฌ๋์๊ฒ๋ ๋๋ฌด๋๋ ๋ฏ์ค์ ์ฉ์ด๋ผ๊ณ ์๊ฐํ๋ค. ํนํ, ํ์์ธ ๋ด๊ฐ ๊ทธ๋ฌ๋ค. ๊ทธ๋์ ์ด๋ฒ ๊ธฐํ์ API์ ๋ํ ๊ธฐ์ด์ ์ธ ๊ฐ๋
์ ์ฌ์ด ๋น์ ์ ๋น๋์ด ์ค๋ช
ํ๊ณ ์ ํ๋ค.
2. API
2-1. API์ ๊ฐ๋
- API๋ Application Programming Interface์ ์์๋ฆฌ๋ฅผ ์กฐํฉํ์ฌ ๋ง๋ ์ฉ์ด์ด๋ค.
- Application์ ๊ธฐ๋ฅ์ด๋ ์์ฉ ํ๋ก๊ทธ๋จ์ ์๋ฏธํ๋ฉฐ, Interface๋ ์ํธ์์ฉ์ ์๋ฏธํ๋ค.
- ์ฆ, API๋ ์์ฉ ํ๋ก๊ทธ๋จ์ ํ๋ก๊ทธ๋๋ฐํ๊ธฐ ์ํด ์๋ก ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ๋ ์ํธ์์ฉ์ ๋ฐฉ๋ฒ์ด๋ผ๊ณ ์ ์ํ ์ ์๋ค.
2-2. API์ ๊ธฐ๋ฅ
- API๋ฅผ ์ค์์ ์๋ก ์ค๋ช
ํ๋ค๋ฉด, ์๋น์ ๋ฉ๋ด๊ฐ ์ ํ ๋ฉ๋ดํ์ด๋ผ๊ณ ๋น๋์ด ํํํ ์ ์๋ค.
- ์ฌ๊ธฐ์ ๋ฉ๋ด๋ API๊ฐ ์ ๊ณตํ๋ ๋ฐ์ดํฐ ํ์์ ์ ๋ณด๋ผ๊ณ ์๊ฐํ๋ฉด ๋๋ค.
- ์๋น์ ๋ค์ด์จ ์๋์ ๋ฉ๋ดํ์ ๋ณด๊ณ ์ฃผ๋ฐฉ์ฅ์๊ฒ ๋ฉ๋ด๋ฅผ ์์ฒญํ๊ณ , ์ฃผ๋ฐฉ์ฅ์ ๊ทธ ๋ฉ๋ด์ ๋ง๋ ์์์ ์๋์๊ฒ ์ ๊ณตํ๋ค.
- ๋ฐ์ดํฐ๋ฅผ ์์ฒญํ๋ ํด๋ผ์ด์ธํธ(ํ๋ก ํธ์๋)์๊ฒ ์๋ฒ(๋ฐฑ์๋)๊ฐ ๋ฐ์ดํฐ๋ฅผ ์ ๊ณตํด์ฃผ๋ฉฐ, ์ด๋ฌํ ์ํธ์์ฉ์ ๊ฐ๋ฅํ๊ฒ ํด์ฃผ๋ ๊ฒ์ด API์ด๋ค.
2-3. API์ ํํ
- ์น์์ ์ฌ์ฉํ๋ API๋ฅผ '์น API'๋ผ๊ณ ๋ถ๋ฅด๋ฉฐ, ๋ชจ๋ฐ์ผ์์ ์ฌ์ฉํ๋ API๋ฅผ '๋ชจ๋ฐ์ผ API'๋ผ๊ณ ๋ถ๋ฅด๋ฉฐ, ํ๋ก ํธ์๋ ๊ฐ๋ฐ์๊ฐ ์ฃผ๋ก ์ ํ๋ API๋ HTTP API์ด๋ค.
- HTTP๋ HyperText Transfer Protocol์ ์ฝ์๋ก, ์ธํฐ๋ท์์ ์นํ์ด์ง๋ฅผ ์ ์กํ๊ธฐ ์ํด ์ฌ์ฉํ๋ ํ๋กํ ์ฝ(๊ท์น)์ ์๋ฏธํ๋ค. HTTP๋ ํด๋ผ์ด์ธํธ์ ์๋ฒ ๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ๋ ๋ฐฉ์์ ์ ์ํ๊ณ ์์ผ๋ฉฐ, ์น ๋ธ๋ผ์ฐ์ ์ ์น ์๋ฒ ๊ฐ์ ํต์ ์ ์ฃผ๋ก ์ฌ์ฉํ๋ค ex).๋ค์ด๋ฒ URL : https://www.naver.com/
- API๋ ์์ฒญ๋ฐฉ์, ์์ฒญ์๋ฃ๋ด์ฉ, ์๋ฃ์์ฒญ์ ํ์ํ ์ถ๊ฐ์ ๋ณด ์์ผ๋ก ๊ตฌ์ฑ๋์ด์๋ค.
ex). ํด๋ผ์ด์ธํธ๊ฐ ์๋ฒ์ ์ํ์ ๋ณด๋ฅผ ์์ฒญํ๋ HTTP API: GET /movies/123456789
์๋ฒ๊ฐ ๊ฐ๊ณ ์๋ ์ํ์ ๋ณด:
HTTP/1.1 200 OK
Content-Type: application/json
{
"id": 123456789,
"title": "The Shawshank Redemption",
"year": 1994,
"director": "Frank Darabont",
"genres": ["Drama", "Crime"],
"rating": 9.3
}
- GET /movies/123456789 : ์์ฒญ๋ฐฉ์ / ์์ฒญ์๋ฃ๋ด์ฉ / ์ถ๊ฐ์ ๋ณด
2-4. REST API
- Representational State Transfer์ ์ฝ์๋ก, ์น ์๋น์ค๋ฅผ ์ํ ์ํคํ
์ฒ ์คํ์ผ, ์ผ์ข
์ ๋ฐฉ๋ฒ๋ก ์ด๋ผ ์ดํดํ๋ฉด ํธํ๋ค.
- REST API๋ HTTP ํ๋กํ ์ฝ์ ๊ธฐ๋ฐ์ผ๋ก ๋์ํ๋ฉฐ, ํด๋ผ์ด์ธํธ์ ์๋ฒ ๊ฐ์ ํต์ ์ ์ํด HTTP ๋ฉ์๋(GET, POST, PUT, DELETE ๋ฑ)๋ฅผ ์ฌ์ฉํ๋ค.
- REST API์ ํน์ง:
- ์์(Resource) ์ค์ฌ์ : ๋ฆฌ์์ค(๋ฐ์ดํฐ)๋ฅผ ์ค์ฌ์ผ๋ก API๋ฅผ ์ค๊ณํ๋ค. ๊ฐ ๋ฆฌ์์ค๋ ๊ณ ์ ํ ์๋ณ์(URI)๋ฅผ ๊ฐ์ง๊ธฐ ๋๋ฌธ์ ๊ฐ๋
์ฑ์ด ์ข์ ์์ ์ด๋ ๋ณ๊ฒฝ์ด ์ฉ์ดํ๋ค.
- ์ํ๋ฅผ ์ ๋ฌ(Stateless): ์๋ฒ๋ ํด๋ผ์ด์ธํธ์ ์ํ๋ฅผ ๊ด๋ฆฌํ์ง ์๋๋ค. ์์ฒญ์ ํ์ํ ๋ชจ๋ ์ ๋ณด๋ฅผ ํฌํจํ๊ณ , ์๋ฒ๋ ๊ฐ ์์ฒญ์ ๋
๋ฆฝ์ ์ผ๋ก ์ฒ๋ฆฌํ๋ค. ํด๋ผ์ด์ธํธ์ ์ธ์
์ํ๋ ์๋ฒ์ ์ ์ฅ๋์ง ์์ผ๋ฉฐ, ํด๋ผ์ด์ธํธ๋ ํ์ํ ๊ฒฝ์ฐ ์ธ์ฆ ํ ํฐ ๋ฑ์ ์์ฒญ์ ํฌํจ์์ผ ์๋ณํ ์ ์๋ค.
- ํ์คํ๋ ์ธํฐํ์ด์ค: REST API๋ ์ผ๋ฐ์ ์ผ๋ก HTTP ๋ฉ์๋(GET, POST, PUT, DELETE)์ HTTP ์ํ ์ฝ๋(200 OK, 404 Not Found ๋ฑ)๋ฅผ ์ฌ์ฉํ์ฌ ์ผ๊ด๋ ์ธํฐํ์ด์ค๋ฅผ ์ ๊ณตํ๋ค. ์ด๋ ๊ฐ๋ฐ์๊ฐ API๋ฅผ ์ดํดํ๊ณ ์ฌ์ฉํ๊ธฐ ์ฝ๋๋ก ๋์์ค๋ค.
- ๊ณ์ธต ๊ตฌ์กฐ(Layered System): RESTful ์๋น์ค๋ ๋ค์ค ๊ณ์ธต์ผ๋ก ๊ตฌ์ฑ๋ ์ ์๋ค. ์ค๊ฐ ์๋ฒ, ๋ก๋ ๋ฐธ๋ฐ์, ์บ์ฑ ์๋ฒ ๋ฑ์ ํตํด ๋ณด์, ๋ก๋ ๋ถ์ฐ, ์ฑ๋ฅ ํฅ์ ๋ฑ์ ๋ฌ์ฑํ ์ ์๋ค.
- ์ ๋ฆฌํ๋ฉด, REST API๋ HTTP API๊ธฐ๋ฐ์ผ๋ก ๊ฐ๋ฐ์๋ค์ด ๋ณด๋ค ์ฝ๊ฒ ์๋ฒ์ ์ํธ์์ฉํ ์ ์๋๋ก ํ๋ ํ์คํ๋ ๋ฐฉ๋ฒ์ผ๋ก, ๋จ์ํ๊ณ ๊ฐ๋
์ฑ์ด ์ข๋ค๋ ์ฅ์ ์ด ์๋ค.
REST API์ ๋ํ ์์ธํ ์ค๋ช
์๋ฃ์์ : https://www.youtube.com/watch?v=lsMQRaeKNDk
2-5. API์ ์ข
๋ฅ
- API์ ์ข
๋ฅ์๋ ํฌ๊ฒ 3๊ฐ์ง๊ฐ ์๋ค.
- public API(open API) : ๋๊ตฌ๋ ์ฌ์ฉ๊ฐ๋ฅํ ๊ณต๊ฐ API (ex. ๊ธฐ์์ฒญ : https://www.data.go.kr/data/15095109/openapi.do#tab_layer_detail_function)
- private API : ์ฌ๋ด์์๋ง ์ฌ์ฉํ๋ API
- partner API : ๋ฏธ๋ฆฌ ์ ํด์ค ์ฌ์ฉ์๋ผ๋ฆฌ ์ฌ์ฉํ๋ API
3. ์์ฝ ์ ๋ฆฌ ๋ฐ ๋ฉด์ ํ QnA
QnA : API๋ ๋ฌด์์ธ๊ฐ์?
- API๋ Application Programming Interface์ ์ฝ์๋ก, ์์ฉ ํ๋ก๊ทธ๋จ์ ํ๋ก๊ทธ๋๋ฐํ๊ธฐ ์ํด ํด๋ผ์ด์ธํธ์ ์๋ฒ๊ฐ ์๋ก ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ๋ ์ํธ์์ฉ์ ๋ฐฉ๋ฒ์
๋๋ค.
QnA : ํน์ REST API๊ฐ ๋ฌด์์ธ์ง ์๊ณ ๊ณ์ ๊ฐ์?
- REST API๋ Representational State Transfer์ ์ฝ์๋ก, HTTP API๊ธฐ๋ฐํ์ฌ ๊ฐ๋ฐ์๋ค์ด ๋ณด๋ค ์ฝ๊ฒ ์๋ฒ์ ์ํธ์์ฉํ ์ ์๋๋ก ํ๋ ํ์คํ๋ API ์คํ์ผ์
๋๋ค. ํนํ ์์์ค์ฌ์ ์ธ ์คํ์ผ์ด๊ธฐ์, ๊ฐ ๋ฆฌ์์ค๊ฐ ๊ณ ์ ํ URI๋ฅผ ๊ฐ์ ธ ๊ฐ๋
์ฑ์ด ์ข์ผ๋ฉฐ, ํ์คํ๋ HTTP ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๊ธฐ์ ๋จ์ํ๋ค๋ ์ฅ์ ์ด ์๊ธฐ ๋๋ฌธ์, ํ์
์์ ๊ฑฐ์ REST ๋ฐฉ์์ ์ฌ์ฉํฉ๋๋ค.
Reference: