๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
Programming/Django

๐Ÿ”Œ API๋ž€ ๋ฌด์—‡์ผ๊นŒ? ์‰ฝ๊ฒŒ ํ’€์–ด๋ณด๋Š” API์˜ ๊ฐœ๋…๊ณผ ๋™์ž‘ ์›๋ฆฌ

by Mandy's 2025. 8. 6.

๐Ÿ“Œ 1. API๋ž€?

API๋Š” Application Programming Interface์˜ ์ค„์ž„๋ง๋กœ,
“์†Œํ”„ํŠธ์›จ์–ด๋ผ๋ฆฌ ์†Œํ†ตํ•˜๊ฒŒ ํ•ด์ฃผ๋Š” ํ†ต๋กœ”๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

์‰ฝ๊ฒŒ ๋งํ•ด,

"๋‚ด๊ฐ€ ๋งŒ๋“  ํ”„๋กœ๊ทธ๋žจ์ด ๋‹ค๋ฅธ ํ”„๋กœ๊ทธ๋žจ์—๊ฒŒ ๋ง์„ ๊ฑธ๊ณ , ์‘๋‹ต์„ ๋ฐ›๋Š” ๋ฐฉ์‹"

์˜ˆ๋ฅผ ๋“ค์–ด:

  • ๋‚ด ์•ฑ์—์„œ ๋‚ ์”จ ์ •๋ณด๋ฅผ ๊ฐ€์ ธ์˜ค๊ณ  ์‹ถ๋‹ค → ๋‚ ์”จ API ์š”์ฒญ
  • ์›น์‚ฌ์ดํŠธ์—์„œ ์นด์นด์˜ค ๋กœ๊ทธ์ธ์„ ํ•˜๊ณ  ์‹ถ๋‹ค → ์นด์นด์˜ค ๋กœ๊ทธ์ธ API ์‚ฌ์šฉ
  • ์‡ผํ•‘๋ชฐ์—์„œ ๊ฒฐ์ œ๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ณ  ์‹ถ๋‹ค → ๊ฒฐ์ œ์‚ฌ API ์—ฐ๋™

์ฆ‰, API๋Š” ์™ธ๋ถ€์˜ ๊ธฐ๋Šฅ์„ ๋‚ด ์„œ๋น„์Šค์—์„œ ์‰ฝ๊ฒŒ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ด์ฃผ๋Š” ๋‹ค๋ฆฌ์ž…๋‹ˆ๋‹ค.


โš™๏ธ 2. API๋Š” ์–ด๋–ป๊ฒŒ ๋™์ž‘ํ• ๊นŒ?

API๋Š” ๋ณดํ†ต ํด๋ผ์ด์–ธํŠธ(์š”์ฒญ)์™€ ์„œ๋ฒ„(์‘๋‹ต) ์‚ฌ์ด์—์„œ ์ด๋ ‡๊ฒŒ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค:

[๋‚ด ํ”„๋กœ๊ทธ๋žจ] → ์š”์ฒญ(Request) → [API ์„œ๋ฒ„]
                                 ↓
                       ← ์‘๋‹ต(Response) ←

์˜ˆ๋ฅผ ๋“ค์–ด, ๋„ค์ด๋ฒ„ ์ง€๋„ API์— “๊ฐ•๋‚จ์—ญ” ์ •๋ณด๋ฅผ ์š”์ฒญํ•œ๋‹ค๋ฉด:

  1. ๋‚ด ์ฝ”๋“œ๊ฐ€ "https://map.naver.com/api/locations?q=๊ฐ•๋‚จ์—ญ" ์ฃผ์†Œ์— ์š”์ฒญ์„ ๋ณด๋ƒ„
  2. ๋„ค์ด๋ฒ„ ์„œ๋ฒ„๊ฐ€ “๊ฐ•๋‚จ์—ญ” ๊ด€๋ จ ์ •๋ณด๋ฅผ ์ฐพ์•„์„œ JSON ํ˜•์‹์œผ๋กœ ์‘๋‹ต์„ ์คŒ
  3. ๋‚ด ์•ฑ์—์„œ ๊ทธ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์™€ ํ™”๋ฉด์— ์ถœ๋ ฅ

