๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
BackEnd๐ŸŒฑ/Etc

API vs Library vs Framework

by ์•ˆ์ฃผํ˜• 2022. 4. 25.

์„œ๋ก 

API์™€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ, ๊ทธ๋ฆฌ๊ณ  ํ”„๋ ˆ์ž„์›Œํฌ ์„ธ ๋‹จ์–ด์˜ ์ฐจ์ด์ ์— ๋Œ€ํ•ด์„œ ๋จธ๋ฆฟ์†์œผ๋กœ๋Š” ์‰ฝ๊ฒŒ ๋– ์˜ค๋ฅด์ง€๋งŒ ๋ง‰์ƒ ์ •ํ™•ํ•œ ์ฐจ์ด๊ฐ€ ๋ญ๋ƒ๊ณ  ๋ฌผ์–ด๋ณด๋ฉด ๋…ผ๋ฆฌ์ ์œผ๋กœ ์„ค๋ช…ํ•˜๊ธฐ๊ฐ€ ํž˜๋“ญ๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์ด๋ฒˆ ๊ธฐํšŒ์— ๊ธ€์„ ์ •๋ฆฌํ•จ์œผ๋กœ์จ ํ•œ๋ฒˆ ๋‹จ๋‹จํžˆ ๊ฐœ๋…์„ ์žก๊ณ ์ž ํ•ฉ๋‹ˆ๋‹ค.

๋ชฉ์ฐจ

1. API๋ž€?
2. ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ž€?
3. ํ”„๋ ˆ์ž„์›Œํฌ๋ž€?
4. API์™€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ์ฐจ์ด
5. ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์™€ ํ”„๋ ˆ์ž„์›Œํฌ์˜ ์ฐจ์ด

 

API(Application Programming Interface)

API(Application Programming Interface)๋ž€ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก, ์šด์˜์ฒด์ œ๋‚˜ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๊ฐ€ ์ œ๊ณตํ•˜๋Š” ๊ธฐ๋Šฅ์„ ์ œ์–ดํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋งŒ๋“  ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๋œปํ•ฉ๋‹ˆ๋‹ค. - ์œ„ํ‚ค๋ฐฑ๊ณผ

์‰ฝ๊ฒŒ ์˜ˆ์‹œ๋ฅผ ๋“ค์–ด์„œ ์„ค๋ช…ํ•˜๋ฉด API๋Š” ๋ ˆ์Šคํ† ๋ž‘์˜ '์ ์›'์ž…๋‹ˆ๋‹ค.

API ์˜ˆ์‹œ

๋ ˆ์Šคํ† ๋ž‘์—์„œ ์†๋‹˜์—๊ฒŒ ์ฃผ๋ฌธ ๊ฐ€๋Šฅํ•œ(์„ ํƒ ๊ฐ€๋Šฅํ•œ) ๋ฉ”๋‰ด๋ฅผ ๋ณด์—ฌ์ฃผ๊ณ  ์†๋‹˜์ด ๊ณ ๋ฅธ ์Œ์‹์„ ์ฃผ๋ฐฉ์— ์ „๋‹ฌ ํ›„, ์Œ์‹์ด ๋‚˜์˜ค๋ฉด ๊ณ ๊ฐ์—๊ฒŒ ์ „๋‹ฌํ•˜๋Š” '์ ์›'์ด API์ž…๋‹ˆ๋‹ค.

ํ˜„์žฌ ๊ธˆ์œต, ์†Œ์…œ, ์ „์ž ์ƒ๊ฑฐ๋ž˜, ๋“ฑ ๊ธฐํƒ€ ์—ฌ๋Ÿฌ ์—…์ข…์„ ์œ„ํ•œ ์ˆ˜๋ฐฑ ๊ฐœ์˜ API๊ฐ€ ์žˆ์œผ๋ฉฐ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ชจ๋“  ์ž‘์—…์€ ๋ฌผ๋ก  ๋‹ค๋ฅธ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๊ณผ ํ•จ๊ป˜ ์ˆ˜ํ–‰ํ•˜๋„๋ก ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ํ”„๋กœ๊ทธ๋ž˜๋ฐํ•˜๋Š” ์ž‘์—…๋„ ํฌํ•จํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. open API๋Š” ๊ฐœ๋ฐœ์ž๋ผ๋ฉด ๋ˆ„๊ตฌ๋‚˜ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ๊ณต๊ฐœ๋œ API๋ฅผ ๋งํ•ฉ๋‹ˆ๋‹ค. ์•„๋ž˜์˜ ๊ตฌ๊ธ€ ๋งต, ์†Œ์…œ ๋กœ๊ทธ์ธ(๋„ค์ด๋ฒ„, ์นด์นด์˜ค, ํŽ˜์ด์Šค๋ถ ๋“ฑ)์ด openAPI์˜ ๋Œ€ํ‘œ์ ์ธ ์˜ˆ๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  1. ์นด์นด์˜ค API
  2. ๋„ค์ด๋ฒ„ API
  3. ๊ตฌ๊ธ€ API
  4. ํŽ˜์ด์Šค๋ถ API

