Home > CS > 2024 > πŸ’Ύ [CS] APIμ—μ„œμ˜ μΈν„°νŽ˜μ΄μŠ€(Interface)λž€ λ¬΄μ—‡μΌκΉŒ?

πŸ’Ύ [CS] APIμ—μ„œμ˜ μΈν„°νŽ˜μ΄μŠ€(Interface)λž€ λ¬΄μ—‡μΌκΉŒ?
CS

πŸ’Ύ [CS] APIμ—μ„œμ˜ μΈν„°νŽ˜μ΄μŠ€(Interface)λž€ λ¬΄μ—‡μΌκΉŒ?

  • APIμ—μ„œμ˜ μΈν„°νŽ˜μ΄μŠ€(Interface)λŠ” ν”„λ‘œκ·Έλž¨ κ°„ μƒν˜Έμž‘μš©μ„ μœ„ν•œ κ·œμΉ™μ΄λ‚˜ 방법을 μ •μ˜ν•œ 것을 μ˜λ―Έν•©λ‹ˆλ‹€.
  • μ—¬κΈ°μ„œ μΈν„°νŽ˜μ΄μŠ€(Interface)λŠ” API(μ‘μš© ν”„λ‘œκ·Έλž˜λ° μΈν„°νŽ˜μ΄μŠ€, Application Programming Interface)κ°€ μ œκ³΅ν•˜λŠ” κΈ°λŠ₯을 λ‹€λ₯Έ μ†Œν”„νŠΈμ›¨μ–΄λ‚˜ μ‹œμŠ€ν…œμ΄ μ–΄λ–»κ²Œ μ΄μš©ν•  수 μžˆλŠ”μ§€λ₯Ό κ·œμ •ν•œ λͺ…세라고 ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

1️⃣ APIμ—μ„œμ˜ μΈν„°νŽ˜μ΄μŠ€ μ •μ˜

  • μΈν„°νŽ˜μ΄μŠ€λŠ” μ‹œμŠ€ν…œμ΄ μ œκ³΅ν•˜λŠ” κΈ°λŠ₯을 μ™ΈλΆ€μ—μ„œ μ–΄λ–»κ²Œ μ‚¬μš©ν•  수 μžˆλŠ”μ§€μ— λŒ€ν•œ κ·œμΉ™κ³Ό ꡬ쑰λ₯Ό μ„€λͺ…ν•©λ‹ˆλ‹€.
    • μ΄λŠ” ν•¨μˆ˜, λ©”μ†Œλ“œ, 데이터 ν˜•μ‹, 호좜 방법 λ“± λ‹€μ–‘ν•œ μš”μ†Œλ‘œ ꡬ성될 수 있으며, APIλ₯Ό 톡해 μ†Œν”„νŠΈμ›¨μ–΄ μ»΄ν¬λ„ŒνŠΈ κ°„μ˜ μƒν˜Έμž‘μš©μ„ κ°€λŠ₯ν•˜κ²Œ ν•©λ‹ˆλ‹€.

1️⃣ μ£Όμš” νŠΉμ§•.

1️⃣ ν•¨μˆ˜λ‚˜ λ©”μ†Œλ“œ 호좜 κ·œμΉ™.

  • APIλŠ” μ™ΈλΆ€ ν”„λ‘œκ·Έλž¨μ΄ ν˜ΈμΆœν•  수 μžˆλŠ” ν•¨μˆ˜λ‚˜ λ©”μ†Œλ“œλ₯Ό μ •μ˜ν•©λ‹ˆλ‹€.
    • μΈν„°νŽ˜μ΄μŠ€λŠ” 이 ν•¨μˆ˜λ‚˜ λ©”μ†Œλ“œκ°€ μ–΄λ–»κ²Œ 호좜되고, μ–΄λ–€ μΈμˆ˜κ°€ ν•„μš”ν•œμ§€, 그리고 λ°˜ν™˜ 값이 무엇인지λ₯Ό λͺ…μ‹œν•©λ‹ˆλ‹€.
      • 예λ₯Ό λ“€μ–΄, νŠΉμ • APIμ—μ„œ 데이터λ₯Ό κ°€μ Έμ˜€λŠ” ν•¨μˆ˜κ°€ μžˆλ‹€λ©΄, κ·Έ ν•¨μˆ˜κ°€ μ–΄λ–€ μž…λ ₯ 값을 ν•„μš”λ‘œ ν•˜κ³ , μ–΄λ–€ ν˜•μ‹μ˜ 데이터λ₯Ό λ°˜ν™˜ν•˜λŠ”μ§€ μ •μ˜ 된 것이 μΈν„°νŽ˜μ΄μŠ€ μž…λ‹ˆλ‹€.