๐Ÿ’ฌ 3. ์š”์ฒญ/์‘๋‹ต์€ ์–ด๋–ค ํ˜•์‹์ผ๊นŒ?

๋Œ€๋ถ€๋ถ„์˜ API๋Š” HTTP ํ”„๋กœํ† ์ฝœ์„ ์‚ฌ์šฉํ•˜๋ฉฐ, ์š”์ฒญ๊ณผ ์‘๋‹ต์€ ๋ณดํ†ต JSON ํฌ๋งท์œผ๋กœ ์˜ค๊ฐ‘๋‹ˆ๋‹ค.

์˜ˆ) ๋‚ ์”จ API ์š”์ฒญ ๊ฒฐ๊ณผ

{
  "location": "Seoul",
  "temperature": 29.4,
  "condition": "Sunny"
}

→ ๋‚ด๊ฐ€ ์ด๊ฑธ ๋ฐ›์•„์„œ ์•ฑ์—์„œ “์„œ์šธ: ๋ง‘์Œ, 29.4°C” ์‹์œผ๋กœ ๋ณด์—ฌ์ค„ ์ˆ˜ ์žˆ๋Š” ๊ฑฐ์ฃ .


๐Ÿ” 4. ์ธ์ฆ(Authentication)์€ ์™œ ํ•„์š”ํ• ๊นŒ?

API๋Š” ๊ทธ๋ƒฅ ๋ˆ„๊ตฌ์—๊ฒŒ๋‚˜ ๋ฌด์ œํ•œ ์ œ๊ณต๋˜๋ฉด ์•ˆ ๋ฉ๋‹ˆ๋‹ค.
๊ทธ๋ž˜์„œ ๋ณดํ†ต API Key๋‚˜ Token ๊ฐ™์€ ์ธ์ฆ ๋ฐฉ์‹์ด ์žˆ์Šต๋‹ˆ๋‹ค.

  • ์นด์นด์˜ค API → Authorization: KakaoAK <API_KEY> ํ—ค๋” ํ•„์š”
  • JWT ์ธ์ฆ API → ๋กœ๊ทธ์ธ ํ›„ ๋ฐ›์€ ํ† ํฐ์„ ํ•จ๊ป˜ ์ „์†ก

โœ”๏ธ ์ธ์ฆ์ด ์—†์œผ๋ฉด ๋ณด์•ˆ ์œ„ํ—˜ + ํŠธ๋ž˜ํ”ฝ ๋‚จ์šฉ


๐Ÿ”— 5. ๋‹ค๋ฅธ ์‹œ์Šคํ…œ๊ณผ์˜ ์—ฐ๋™์€ ์–ด๋–ป๊ฒŒ ์ด๋ฃจ์–ด์งˆ๊นŒ?

์˜ˆ์‹œ๋กœ ์„ค๋ช…ํ• ๊ฒŒ์š”:

โœ… ์นด์นด์˜คํ†ก ๋ฉ”์‹œ์ง€๋ฅผ ๋ณด๋‚ด๋Š” ์„œ๋น„์Šค ๋งŒ๋“ค๊ธฐ

  1. ์นด์นด์˜คํ†ก ๋ฉ”์‹œ์ง€ API ๋ฌธ์„œ๋ฅผ ๋ณด๊ณ 
  2. ํ•„์š”ํ•œ ์ธ์ฆ์„ ๋ฐ›๊ณ 
  3. ๋‚ด ์•ฑ์—์„œ ์‚ฌ์šฉ์ž์—๊ฒŒ ๋ฉ”์‹œ์ง€๋ฅผ ๋ณด๋‚ด๊ธฐ ์œ„ํ•œ ์š”์ฒญ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑ
  4. ์นด์นด์˜ค ์„œ๋ฒ„์—์„œ ์‹ค์ œ ๋ฉ”์‹œ์ง€๋ฅผ ์ „์†ก

๐Ÿ“Ž ์ด๋Ÿฐ ๊ฑธ ๋ณดํ†ต "API ์—ฐ๋™"์ด๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค.


๐Ÿ“š 6. API์˜ ์‹ค์ œ ์‚ฌ์šฉ ์˜ˆ์‹œ