ํŠน์ง•

API๋Š” ํ•„์š”ํ•œ ๋ถ€๋ถ„์„ ์š”์ฒญํ•˜์—ฌ ์‘๋‹ต๋ฐ›๋Š” ์„œ๋น„์Šค ๊ฐ„์˜ ๋‹ค๋ฆฌ์™€ ๊ฐ™์€ ์—ญํ• ์„ ํ•œ๋‹ค.

  • ๊ตฌํ˜„๊ณผ ๋…๋ฆฝ์ ์œผ๋กœ ์‚ฌ์–‘๋งŒ ์ •์˜๋˜์–ด ์žˆ๋‹ค.
  • API์— ๋”ฐ๋ผ ์ ‘๊ทผ ๊ถŒํ•œ์ด ํ•„์š”ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ๋ง ๊ทธ๋ž˜๋„ ์ธํ„ฐํŽ˜์ด์Šค์ด๊ธฐ์— ์•ˆ์—๋Š” ๋ฌด์—‡์ด ๋“ค์–ด์žˆ๋Š”์ง€ ์•Œ ์ˆ˜ ์—†๋‹ค.

 

๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ(Libary)

๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ(Libary)๋Š” ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ ๊ฐœ๋ฐœ์„ ์œ„ํ•ด ํ•„์š”ํ•œ ๊ธฐ๋Šฅ(ํ•จ์ˆ˜)์„ ๋ชจ์•„ ๋†“์€ ์†Œํ”„ํŠธ์›จ์–ด์ž…๋‹ˆ๋‹ค. ๊ตฌ์„ฑ ๋ฐ์ดํ„ฐ, ๋ฌธ์„œ, ๋„์›€๋ง ์ž๋ฃŒ, ๋ฉ”์‹œ์ง€ ํ‹€, ๋ฏธ๋ฆฌ ์ž‘์„ฑ๋œ ์ฝ”๋“œ, ์„œ๋ธŒ๋ฃจํ‹ด(ํ•จ์ˆ˜), ํด๋ž˜์Šค, ๊ฐ’, ์ž๋ฃŒํ˜• ๋“ฑ์ด ํฌํ•จ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ฆ‰, ํ”„๋กœ๊ทธ๋žจ ์ œ์ž‘ ์‹œ ํ•„์š”ํ•œ ๊ธฐ๋Šฅ์ด๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ž๋™์ฐจ ๋ฐ”ํ€ด, ์ž๋™์ฐจ ํ—ค๋“œ๋ผ์ดํŠธ, ์ž๋™์ฐจ ์—์–ด๋ฐฑ ๋“ฑ์„ ์˜ˆ๋กœ ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ์˜ˆ

์‚ฌ์šฉ ์—ฌ๋ถ€๋Š” ์ฝ”๋“œ ์ž‘์„ฑ์ž ์„ ํƒ ์‚ฌํ•ญ์ด๋ฉฐ, ์ƒˆ๋กœ์šด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ œ์ž‘ ์‹œ์—๋„ ์—„๊ฒฉํ•œ ๊ทœ์น™์ด ์กด์žฌํ•˜์ง€ ์•Š๊ธฐ์— ์ œ์ž‘ ์˜๋„์— ๋งž๊ฒŒ ์ž‘์„ฑ๋งŒ ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

ํŠน์ง•

  • ๋…๋ฆฝ์„ฑ์„ ๊ฐ€์ง„๋‹ค.
  • ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์ด ๋Šฅ๋™์ (ํ•„์š”ํ•  ๋•Œ)์œผ๋กœ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.
  • Apache Commons, Guava, Lombok, jQuery ๋“ฑ์ด ์žˆ๋‹ค.

 

ํ”„๋ ˆ์ž„์›Œํฌ(Framework)

ํ”„๋ ˆ์ž„์›Œํฌ(Framework)๋Š” ์‘์šฉํ”„๋กœ๊ทธ๋žจ์ด๋‚˜ ์†Œํ”„ํŠธ์›จ์–ด์˜ ์†”๋ฃจ์…˜ ๊ฐœ๋ฐœ์„ ์ˆ˜์›”ํ•˜๊ฒŒ ํ•˜๊ธฐ ์œ„ํ•ด ์ œ๊ณต๋œ ์†Œํ”„ํŠธ์›จ์–ด ํ™˜๊ฒฝ์ž…๋‹ˆ๋‹ค.

ํ”„๋ ˆ์ž„์›Œํฌ ์˜ˆ

