Home > CS > 2024 > πŸ’Ύ [CS] API(Application Programming Interface)λž€ λ¬΄μ—‡μΌκΉŒ?

πŸ’Ύ [CS] API(Application Programming Interface)λž€ λ¬΄μ—‡μΌκΉŒ?
CS

β€œπŸ’Ύ [CS] API(Application Programming Interface)λž€ λ¬΄μ—‡μΌκΉŒ?”

  • API(Application Programming Interface) λŠ” μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ΄ λ‹€λ₯Έ μ†Œν”„νŠΈμ›¨μ–΄λ‚˜ μ„œλΉ„μŠ€μ™€ μƒν˜Έμž‘μš©ν•  수 μžˆλ„λ‘ ν•˜λŠ” μΈν„°νŽ˜μ΄μŠ€λ₯Ό μ˜λ―Έν•©λ‹ˆλ‹€.
  • μ‰½κ²Œ λ§ν•˜λ©΄, APIλŠ” ν”„λ‘œκ·Έλž¨ κ°„μ˜ 톡신을 κ°€λŠ₯ν•˜κ²Œ ν•΄μ£ΌλŠ” μΌμ’…μ˜ 계약 λ˜λŠ” μ•½μ†μž…λ‹ˆλ‹€.
  • APIλŠ” κ°œλ°œμžκ°€ νŠΉμ • κΈ°λŠ₯을 μ‚¬μš©ν•  수 있게 미리 μ •μ˜λœ λ©”μ„œλ“œμ™€ κ·œμΉ™μ˜ 집합을 μ œκ³΅ν•©λ‹ˆλ‹€.

1️⃣ API의 κΈ°λ³Έ κ°œλ….

  • μΈν„°νŽ˜μ΄μŠ€
    • APIλŠ” 두 μ‹œμŠ€ν…œ κ°„μ˜ μƒν˜Έμž‘μš©μ„ μ •μ˜ν•˜λŠ” 경계 역할을 ν•©λ‹ˆλ‹€.
    • 이λ₯Ό 톡해 두 μ‹œμŠ€ν…œμ΄ μ„œλ‘œ 데이터λ₯Ό μ£Όκ³ λ°›κ±°λ‚˜ κΈ°λŠ₯을 μš”μ²­ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
  • 톡신
    • APIλŠ” μ†Œν”„νŠΈμ›¨μ–΄ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ΄ λ‹€λ₯Έ μ†Œν”„νŠΈμ›¨μ–΄ μ„œλΉ„μŠ€λ‚˜ λΌμ΄λΈŒλŸ¬λ¦¬μ™€ ν†΅μ‹ ν•˜λŠ” 방법을 μ œκ³΅ν•©λ‹ˆλ‹€.
    • 예λ₯Ό λ“€μ–΄, APIλ₯Ό 톡해 μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ€ μ™ΈλΆ€ μ„œλΉ„μŠ€μ—μ„œ 데이터λ₯Ό κ°€μ Έμ˜€κ±°λ‚˜, λ°μ΄ν„°λ² μ΄μŠ€μ— μ €μž₯ν•˜λŠ” λ“±μ˜ μž‘μ—…μ„ ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
  • 좔상화
    • APIλŠ” 내뢀적인 κ΅¬ν˜„μ„ 숨기고, μ™ΈλΆ€ κ°œλ°œμžκ°€ ν•„μš”ν•œ κΈ°λŠ₯만 μ‚¬μš©ν•  수 있게 μΆ”μƒν™”λœ κΈ°λŠ₯을 μ œκ³΅ν•©λ‹ˆλ‹€.
    • λ‚΄λΆ€μ˜ λ³΅μž‘ν•œ λ‘œμ§μ„ μ‹ κ²½ 쓰지 μ•Šκ³ , μ •μ˜λœ λͺ…λ Ήλ§Œ ν˜ΈμΆœν•˜λ©΄ ν•΄λ‹Ή κΈ°λŠ₯을 μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

πŸ™‹β€β™‚οΈ DIP의 μ •μ˜μ—μ„œ λ§ν•˜λŠ” β€˜μΆ”μƒν™”λœ 것’과 β€˜μΆ”μƒν™”β€™μ˜ κ°œλ…μ˜ 차이점.