๋ถ„์•ผ ์‚ฌ์šฉํ•˜๋Š” API ์˜ˆ์‹œ

์ง€๋„ ๊ตฌ๊ธ€ ์ง€๋„, ์นด์นด์˜ค๋งต API
๊ฒฐ์ œ ํ† ์ŠคํŽ˜์ด, ํŽ˜์ด์ฝ”, ์•„์ž„ํฌํŠธ API
๋กœ๊ทธ์ธ ๊ตฌ๊ธ€ ๋กœ๊ทธ์ธ, ๋„ค์ด๋ฒ„ ๋กœ๊ทธ์ธ API
๋‚ ์”จ OpenWeather API, ๊ธฐ์ƒ์ฒญ ๋ฐ์ดํ„ฐ API
๋ฒˆ์—ญ Papago, Google Translate API

๐Ÿงฉ 7. ํ”„๋ก ํŠธ์—”๋“œ์™€ ๋ฐฑ์—”๋“œ๋„ API๋กœ ์—ฐ๊ฒฐ๋œ๋‹ค?

๋งž์Šต๋‹ˆ๋‹ค!

  • ํ”„๋ก ํŠธ์—”๋“œ(React, Vue ๋“ฑ)๋Š” ๋ฒ„ํŠผ ํด๋ฆญ → API ์š”์ฒญ
  • ๋ฐฑ์—”๋“œ(Django, Spring ๋“ฑ)๋Š” API ์š”์ฒญ์„ ๋ฐ›์•„ → DB ์กฐํšŒํ•˜๊ณ  → ์‘๋‹ต ๋ฐ˜ํ™˜

๋ชจ๋“  ์•ฑ์€ ๊ฒฐ๊ตญ API ์ค‘์‹ฌ์œผ๋กœ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค


โœ… ๋งˆ๋ฌด๋ฆฌ ์š”์•ฝ

์งˆ๋ฌธ ์š”์•ฝ

API๋ž€? ํ”„๋กœ๊ทธ๋žจ๋ผ๋ฆฌ ๋Œ€ํ™”ํ•˜๋Š” ์ธํ„ฐํŽ˜์ด์Šค
์–ด๋–ป๊ฒŒ ๋™์ž‘ํ•ด? ํด๋ผ์ด์–ธํŠธ๊ฐ€ HTTP ์š”์ฒญ → ์„œ๋ฒ„๊ฐ€ JSON ์‘๋‹ต
๋ฌด์—‡๊ณผ ์—ฐ๋™๋ผ? ๋‹ค๋ฅธ ํšŒ์‚ฌ์˜ ์„œ๋น„์Šค, ์„œ๋ฒ„, DB ๋“ฑ ๋‹ค์–‘ํ•˜๊ฒŒ
์™œ ํ•„์š”ํ•ด? ๋‚จ์ด ๋งŒ๋“  ๊ฐ•๋ ฅํ•œ ๊ธฐ๋Šฅ์„ ๋น ๋ฅด๊ฒŒ ์“ธ ์ˆ˜ ์žˆ์œผ๋‹ˆ๊นŒ!

์ด์ œ API๊ฐ€ ์™œ ์ค‘์š”ํ•œ์ง€, ๊ทธ๋ฆฌ๊ณ  ์–ด๋–ป๊ฒŒ ํ™œ์šฉ๋˜๋Š”์ง€ ๊ฐ์ด ์˜ค์…จ๋‚˜์š”?
๋‹ค์Œ ๊ธ€์—์„œ๋Š” Django์—์„œ REST API๋ฅผ ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ•์ด๋‚˜,
Swagger๋กœ ๋ฌธ์„œ๋ฅผ ์ž๋™ํ™”ํ•˜๋Š” ๊ณผ์ •๋„ ๋‹ค๋ค„๋ณผ ์˜ˆ์ •์ด์—์š”. ๊ด€์‹ฌ ์žˆ์œผ์‹œ๋‹ค๋ฉด ๊ตฌ๋…์ด๋‚˜ ๋Œ“๊ธ€๋„ ํ™˜์˜ํ•ฉ๋‹ˆ๋‹ค! ๐Ÿ™Œ