ํ”„๋กœ๊ทธ๋žจ์˜ ๊ธฐ๋ณธ ๊ตฌ์กฐ(๋ผˆ๋Œ€)๋ฅผ ์˜๋ฏธํ•˜๋ฉฐ, ์ž๋™์ฐจ๋กœ ์˜ˆ๋ฅผ ๋“ค์—ˆ์„ ๋•Œ ์ž๋™์ฐจ์˜ ํ”„๋ ˆ์ž„์ด๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์›ํ•˜๋Š” ๊ธฐ๋Šฅ ๊ตฌํ˜„์—๋งŒ ์ง‘์ค‘ํ•˜์—ฌ ๋น ๋ฅด๊ฒŒ ๊ฐœ๋ฐœํ•  ์ˆ˜ ์žˆ๋„๋ก ๊ธฐ๋ณธ์ ์œผ๋กœ ํ•„์š”ํ•œ ๊ธฐ๋Šฅ์„ ๊ฐ–์ถ”๊ณ  ์žˆ๋Š” ๊ฒƒ์œผ๋กœ ์œ„์—์„œ ์„ค๋ช…ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ํ”„๋ ˆ์ž„์›Œํฌ๋งŒ์œผ๋กœ๋Š” ์‹คํ–‰๋˜์ง€ ์•Š์œผ๋ฉฐ ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•ด์•ผ ํ•˜๊ณ , ํ”„๋ ˆ์ž„์›Œํฌ์— ์˜์กดํ•˜์—ฌ ํ”„๋ ˆ์ž„์›Œํฌ๊ฐ€ ์ •์˜ํ•œ ๊ทœ์น™์„ ์ค€์ˆ˜ํ•˜์—ฌ ๊ฐœ๋ฐœํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

ํŠน์ง•

  • ์ƒํ˜ธ ํ˜‘๋ ฅํ•˜๋Š” ํด๋ž˜์Šค์™€ ์ธํ„ฐํŽ˜์ด์Šค์˜ ์ง‘ํ•ฉ์ด๋‹ค.
  • ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์ด ์ˆ˜๋™์ ์œผ๋กœ ํ”„๋ ˆ์ž„์›Œํฌ์— ์˜ํ•ด ์‚ฌ์šฉ๋œ๋‹ค. (๊ทœ์น™์„ ์ง€์ผœ๊ฐ€๋ฉฐ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ)
  • ์†Œํ”„ํŠธ์›จ์–ด์˜ ํ˜•์‹ ์ œ๊ณต(๊ทœ์น™์ด ์ •ํ•ด์ ธ ์žˆ์Œ)
  • Spring, Django, React, Angular ๋“ฑ์ด ์žˆ๋‹ค.

 

API์™€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ์ฐจ์ด

๊ตฌํ˜„ ๋กœ์ง์˜ ์œ ๋ฌด์— ๋”ฐ๋ผ ๊ฐˆ๋ฆฝ๋‹ˆ๋‹ค.

  • API: ์ปดํฌ๋„ŒํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ทœ์•ฝ ๋ฐ ํ˜ธ์ถœ์„ ์œ„ํ•œ ์ˆ˜๋‹จ์œผ๋กœ์จ ๊ตฌํ˜„ ๋กœ์ง์ด ํ•„์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ: ์ปดํฌ๋„ŒํŠธ ์ž์ฒด๋กœ์จ, ๊ตฌํ˜„ ๋กœ์ง์ด ์กด์žฌํ•ฉ๋‹ˆ๋‹ค.

๋น„์œ ๋ฅผ ํ•˜์ž๋ฉด, ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” ๋„๊ตฌ ์ž์ฒด์ด๊ณ  API๋Š” "๋„๊ตฌ ์ฃผ์„ธ์š”!"๋ผ๊ณ  ์š”์ฒญํ•˜๋Š” ๊ฒƒ์ด๋ผ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์™€ ํ”„๋ ˆ์ž„์›Œํฌ์˜ ์ฐจ์ด

์‘์šฉํ”„๋กœ๊ทธ๋žจ์˜ ํ๋ฆ„ ์ฃผ๋„๊ถŒ์„ ๋ˆ„๊ฐ€ ๊ฐ€์ง€๊ณ  ์žˆ๋Š”์ง€, ์ฆ‰ ๋ˆ„๊ฐ€ ๋ˆ„๊ตฌ๋ฅผ ์ปจํŠธ๋กคํ•˜๋Š”๊ฐ€์— ๋”ฐ๋ผ ๊ฐˆ๋ฆฝ๋‹ˆ๋‹ค.

  • ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ: ๊ฐœ๋ฐœ์ž๊ฐ€ ์ฝ”๋“œ๋ฅผ ์ปจํŠธ๋กคํ•ฉ๋‹ˆ๋‹ค. ์ฆ‰, ๊ฐœ๋ฐœ์ž๊ฐ€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค.
  • ํ”„๋ ˆ์ž„์›Œํฌ: ๊ฐœ๋ฐœ์ž๊ฐ€ ํ”„๋ ˆ์ž„์›Œํฌ์˜ ๊ทœ์น™์„ ๋”ฐ๋ผ ์ฝ”๋”ฉ์„ ํ•ฉ๋‹ˆ๋‹ค. ์ฆ‰ ํ”„๋ ˆ์ž„์›Œํฌ๊ฐ€ ๊ฐœ๋ฐœ์ž๋ฅผ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค.

๋Œ“๊ธ€