2️⃣ API의 μœ ν˜•.

1️⃣ μ›Ή API

  • μ›Ήμ—μ„œ λ™μž‘ν•˜λŠ” API둜, HTTP ν”„λ‘œν† μ½œμ„ 톡해 μ• ν”Œλ¦¬μΌ€μ΄μ…˜ κ°„ 톡신을 μ²˜λ¦¬ν•©λ‹ˆλ‹€.
    • 예λ₯Ό λ“€μ–΄, RESTful APIλ‚˜ SOAP APIλŠ” 웹을 톡해 데이터λ₯Ό μ£Όκ³ λ°›λŠ” 데 μ‚¬μš©λ©λ‹ˆλ‹€.
  • μ›Ή APIλŠ” ν΄λΌμ΄μ–ΈνŠΈμ™€ μ„œλ²„ κ°„μ˜ 톡신을 μ‰½κ²Œ ν•΄μ£Όλ©°, μ›Ή μ„œλΉ„μŠ€ λ˜λŠ” ν΄λΌμš°λ“œ μ„œλΉ„μŠ€μ—μ„œ 주둜 μ‚¬μš©λ©λ‹ˆλ‹€.
    • 예: GET, POST, PUT, DELETE λ©”μ„œλ“œλ₯Ό μ‚¬μš©ν•˜μ—¬ μ„œλ²„μ™€ 데이터λ₯Ό μ£Όκ³ λ°›λŠ” API.

2️⃣ 라이브러리 API

  • ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄μ—μ„œ μ œκ³΅ν•˜λŠ” 라이브러리의 κΈ°λŠ₯을 μ‚¬μš©ν•  수 있게 ν•΄μ£ΌλŠ” APIμž…λ‹ˆλ‹€.
    • νŠΉμ • κΈ°λŠ₯μ΄λ‚˜ 데이터 ꡬ쑰λ₯Ό μ œκ³΅ν•˜μ—¬ κ°œλ°œμžκ°€ ν•΄λ‹Ή κΈ°λŠ₯을 κ΅¬ν˜„ν•  수 μžˆλ„λ‘ λ„μ™€μ€λ‹ˆλ‹€.
      • 예: Java의 java.util.List APIλŠ” λͺ©λ‘ 데이터λ₯Ό μ‰½κ²Œ λ‹€λ£° 수 μžˆλŠ” λ©”μ„œλ“œμ™€ 클래슀λ₯Ό μ œκ³΅ν•©λ‹ˆλ‹€.

3️⃣ 운영체제 API

  • μš΄μ˜μ²΄μ œκ°€ μ œκ³΅ν•˜λŠ” μ‹œμŠ€ν…œ μžμ›μ„ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ΄ μ‚¬μš©ν•  수 μžˆλ„λ‘ ν•΄μ£ΌλŠ” APIμž…λ‹ˆλ‹€.
    • 파일 μ‹œμŠ€ν…œ, λ„€νŠΈμ›Œν¬, ν•˜λ“œμ›¨μ–΄ μž₯μΉ˜μ™€μ˜ μƒν˜Έμž‘μš©μ„ μ²˜λ¦¬ν•  수 있게 ν•©λ‹ˆλ‹€.
      • 예: Windows APIλŠ” 파일 읽기/μ“°κΈ°, λ„€νŠΈμ›Œν¬ 톡신 등을 μœ„ν•œ λ‹€μ–‘ν•œ κΈ°λŠ₯을 μ œκ³΅ν•©λ‹ˆλ‹€.