2️⃣ λͺ…μ„Έν™”λœ μž…λ ₯κ³Ό 좜λ ₯.

  • API μΈν„°νŽ˜μ΄μŠ€λŠ” 데이터 ν˜•μ‹κ³Ό ꡬ쑰λ₯Ό λͺ…ν™•νžˆ μ •μ˜ν•©λ‹ˆλ‹€.
    • μ΄λŠ” κ°œλ°œμžκ°€ API와 μƒν˜Έμž‘μš©ν•  λ•Œ μ–΄λ–€ ν˜•μ‹μ˜ μž…λ ₯κ³Ό 좜λ ₯을 μ²˜λ¦¬ν•΄μ•Ό ν•˜λŠ”μ§€ μ΄ν•΄ν•˜λŠ” 데 ν•„μˆ˜μ μž…λ‹ˆλ‹€.
      • 예λ₯Ό λ“€μ–΄, API의 ν•œ ν•¨μˆ˜κ°€ JSON ν˜•μ‹μ˜ μž…λ ₯ 데이터λ₯Ό λ°›κ³  XML ν˜•μ‹μœΌλ‘œ 좜λ ₯을 λ°˜ν™˜ν•œλ‹€λ©΄, 이 λͺ¨λ“  사항은 μΈν„°νŽ˜μ΄μŠ€μ— λͺ…μ‹œλ˜μ–΄ μžˆμ–΄μ•Ό ν•©λ‹ˆλ‹€.

3️⃣ 좔상화.

  • μΈν„°νŽ˜μ΄μŠ€λŠ” API의 λ‚΄λΆ€ κ΅¬ν˜„μ„ μΆ”μƒν™”ν•˜κ³ , μ™ΈλΆ€ μ‚¬μš©μžμ—κ²ŒλŠ” ν•„μš”ν•œ κΈ°λŠ₯λ§Œμ„ μ œκ³΅ν•˜λŠ” κ΅¬μ‘°μž…λ‹ˆλ‹€.
    • APIλ₯Ό μ‚¬μš©ν•˜λŠ” κ°œλ°œμžλŠ” κ·Έ λ‚΄λΆ€κ°€ μ–΄λ–»κ²Œ λ™μž‘ν•˜λŠ”μ§€ μ•Œ ν•„μš”κ°€ μ—†μœΌλ©°, 정해진 κ·œκ²©λŒ€λ‘œ ν˜ΈμΆœν•˜λ©΄ μ›ν•˜λŠ” κ²°κ³Όλ₯Ό 얻을 수 μžˆμŠ΅λ‹ˆλ‹€.

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

4️⃣ 계약(Contract)

  • APIμ—μ„œμ˜ μΈν„°νŽ˜μ΄μŠ€λŠ” μΌμ’…μ˜ κ³„μ•½μœΌλ‘œ 간주될 수 μžˆμŠ΅λ‹ˆλ‹€.
    • APIλŠ” μ‚¬μš©μžμ—κ²Œ νŠΉμ • κΈ°λŠ₯을 μ œκ³΅ν•˜κΈ° μœ„ν•œ 약속을 ν•˜λ©°, μ‚¬μš©μžλŠ” κ·Έ μ•½μ†λœ λŒ€λ‘œ μΈν„°νŽ˜μ΄μŠ€λ₯Ό μ‚¬μš©ν•©λ‹ˆλ‹€.
      • 이λ₯Ό 톡해 μ„œλ‘œ λ‹€λ₯Έ μ‹œμŠ€ν…œ κ°„μ˜ μ›ν™œν•œ 톡신이 κ°€λŠ₯ν•΄μ§‘λ‹ˆλ‹€.

2️⃣ APIμ—μ„œμ˜ μΈν„°νŽ˜μ΄μŠ€μ˜ μ—­ν• .

