๐Ÿ“‹API๋ž€ ๋ฌด์—‡์ธ๊ฐ€?

Seunggyu Jungยท2023๋…„ 5์›” 20์ผ
0
post-thumbnail

๋ชฉ์ฐจ

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์˜ ํŠน์ง•:
  1. ์ž์›(Resource) ์ค‘์‹ฌ์ : ๋ฆฌ์†Œ์Šค(๋ฐ์ดํ„ฐ)๋ฅผ ์ค‘์‹ฌ์œผ๋กœ API๋ฅผ ์„ค๊ณ„ํ•œ๋‹ค. ๊ฐ ๋ฆฌ์†Œ์Šค๋Š” ๊ณ ์œ ํ•œ ์‹๋ณ„์ž(URI)๋ฅผ ๊ฐ€์ง€๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ€๋…์„ฑ์ด ์ข‹์•„ ์ˆ˜์ •์ด๋‚˜ ๋ณ€๊ฒฝ์ด ์šฉ์ดํ•˜๋‹ค.
  2. ์ƒํƒœ๋ฅผ ์ „๋‹ฌ(Stateless): ์„œ๋ฒ„๋Š” ํด๋ผ์ด์–ธํŠธ์˜ ์ƒํƒœ๋ฅผ ๊ด€๋ฆฌํ•˜์ง€ ์•Š๋Š”๋‹ค. ์š”์ฒญ์€ ํ•„์š”ํ•œ ๋ชจ๋“  ์ •๋ณด๋ฅผ ํฌํ•จํ•˜๊ณ , ์„œ๋ฒ„๋Š” ๊ฐ ์š”์ฒญ์„ ๋…๋ฆฝ์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•œ๋‹ค. ํด๋ผ์ด์–ธํŠธ์˜ ์„ธ์…˜ ์ƒํƒœ๋Š” ์„œ๋ฒ„์— ์ €์žฅ๋˜์ง€ ์•Š์œผ๋ฉฐ, ํด๋ผ์ด์–ธํŠธ๋Š” ํ•„์š”ํ•œ ๊ฒฝ์šฐ ์ธ์ฆ ํ† ํฐ ๋“ฑ์„ ์š”์ฒญ์— ํฌํ•จ์‹œ์ผœ ์‹๋ณ„ํ•  ์ˆ˜ ์žˆ๋‹ค.
  3. ํ‘œ์ค€ํ™”๋œ ์ธํ„ฐํŽ˜์ด์Šค: REST API๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ HTTP ๋ฉ”์„œ๋“œ(GET, POST, PUT, DELETE)์™€ HTTP ์ƒํƒœ ์ฝ”๋“œ(200 OK, 404 Not Found ๋“ฑ)๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ผ๊ด€๋œ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ œ๊ณตํ•œ๋‹ค. ์ด๋Š” ๊ฐœ๋ฐœ์ž๊ฐ€ API๋ฅผ ์ดํ•ดํ•˜๊ณ  ์‚ฌ์šฉํ•˜๊ธฐ ์‰ฝ๋„๋ก ๋„์™€์ค€๋‹ค.
  4. ๊ณ„์ธต ๊ตฌ์กฐ(Layered System): RESTful ์„œ๋น„์Šค๋Š” ๋‹ค์ค‘ ๊ณ„์ธต์œผ๋กœ ๊ตฌ์„ฑ๋  ์ˆ˜ ์žˆ๋‹ค. ์ค‘๊ฐ„ ์„œ๋ฒ„, ๋กœ๋“œ ๋ฐธ๋Ÿฐ์„œ, ์บ์‹ฑ ์„œ๋ฒ„ ๋“ฑ์„ ํ†ตํ•ด ๋ณด์•ˆ, ๋กœ๋“œ ๋ถ„์‚ฐ, ์„ฑ๋Šฅ ํ–ฅ์ƒ ๋“ฑ์„ ๋‹ฌ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ์ •๋ฆฌํ•˜๋ฉด, REST API๋Š” HTTP API๊ธฐ๋ฐ˜์œผ๋กœ ๊ฐœ๋ฐœ์ž๋“ค์ด ๋ณด๋‹ค ์‰ฝ๊ฒŒ ์„œ๋ฒ„์™€ ์ƒํ˜ธ์ž‘์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ํ‘œ์ค€ํ™”๋œ ๋ฐฉ๋ฒ•์œผ๋กœ, ๋‹จ์ˆœํ•˜๊ณ  ๊ฐ€๋…์„ฑ์ด ์ข‹๋‹ค๋Š” ์žฅ์ ์ด ์žˆ๋‹ค.

REST API์— ๋Œ€ํ•œ ์ž์„ธํ•œ ์„ค๋ช…์ž๋ฃŒ์˜์ƒ : https://www.youtube.com/watch?v=lsMQRaeKNDk


2-5. API์˜ ์ข…๋ฅ˜

  • API์˜ ์ข…๋ฅ˜์—๋Š” ํฌ๊ฒŒ 3๊ฐ€์ง€๊ฐ€ ์žˆ๋‹ค.
  1. public API(open API) : ๋ˆ„๊ตฌ๋‚˜ ์‚ฌ์šฉ๊ฐ€๋Šฅํ•œ ๊ณต๊ฐœ API (ex. ๊ธฐ์ƒ์ฒญ : https://www.data.go.kr/data/15095109/openapi.do#tab_layer_detail_function)
  2. private API : ์‚ฌ๋‚ด์—์„œ๋งŒ ์‚ฌ์šฉํ•˜๋Š” API
  3. 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:

profile
๊ฐ๋™์„ ์ฃผ๊ณ ํ”ˆ ๊ฐœ๋ฐœ์ž(์ค€๋น„์ƒ)

0๊ฐœ์˜ ๋Œ“๊ธ€