4️⃣ ν”„λ ˆμž„μ›Œν¬ API

  • νŠΉμ • ν”„λ ˆμž„μ›Œν¬μ—μ„œ μ œκ³΅ν•˜λŠ” APIλŠ” ν•΄λ‹Ή ν”„λ ˆμž„μ›Œν¬μ˜ κΈ°λŠ₯을 μ‰½κ²Œ μ‚¬μš©ν•  수 μžˆλ„λ‘ λ„μ™€μ€λ‹ˆλ‹€.
    • 예λ₯Ό λ“€μ–΄, Spring ν”„λ ˆμž„μ›Œν¬μ—μ„œ μ œκ³΅ν•˜λŠ” APIλŠ” μ›Ή μ• ν”Œλ¦¬μΌ€μ΄μ…˜ κ°œλ°œμ— ν•„μš”ν•œ λ‹€μ–‘ν•œ κΈ°λŠ₯을 μ œκ³΅ν•©λ‹ˆλ‹€.

πŸ™‹β€β™‚οΈ 라이브러리(Library)와 ν”„λ ˆμž„μ›Œν¬(Framework)의 차이점.

3️⃣ API의 λ™μž‘ 원리.

  • APIλŠ” 주둜 μš”μ²­(Request)κ³Ό 응닡(Response)으둜 μž‘λ™ν•©λ‹ˆλ‹€.
    • ν΄λΌμ΄μ–ΈνŠΈκ°€ νŠΉμ • μž‘μ—…μ„ μš”μ²­ν•˜λ©΄, μ„œλ²„κ°€ ν•΄λ‹Ή μž‘μ—…μ„ μ²˜λ¦¬ν•œ ν›„ κ²°κ³Όλ₯Ό λ°˜ν™˜ν•˜λŠ” λ°©μ‹μž…λ‹ˆλ‹€.
      • 1. ν΄λΌμ΄μ–ΈνŠΈκ°€ μš”μ²­ : ν΄λΌμ΄μ–ΈνŠΈ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ€ APIλ₯Ό μ‚¬μš©ν•΄ νŠΉμ • μž‘μ—…μ„ μ„œλ²„μ— μš”μ²­ν•©λ‹ˆλ‹€.
      • 2. μ„œλ²„κ°€ 처리 : API μ„œλ²„λŠ” μš”μ²­μ„ μ²˜λ¦¬ν•˜κ³ , ν•„μš”ν•œ 데이터λ₯Ό μ‘°νšŒν•˜κ±°λ‚˜ μž‘μ—…μ„ μˆ˜ν–‰ν•©λ‹ˆλ‹€.
      • 3. μ„œλ²„κ°€ 응닡 : μ„œλ²„λŠ” μš”μ²­μ— λŒ€ν•œ κ²°κ³Ό(λ°μ΄ν„°λ‚˜ μž‘μ—… 성곡 μ—¬λΆ€)λ₯Ό ν΄λΌμ΄μ–ΈνŠΈμ—κ²Œ μ‘λ‹΅μœΌλ‘œ λ°˜ν™˜ν•©λ‹ˆλ‹€.

4️⃣ API의 μ˜ˆμ‹œ.

1️⃣ Google Maps API.

  • κ°œλ°œμžλŠ” Google Maps APIλ₯Ό μ‚¬μš©ν•΄ μžμ‹ μ˜ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ— 지도 κΈ°λŠ₯을 μΆ”κ°€ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
    • 이λ₯Ό 톡해 μ‚¬μš©μžλŠ” μ‹€μ‹œκ°„ 지도 정보λ₯Ό 보고, κΈΈ μ•ˆλ‚΄λ₯Ό 받을 수 μžˆμŠ΅λ‹ˆλ‹€.
      • 예: https://maps.googleapis.com/maps/api/geocode/json?address=New+York

2️⃣ (ν˜„)X (ꡬ)Twitter API.

  • (ν˜„)X (ꡬ)TwitterλŠ” APIλ₯Ό 톡해 μ™ΈλΆ€ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ΄ νŠΈμœ—μ„ μ½κ±°λ‚˜ μž‘μ„±ν•  수 μžˆλŠ” κΈ°λŠ₯을 μ œκ³΅ν•©λ‹ˆλ‹€.
    • 예: νŠΉμ • ν•΄μ‹œνƒœκ·Έλ‘œ νŠΈμœ— 검색, μ‚¬μš©μž ν”„λ‘œν•„ 정보 쑰회 λ“±.