1️⃣ μ„œλΉ„μŠ€ 제곡.

  • APIλŠ” μ‹œμŠ€ν…œμ΄ μ œκ³΅ν•˜λŠ” κΈ°λŠ₯을 외뢀에 κ³΅κ°œν•˜μ—¬, λ‹€λ₯Έ μ‹œμŠ€ν…œμ΄λ‚˜ ν”„λ‘œκ·Έλž¨μ΄ κ·Έ κΈ°λŠ₯을 ν™œμš©ν•  수 있게 ν•©λ‹ˆλ‹€.
    • 이 κ³Όμ •μ—μ„œ μΈν„°νŽ˜μ΄μŠ€λŠ” μ–΄λ–€ κΈ°λŠ₯이 μ œκ³΅λ˜λŠ”μ§€, μ–΄λ–»κ²Œ μ‚¬μš©ν•΄μ•Ό ν•˜λŠ”μ§€λ₯Ό μ„€λͺ…ν•˜λŠ” 섀계도 역할을 ν•©λ‹ˆλ‹€.

2️⃣ ν˜Έν™˜μ„± 보μž₯.

  • API μΈν„°νŽ˜μ΄μŠ€λŠ” μ‹œμŠ€ν…œ κ°„μ˜ μƒν˜Έμž‘μš©μ—μ„œ ν˜Έν™˜μ„±μ„ 보μž₯ν•˜λŠ” 역할을 ν•©λ‹ˆλ‹€.
    • ν•œ μ‹œμŠ€ν…œμ΄ μ œκ³΅ν•˜λŠ” APIλ₯Ό μ™ΈλΆ€ μ‹œμŠ€ν…œμ΄ μ΄μš©ν•  λ•Œ, μΈν„°νŽ˜μ΄μŠ€λ₯Ό μ€€μˆ˜ν•¨μœΌλ‘œμ¨ μ„œλ‘œ λ‹€λ₯Έ μ‹œμŠ€ν…œ 간에도 μΌκ΄€λœ μƒν˜Έμž‘μš©μ΄ κ°€λŠ₯ν•΄μ§‘λ‹ˆλ‹€.

3️⃣ μ‚¬μš©μžμ™€ μ‹œμŠ€ν…œ κ°„μ˜ 경계 μ„€μ •.

  • API μΈν„°νŽ˜μ΄μŠ€λŠ” μ™ΈλΆ€ μ‚¬μš©μžκ°€ μ ‘κ·Όν•  수 μžˆλŠ” κΈ°λŠ₯κ³Ό, λ‚΄λΆ€ μ‹œμŠ€ν…œμ—μ„œλ§Œ μ‚¬μš©λ˜λŠ” κΈ°λŠ₯을 κ΅¬λΆ„ν•˜λŠ” 경계선 역할을 ν•©λ‹ˆλ‹€.
    • μ΄λŠ” λ³΄μ•ˆ μΈ‘λ©΄μ—μ„œλ„ μ€‘μš”ν•˜λ©°, μ‚¬μš©μžλŠ” μΈν„°νŽ˜μ΄μŠ€λ₯Ό 톡해 제곡된 κΈ°λŠ₯λ§Œμ„ μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

4️⃣ μž¬μ‚¬μš©μ„±.

  • μΈν„°νŽ˜μ΄μŠ€λŠ” λ™μΌν•œ κ·œκ²©μ„ λ”°λ₯΄λ―€λ‘œ, ν•œ 번 μ •μ˜λœ APIλŠ” λ‹€μ–‘ν•œ ν”„λ‘œκ·Έλž¨μ΄λ‚˜ μ‹œμŠ€ν…œμ—μ„œ μž¬μ‚¬μš©λ  수 μžˆμŠ΅λ‹ˆλ‹€.
    • 이λ₯Ό 톡해 개발 μ‹œκ°„κ³Ό λΉ„μš©μ„ μ ˆκ°ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

