BackEnd🌱/Etc

API vs Library vs Framework

μ•ˆμ£Όν˜• 2022. 4. 25. 04:17

μ„œλ‘ 

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λŠ” "도ꡬ μ£Όμ„Έμš”!"라고 μš”μ²­ν•˜λŠ” 것이라 λ³Ό 수 μžˆμŠ΅λ‹ˆλ‹€.

 

λΌμ΄λΈŒλŸ¬λ¦¬μ™€ ν”„λ ˆμž„μ›Œν¬μ˜ 차이

μ‘μš©ν”„λ‘œκ·Έλž¨μ˜ 흐름 μ£Όλ„κΆŒμ„ λˆ„κ°€ 가지고 μžˆλŠ”μ§€, 즉 λˆ„κ°€ λˆ„κ΅¬λ₯Ό μ»¨νŠΈλ‘€ν•˜λŠ”κ°€μ— 따라 κ°ˆλ¦½λ‹ˆλ‹€.

  • 라이브러리: κ°œλ°œμžκ°€ μ½”λ“œλ₯Ό μ»¨νŠΈλ‘€ν•©λ‹ˆλ‹€. 즉, κ°œλ°œμžκ°€ 라이브러리λ₯Ό ν˜ΈμΆœν•©λ‹ˆλ‹€.
  • ν”„λ ˆμž„μ›Œν¬: κ°œλ°œμžκ°€ ν”„λ ˆμž„μ›Œν¬μ˜ κ·œμΉ™μ„ 따라 코딩을 ν•©λ‹ˆλ‹€. 즉 ν”„λ ˆμž„μ›Œν¬κ°€ 개발자λ₯Ό ν˜ΈμΆœν•©λ‹ˆλ‹€.