3️⃣ JPA API

  • JAP(Java Persistence API)λŠ” μžλ°” μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ—μ„œ λ°μ΄ν„°λ² μ΄μŠ€μ™€ μƒν˜Έμž‘μš©ν•  수 μžˆλŠ” API둜, 객체지ν–₯적으둜 λ°μ΄ν„°λ² μ΄μŠ€ μž‘μ—…μ„ ν•  수 있게 ν•©λ‹ˆλ‹€.
    • κ°œλ°œμžλŠ” SQL을 직접 μž‘μ„±ν•˜μ§€ μ•Šκ³ , JPAκ°€ μ œκ³΅ν•˜λŠ” λ©”μ„œλ“œλ₯Ό 톡해 λ°μ΄ν„°λ² μ΄μŠ€ μž‘μ—…μ„ μ²˜λ¦¬ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
EntityManager em = entityManagerFactory.createEntityManager();
User user = em.find(User.class, 1L) // User 객체 쑰회

πŸ™‹β€β™‚οΈ μ˜μ†μ„±(Persistence)λž€ λ¬΄μ—‡μΌκΉŒ?

4️⃣ API의 단점.

1️⃣ μ˜μ‘΄μ„±.

  • μ™ΈλΆ€ APIλ₯Ό μ‚¬μš©ν•  경우, ν•΄λ‹Ή API에 μ˜μ‘΄ν•˜κ²Œ λ©λ‹ˆλ‹€.
    • λ§Œμ•½ APIκ°€ λ³€κ²½λ˜κ±°λ‚˜ μ€‘λ‹¨λ˜λ©΄ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ΄ 영ν–₯을 받을 수 μžˆμŠ΅λ‹ˆλ‹€.

πŸ™‹β€β™‚οΈ μ˜μ‘΄μ„±(Dependency)

2️⃣ μ„±λŠ₯.

  • APIλ₯Ό μ‚¬μš©ν•œ 톡신이 느릴 수 μžˆμŠ΅λ‹ˆλ‹€.
    • 특히 원격 μ„œλ²„μ™€μ˜ API ν˜ΈμΆœμ€ λ„€νŠΈμ›Œν¬ 지연에 영ν–₯을 받을 수 μžˆμŠ΅λ‹ˆλ‹€.

3️⃣ μ œν•œ 사항.

  • API μ œκ³΅μžλŠ” μ‚¬μš©λŸ‰μ„ μ œν•œν•  수 μžˆμŠ΅λ‹ˆλ‹€.
    • 예λ₯Ό λ“€μ–΄, ν•˜λ£¨μ— ν˜ΈμΆœν•  수 μžˆλŠ” API μš”μ²­ μˆ˜μ— μ œν•œμ΄ μžˆμ„ 수 μžˆμŠ΅λ‹ˆλ‹€.

5️⃣ κ²°λ‘ .

  • APIλŠ” μ†Œν”„νŠΈμ›¨μ–΄ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ΄ μ„œλ‘œ μƒν˜Έμž‘μš©ν•  수 μžˆλ„λ‘ν•˜λŠ” 쀑간 닀리 역할을 ν•©λ‹ˆλ‹€.
    • 이λ₯Ό 톡해 κ°œλ°œμžλŠ” λ‹€λ₯Έ μ†Œν”„νŠΈμ›¨μ–΄μ˜ κΈ°λŠ₯을 μž¬μ‚¬μš©ν•˜κ±°λ‚˜, μ™ΈλΆ€ μ„œλΉ„μŠ€μ™€μ˜ 톡신을 톡해 더 ν’λΆ€ν•œ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ λ§Œλ“€ 수 μžˆμŠ΅λ‹ˆλ‹€.
  • APIλŠ” ν˜„λŒ€ μ†Œν”„νŠΈμ›¨μ–΄ κ°œλ°œμ—μ„œ ν•„μˆ˜μ μΈ ꡬ성 μš”μ†Œλ‘œ 자리 작고 있으며, 이λ₯Ό 톡해 μ• ν”Œλ¦¬μΌ€μ΄μ…˜ κ°„ 톡합과 ν˜‘μ—…μ΄ 더 μ‰½κ²Œ μ΄λ£¨μ–΄μ§‘λ‹ˆλ‹€.