3️⃣ μ˜ˆμ‹œ: RESTful API의 μΈν„°νŽ˜μ΄μŠ€.

  • RESTful APIλ₯Ό 예둜 λ“€λ©΄, μΈν„°νŽ˜μ΄μŠ€λŠ” 주둜 HTTP λ©”μ†Œλ“œ(GET, POST, PUT, DELETE λ“±)λ₯Ό μ‚¬μš©ν•˜μ—¬ λ¦¬μ†ŒμŠ€μ— μ ‘κ·Όν•˜λŠ” 방법을 κ·œμ •ν•©λ‹ˆλ‹€.
    • GET μš”μ²­ : νŠΉμ • 데이터λ₯Ό κ°€μ Έμ˜€κΈ° μœ„ν•œ κ·œμΉ™μ„ μ •μ˜
    • POST μš”μ²­ : 데이터λ₯Ό μƒμ„±ν•˜λŠ” 방법.
    • PUT μš”μ²­ : 데이터λ₯Ό μ—…λ°μ΄νŠΈν•˜λŠ” 방법.
    • DELETE μš”μ²­ : 데이터λ₯Ό μ‚­μ œν•˜λŠ” 방법.
  • RESTful API의 μΈν„°νŽ˜μ΄μŠ€λŠ” μš”μ²­μ— 따라 μ–΄λ–€ 경둜(URL)λ₯Ό μ‚¬μš©ν• μ§€, μ–΄λ–€ λ§€κ°œλ³€μˆ˜μ™€ 헀더가 ν•„μš”ν•œμ§€, 그리고 응닡이 μ–΄λ–€ ν˜•νƒœλ‘œ λŒμ•„μ˜¬μ§€λ₯Ό κ·œμ •ν•©λ‹ˆλ‹€.

4️⃣ μΈν„°νŽ˜μ΄μŠ€μ™€ ν”„λ‘œν† μ½œμ˜ 차이점.

  • μΈν„°νŽ˜μ΄μŠ€
    • κΈ°λŠ₯을 μ œκ³΅ν•˜λŠ” 방식과 κ·œμΉ™μ„ μ„€λͺ…ν•©λ‹ˆλ‹€.
      • μ–΄λ–¨κ²Œ 데이터λ₯Ό μž…λ ₯ν•˜κ³ , κ²°κ³Όλ₯Ό 좜λ ₯λ°›λŠ”μ§€μ— λŒ€ν•œ μ•½μ†μž…λ‹ˆλ‹€.
  • ν”„λ‘œν† μ½œ
    • 데이터가 μ–΄λ–»κ²Œ μ „μ†‘λ˜λŠ”μ§€μ— λŒ€ν•œ κ·œμΉ™μ„ μ„€λͺ…ν•©λ‹ˆλ‹€.
      • 톡신 κ·œμΉ™μ„ 닀루며, 전솑 방식에 쀑점을 λ‘‘λ‹ˆλ‹€.
        • 예λ₯Ό λ“€μ–΄, HTTPλ‚˜ TCP/IPλŠ” ν”„λ‘œν† μ½œμž…λ‹ˆλ‹€.

5️⃣ κ²°λ‘ .

  • APIμ—μ„œ μΈν„°νŽ˜μ΄μŠ€λŠ” ν”„λ‘œκ·Έλž¨ κ°„ μƒν˜Έμž‘μš©μ„ μœ„ν•œ λͺ…μ„Έλ‘œ, μ™ΈλΆ€ μ‹œμŠ€ν…œμ΄λ‚˜ μ†Œν”„νŠΈμ›¨μ–΄κ°€ μ–΄λ–»κ²Œ κΈ°λŠ₯을 ν˜ΈμΆœν•˜κ³  μ‚¬μš©ν•  수 μžˆλŠ”μ§€λ₯Ό κ·œμ •ν•©λ‹ˆλ‹€.
    • μ΄λŠ” μ†Œν”„νŠΈμ›¨μ–΄ ꡬ성 μš”μ†Œ κ°„μ˜ κ³„μ•½μ²˜λŸΌ λ™μž‘ν•˜λ©°, μ‚¬μš©μžμ™€ μ‹œμŠ€ν…œ κ°„μ˜ 경계λ₯Ό μ„€μ •ν•˜κ³  ν˜Έν™˜μ„±μ„ 보μž₯ν•˜μ—¬ μ›ν™œν•œ 톡신을 κ°€λŠ₯ν•˜κ²Œ ν•©λ‹ˆλ‹€.