API κ³μ½ κ²μ¦μ λ§μ€ν°νμ¬ μνΈ μ°κ²°λ μμ€ν μμ μνν ν΅μ κ³Ό λ°μ΄ν° 무결μ±μ 보μ₯νμΈμ. λͺ¨λ² μ¬λ‘, λꡬ λ° μ€μ μ¬λ‘λ₯Ό μμ보μΈμ.
API ν μ€νΈ: κ³μ½ κ²μ¦μ λν μ’ ν© κ°μ΄λ
μ€λλ μνΈ μ°κ²°λ λμ§νΈ νκ²½μμ μ ν리μΌμ΄μ νλ‘κ·Έλλ° μΈν°νμ΄μ€(API)λ νλ μννΈμ¨μ΄ μμ€ν μ μ€μΆμ λλ€. APIλ λ€μν μ ν리μΌμ΄μ κ³Ό μλΉμ€ κ°μ μνν ν΅μ κ³Ό λ°μ΄ν° κ΅νμ κ°λ₯νκ² ν©λλ€. κ·Έλ¬λ μ΄λ¬ν μνΈ μμ©μ 볡μ‘μ±μ ν΅ν© μ€ν¨μ μνμ μ΄λνμ¬ λ°μ΄ν° λΆμΌμΉ, μ ν리μΌμ΄μ λ€μ΄νμ, κ·Έλ¦¬κ³ κΆκ·Ήμ μΌλ‘λ μ’μ§ μμ μ¬μ©μ κ²½νμΌλ‘ μ΄μ΄μ§ μ μμ΅λλ€. API ν μ€νΈμ μ€μν μΈ‘λ©΄μΈ κ³μ½ κ²μ¦μ μ΄λ¬ν μνμ μννλ κ°λ ₯ν ν΄κ²°μ± μΌλ‘ λΆμνκ³ μμ΅λλ€.
API κ³μ½ κ²μ¦μ΄λ 무μμΈκ°μ?
κ³μ½ ν μ€νΈλΌκ³ λ νλ API κ³μ½ κ²μ¦μ APIκ° μ μλ κ³μ½ λλ μ¬μμ μ€μνλμ§ νμΈνλ λ° μ€μ μ λ‘λλ€. μ΄ κ³μ½μ API μ 곡μ(APIλ₯Ό μ 곡νλ μλΉμ€)μ API μλΉμ(APIλ₯Ό μ¬μ©νλ μ ν리μΌμ΄μ ) κ°μ ν©μ μν μ ν©λλ€. κ³μ½μ μΌλ°μ μΌλ‘ λ€μμ μ€λͺ ν©λλ€:
- μμ² λ§€κ°λ³μ λ° λ°μ΄ν° μ ν: λ°μ΄ν° νμ(μ: JSON, XML), λ°μ΄ν° μ ν(μ: λ¬Έμμ΄, μ μ, λΆλ¦¬μΈ) λ° νμ/μ νμ λ§€κ°λ³μλ₯Ό ν¬ν¨νμ¬ API μμ²μ λν΄ μμλλ μ λ ₯μ λͺ μν©λλ€.
- μλ΅ νμ λ° λ°μ΄ν° μ ν: API μλ΅μ ꡬ쑰μ λ°μ΄ν° μ νμ μ μνμ¬ μλΉμκ° μμλ νμμΌλ‘ λ°μ΄ν°λ₯Ό μμ νλλ‘ λ³΄μ₯ν©λλ€.
- μν μ½λ: API μμ²μ μ±κ³΅ λλ μ€ν¨λ₯Ό λνλ΄λ λ° μ¬μ©λλ HTTP μν μ½λλ₯Ό λͺ μνμ¬ μλΉμκ° λ€μν μλ리μ€λ₯Ό μ μ νκ² μ²λ¦¬ν μ μλλ‘ ν©λλ€.
- μ€λ₯ μ²λ¦¬: μ€λ₯ λ°μ μ APIκ° λ°ννλ μ€λ₯ λ©μμ§μ μ½λλ₯Ό μ μνμ¬ μλΉμκ° μμΈλ₯Ό μ μμ μΌλ‘ μ²λ¦¬ν μ μλλ‘ ν©λλ€.
- μΈμ¦ λ° κΆν λΆμ¬ λ©μ»€λμ¦: API μλΉμλ₯Ό μΈμ¦νκ³ κΆνμ λΆμ¬νλ λ° μ¬μ©λλ λ°©λ²μ μμΈν μ€λͺ νμ¬ λ¦¬μμ€μ λν μμ ν μ‘μΈμ€λ₯Ό 보μ₯ν©λλ€.
κ³μ½ κ²μ¦μ APIμ μ€μ λμμ μ΄ λ―Έλ¦¬ μ μλ κ³μ½κ³Ό λΉκ΅νλ κ²μ ν¬ν¨ν©λλ€. μ΄λ₯Ό ν΅ν΄ API μ 곡μμ μλΉμκ° λμΌν μ΄ν΄λ₯Ό 곡μ νκ² λμ΄ ν΅ν© λ¬Έμ λ₯Ό μλ°©νκ³ μ λ’°ν μ μλ ν΅μ μ μ΄μ§ν©λλ€.
API κ³μ½ κ²μ¦μ΄ μ€μν μ΄μ λ 무μμΈκ°μ?
API κ³μ½ κ²μ¦μ μ¬λ¬ κ°μ§ μ€μν μ΄μ μ μ 곡νλ©°, μ΄λ λͺ¨λ κ²¬κ³ ν API ν μ€νΈ μ λ΅μ νμμ μΈ λΆλΆμ λλ€:
1. ν΅ν© λ¬Έμ μ μ‘°κΈ° λ°κ²¬
κ³μ½ κ²μ¦μ ν΅ν΄ κ°λ° μλͺ μ£ΌκΈ° μ΄κΈ°μ ν΅ν© λ¬Έμ λ₯Ό μλ³νμ¬ λ 볡μ‘ν λ¨κ³λ‘ μ νλκΈ° μ μ νμ ν μ μμ΅λλ€. APIμ κ³μ½ μ€μ μ¬λΆλ₯Ό νμΈν¨μΌλ‘μ¨ λΉμ©μ΄ λ§μ΄ λλ μ¬μμ κ³Ό μ§μ°μ μ΄λνκΈ° μ μ λΆμΌμΉμ λΉμΌκ΄μ±μ μ‘μλΌ μ μμ΅λλ€. μ΄λ μλ§μ λ 립μ μΈ μλΉμ€κ° APIλ₯Ό ν΅ν΄ μνΈ μμ©νλ λ§μ΄ν¬λ‘μλΉμ€ μν€ν μ²μμ νΉν μ€μν©λλ€.
μμ: μ μμκ±°λ νλ«νΌμμ κ²°μ κ²μ΄νΈμ¨μ΄ APIκ° μ μμκ±°λ μ ν리μΌμ΄μ μ μλ¦¬μ§ μκ³ μλ΅ νμμ λ³κ²½νλ€κ³ μμν΄ λ³΄μΈμ. κ³μ½ κ²μ¦μ μ΄ λΆμΌμΉλ₯Ό μ¦μ λ°κ²¬νμ¬ μ£Όλ¬Έ μ²λ¦¬ μ€ν¨λ₯Ό λ°©μ§ν©λλ€.
2. λΈλ μ΄νΉ 체μΈμ§(Breaking Changes) μν κ°μ
APIλ λμμμ΄ μ§ννλ©° λ³κ²½μ λΆκ°νΌν©λλ€. κ·Έλ¬λ μ μ ν κ²μ¦ μμ΄ λ³κ²½ μ¬νμ λμ νλ©΄ κΈ°μ‘΄ ν΅ν©μ΄ κΉ¨μ§ μ μμ΅λλ€. κ³μ½ κ²μ¦μ μμ λ§ μν μ νμ¬ APIμ λν λͺ¨λ μμ μ΄ κ³μ½μ μλ°νμ§ μκ³ μ’ μλ μ ν리μΌμ΄μ μ λ°©ν΄νμ§ μλλ‘ λ³΄μ₯ν©λλ€.
μμ: μ¨λΌμΈ μ¬νμ¬ APIκ° νκ³΅νΈ κ²μ μλ΅μ μλ‘μ΄ μ νμ νλλ₯Ό λμ ν μ μμ΅λλ€. κ³μ½ κ²μ¦μ μ΄ λ³κ²½μ΄ μ νλλ₯Ό μμνμ§ μλ κΈ°μ‘΄ μλΉμλ₯Ό μμμν€μ§ μλλ€λ κ²μ νμΈν©λλ€.
3. API μ λ’°μ± λ° μμ μ± ν₯μ
κ³μ½ μ€μλ₯Ό κ°μ ν¨μΌλ‘μ¨ API κ³μ½ κ²μ¦μ APIμ μ λ°μ μΈ μ λ’°μ±κ³Ό μμ μ±μ κΈ°μ¬ν©λλ€. APIκ° μΌκ΄λκ³ μμΈ‘ κ°λ₯νκ² μλνλλ‘ λ³΄μ₯νμ¬ μκΈ°μΉ μμ μ€λ₯ λ° λ€μ΄νμ κ°λ₯μ±μ μ€μ λλ€. μ΄λ λ λμ μ¬μ©μ κ²½νκ³Ό APIμ λν μ λ’°λ μ¦κ°λ‘ μ΄μ΄μ§λλ€.
μμ: κ³μ½ ν μ€νΈλ₯Ό ν΅ν΄ κ²μ¦λ λλ‘ μμλ νμμΌλ‘ λ°μ΄ν°λ₯Ό μΌκ΄λκ² λ°ννλ κΈμ΅ λ°μ΄ν° APIλ μ¬μ©μλ€ μ¬μ΄μμ μ λ’°λ₯Ό ꡬμΆνκ³ κΈμ΅ λͺ¨λΈμ μ νμ±μ 보μ₯ν©λλ€.
4. ν κ°μ νμ κ°ν
κ³μ½ κ²μ¦μ API μ 곡μμ μλΉμ κ°μ νμ μ μ΄μ§ν©λλ€. λͺ ννκ³ κ³΅μ λ κ³μ½μ μ μν¨μΌλ‘μ¨ APIμ λμκ³Ό κΈ°λμΉμ λν 곡ν΅λ μ΄ν΄λ₯Ό μ 곡ν©λλ€. μ΄λ λͺ¨νΈν¨κ³Ό μμ¬μν΅ μ€λ₯λ₯Ό μ€μ¬ λ μνν ν΅ν©κ³Ό λΉ λ₯Έ κ°λ° μ£ΌκΈ°λ‘ μ΄μ΄μ§λλ€.
μμ: μ λ½μ κ°λ°νμ΄ λΆλ―Έ νμ΄ μ 곡νλ APIμ μμ‘΄νλ μλΉμ€λ₯Ό ꡬμΆνλ κ²½μ°, μ μ μλ κ³μ½κ³Ό μ² μ ν κ³μ½ κ²μ¦μ μ§λ¦¬μ 격차λ₯Ό ν΄μνκ³ μνν ν΅ν©μ 보μ₯ν μ μμ΅λλ€.
5. API ν μ€νΈ μλν μ΄μ§
κ³μ½ κ²μ¦μ μ½κ² μλνν μ μμ΄ μ§μμ ν΅ν© λ° μ§μμ λ°°ν¬(CI/CD) νμ΄νλΌμΈμ ν΅ν©ν μ μμ΅λλ€. μ΄λ₯Ό ν΅ν΄ API κ³μ½μ μ§μμ μΌλ‘ λͺ¨λν°λ§νκ³ λͺ¨λ μλ° μ¬νμ μ μνκ² κ°μ§νκ³ ν΄κ²°ν μ μμ΅λλ€.
μμ: μ°¨λ 곡μ μ ν리μΌμ΄μ μ CI/CD νμ΄νλΌμΈμ κ³μ½ ν μ€νΈλ₯Ό ν΅ν©νλ©΄ κ° μ½λ λ°°ν¬ ν μ΄μ μ μμΉ APIκ° κ³μ½μ λ°λΌ μλνλμ§ μλμΌλ‘ νμΈν μ μμ΅λλ€.
API κ³μ½ κ²μ¦μ μ ν
API κ³μ½ κ²μ¦μλ μ¬λ¬ κ°μ§ μ κ·Ό λ°©μμ΄ μμΌλ©°, κ°κ° μ₯λ¨μ μ΄ μμ΅λλ€:
1. μ€ν€λ§ κ²μ¦
μ€ν€λ§ κ²μ¦μ API μμ² λ° μλ΅μ ꡬ쑰μ λ°μ΄ν° μ νμ΄ λ―Έλ¦¬ μ μλ μ€ν€λ§λ₯Ό μ€μνλμ§ νμΈνλ κΈ°λ³Έ κΈ°μ μ λλ€. μ€ν€λ§λ μΌλ°μ μΌλ‘ JSON Schema, XML Schema Definition(XSD) λλ OpenAPI Specification(μ΄μ Swagger)κ³Ό κ°μ νμμ μ¬μ©νμ¬ μ μλ©λλ€.
μμ: JSON Schemaλ₯Ό μ¬μ©νμ¬ μ¬μ©μ λ±λ‘ APIκ° `firstName`(λ¬Έμμ΄), `lastName`(λ¬Έμμ΄), `email`(λ¬Έμμ΄, μ΄λ©μΌ νμ), `password`(λ¬Έμμ΄, μ΅μ 8μ)μ κ°μ νλκ° μλ μμ²μ μλ½νλμ§ κ²μ¦ν©λλ€.
2. μλΉμ μ£Όλ κ³μ½(CDC)
μλΉμ μ£Όλ κ³μ½(CDC)μ API μλΉμκ° API μ 곡μμ λν κΈ°λλ₯Ό κ³μ½ ννλ‘ μ μνλ νμ μ μ κ·Ό λ°©μμ λλ€. μ΄λ¬ν κ³μ½μ API μ 곡μκ° μμ μ APIκ° μλΉμμ μꡬ μ¬νμ μΆ©μ‘±νλμ§ νμΈνλ λ° μ¬μ©λ©λλ€. μ΄ μ κ·Ό λ°©μμ κΈ΄λ°ν νμ μ μ΄μ§νκ³ APIκ° μλΉμμ νΉμ μꡬμ λ§κ² μ‘°μ λλλ‘ λ³΄μ₯ν©λλ€.
CDCλ₯Ό μν μΈκΈ° μλ νλ μμν¬μλ Pactμ Spring Cloud Contractκ° μμ΅λλ€.
μμ: μ¨λΌμΈ μμ μ μ ν μμΈ μ 보 APIκ° νΉμ νμμΌλ‘ μ ν μ΄λ¦κ³Ό κ°κ²©μ λ°νν΄μΌ νλ€λ Pact κ³μ½μ μ μν©λλ€. κ·Έλ° λ€μ μ ν μμΈ μ 보 API μ 곡μλ μ΄ κ³μ½μ μ¬μ©νμ¬ μμ μ APIκ° μ΄λ¬ν μꡬ μ¬νμ μ€μνλμ§ νμΈν©λλ€.
3. 곡κΈμ μΈ‘ κ³μ½ ν μ€νΈ
μ΄ μ κ·Ό λ°©μμμ API μ 곡μλ μμ μ APIκ° κ³μ½μ μ€μνλμ§ νμΈνκΈ° μν΄ ν μ€νΈλ₯Ό μμ±ν©λλ€. μ΄λ¬ν ν μ€νΈλ API μ¬μ(μ: OpenAPI Specification) λλ λ³λμ κ³μ½ μ μλ₯Ό κΈ°λ°μΌλ‘ ν μ μμ΅λλ€. μ΄ μ κ·Ό λ°©μμ API μ 곡μκ° APIμ κ³μ½ μ€μ μ¬λΆλ₯Ό μ κ·Ήμ μΌλ‘ λͺ¨λν°λ§νλλ‘ λ³΄μ₯ν©λλ€.
μμ: λ μ¨ API μ 곡μλ OpenAPI Specificationμ κΈ°λ°μΌλ‘ ν μ€νΈλ₯Ό μμ±νμ¬ APIκ° μ¬λ°λ₯Έ μ¨λ λ¨μμ κ°μ μ νμΌλ‘ λ μ¨ λ°μ΄ν°λ₯Ό λ°ννλμ§ νμΈν©λλ€.
4. νλ κ³μ½ ν μ€νΈ
νλ κ³μ½ ν μ€νΈλ μ€ν€λ§ κ²μ¦μ λμ΄ APIμ μ€μ λμμ νμΈνλ λ° μ€μ μ λ‘λλ€. μ¬κΈ°μλ λ€μν μλ리μ€, μ£μ§ μΌμ΄μ€ λ° μ€λ₯ 쑰건μ ν μ€νΈνμ¬ APIκ° λ€μν μν©μμ μμλλ‘ μλνλμ§ νμΈνλ κ²μ΄ ν¬ν¨λ©λλ€.
μμ: μν APIκ° μ΄κ³Ό μΈμΆ μλ리μ€λ₯Ό μ¬λ°λ₯΄κ² μ²λ¦¬νκ³ μ¬μ©μκ° κ³μ’μ μλ λλ³΄λ€ λ λ§μ λμ μΈμΆνλ €κ³ ν λ μ μ ν μ€λ₯ λ©μμ§λ₯Ό λ°ννλμ§ ν μ€νΈν©λλ€.
API κ³μ½ κ²μ¦μ μν λꡬ λ° κΈ°μ
API κ³μ½ κ²μ¦μ μ©μ΄νκ² νλ μ¬λ¬ λꡬμ κΈ°μ μ΄ μμ΅λλ€:
- Pact: μ¬λ¬ νλ‘κ·Έλλ° μΈμ΄λ₯Ό μ§μνλ μλΉμ μ£Όλ κ³μ½μ μν μΈκΈ° μλ νλ μμν¬μ λλ€.
- Spring Cloud Contract: Spring μνκ³ λ΄μμ κ³μ½ ν μ€νΈλ₯Ό μν νλ μμν¬μ λλ€.
- Swagger Inspector/ReadyAPI: κΈ°μ‘΄ APIμμ API μ μλ₯Ό μμ±νκ³ κ³μ½ ν μ€νΈλ₯Ό λ§λλ λꡬμ λλ€.
- Postman: μ€ν€λ§ κ²μ¦ λ° κ³μ½ ν μ€νΈλ₯Ό μ§μνλ λ리 μ¬μ©λλ API ν μ€νΈ λꡬμ λλ€.
- Karate DSL: κ³μ½ ν μ€νΈλ₯Ό κΈ°λ³Έμ μΌλ‘ μ§μνλ μ€ν μμ€ API ν μ€νΈ μλν νλ μμν¬μ λλ€.
- Rest-assured: κ³μ½ κ²μ¦μ ν¬ν¨νμ¬ REST API ν μ€νΈλ₯Ό λ¨μννλ Java λΌμ΄λΈλ¬λ¦¬μ λλ€.
- Dredd: μ€μ HTTP μλν¬μΈνΈμ λν΄ API μ€λͺ μ κ²μ¦νλ λꡬμ λλ€.
API κ³μ½ κ²μ¦μ μν λͺ¨λ² μ¬λ‘
API κ³μ½ κ²μ¦μ μ΄μ μ κ·Ήλννλ €λ©΄ λ€μ λͺ¨λ² μ¬λ‘λ₯Ό κ³ λ €νμμμ€:
1. λͺ ννκ³ ν¬κ΄μ μΈ API κ³μ½ μ μ
API κ³μ½μ λͺ ννκ³ ν¬κ΄μ μ΄λ©° μ λ¬Έμνλμ΄μΌ ν©λλ€. APIμ λμκ³Ό κΈ°λμΉλ₯Ό μ ννκ² λ°μν΄μΌ ν©λλ€. OpenAPI Specification(OAS)κ³Ό κ°μ νμ€νλ νμμ μ¬μ©νμ¬ κ³μ½μ μ μνμμμ€.
μμ: μ¬μ©μ νλ‘ν APIμ λν μ μ μλ κ³μ½μ μ¬μ© κ°λ₯ν λͺ¨λ νλ(μ: μ΄λ¦, μ΄λ©μΌ, μ£Όμ), λ°μ΄ν° μ ν λ° λͺ¨λ μ ν¨μ± κ²μ¬ κ·μΉ(μ: μ΄λ©μΌ νμ μ ν¨μ± κ²μ¬)μ λͺ μν΄μΌ ν©λλ€.
2. κ³μ½ μ μμ μλΉμ μ°Έμ¬
κ°λ₯νλ©΄ API κ³μ½ μ μμ API μλΉμλ₯Ό μ°Έμ¬μν€μμμ€. μ΄λ₯Ό ν΅ν΄ κ³μ½μ΄ μλΉμμ νΉμ μꡬμ κΈ°λμΉλ₯Ό μΆ©μ‘±νλλ‘ λ³΄μ₯ν©λλ€. μλΉμ μ£Όλ κ³μ½(CDC)μ μ΄λ₯Ό λ¬μ±νλ μ’μ λ°©λ²μ λλ€.
μμ: κ³ κ° μ§μ APIμ μ λ²μ μ μΆμνκΈ° μ μ APIλ₯Ό μ¬μ©ν κ³ κ° μ§μνκ³Ό νμνμ¬ νΌλλ°±μ μμ§νκ³ API κ³μ½μ λ°μν©λλ€.
3. κ³μ½ κ²μ¦ μλν
CI/CD νμ΄νλΌμΈμ μΌλΆλ‘ κ³μ½ κ²μ¦μ μλννμμμ€. μ΄λ₯Ό ν΅ν΄ κ°λ° μλͺ μ£ΌκΈ° μ΄κΈ°μ λͺ¨λ κ³μ½ μλ°μ κ°μ§νκ³ ν΄κ²°ν μ μμ΅λλ€. κΈ°μ‘΄ ν μ€νΈ μΈνλΌμ ν΅ν©λλ λꡬλ₯Ό μ¬μ©νμμμ€.
μμ: CI/CD νμ΄νλΌμΈμ Pact ν μ€νΈλ₯Ό ν΅ν©νμ¬ API μ 곡μκ° API μλΉμκ° μ μν μꡬ μ¬νμ μΆ©μ‘±νλμ§ μλμΌλ‘ νμΈν©λλ€.
4. λ€μν μλλ¦¬μ€ λ° μ£μ§ μΌμ΄μ€ ν μ€νΈ
μ μμ μΈ κ²½λ‘λ§ ν μ€νΈνμ§ λ§μμμ€. λ€μν μλ리μ€, μ£μ§ μΌμ΄μ€ λ° μ€λ₯ 쑰건μ ν μ€νΈνμ¬ APIκ° λ€μν μν©μμ μμλλ‘ μλνλμ§ νμΈνμμμ€. μ¬κΈ°μλ μ ν¨νμ§ μμ μ λ ₯, μκΈ°μΉ μμ λ°μ΄ν° λ° λμ λΆνλ‘ ν μ€νΈνλ κ²μ΄ ν¬ν¨λ©λλ€.
μμ: κ²°μ μ²λ¦¬ APIκ° μκΈ λΆμ‘±, μ ν¨νμ§ μμ μ μ©μΉ΄λ λ²νΈ, λ€νΈμν¬ μκ° μ΄κ³Όμ κ°μ μλ리μ€λ₯Ό μ¬λ°λ₯΄κ² μ²λ¦¬νλμ§ ν μ€νΈν©λλ€.
5. API κ³μ½ μ§μμ λͺ¨λν°λ§
API κ³μ½μ μκ°μ΄ μ§λ¨μ λ°λΌ λ³κ²½λ μ μμ΅λλ€. API κ³μ½μ μ§μμ μΌλ‘ λͺ¨λν°λ§νμ¬ μ΅μ μνλ₯Ό μ μ§νκ³ μ νμ±μ 보μ₯νμμμ€. κ³μ½ μλ°μ΄ κ°μ§λλ©΄ κ²½κ³ λ₯Ό μ 곡νλ λꡬλ₯Ό μ¬μ©νμμμ€.
μμ: λͺ¨λν°λ§ λꡬλ₯Ό μ¬μ©νμ¬ API μλ΅ μκ°κ³Ό μ€λ₯μ¨μ μΆμ νκ³ μμ λμμμ λ²μ΄λλ κ²½μ° κ²½κ³ λ₯Ό λ°μ΅λλ€.
6. API κ³μ½μ λ²μ κ΄λ¦¬ μ¬μ©
API κ³μ½μ μ½λλ‘ μ·¨κΈνκ³ λ²μ κ΄λ¦¬μ μ μ₯νμμμ€. μ΄λ₯Ό ν΅ν΄ λ³κ²½ μ¬νμ μΆμ νκ³ μ΄μ λ²μ μΌλ‘ λλ리며 κ³μ½ μ λ°μ΄νΈμ ν¨κ³Όμ μΌλ‘ νμ ν μ μμ΅λλ€.
μμ: Gitμ μ¬μ©νμ¬ OpenAPI Specification νμΌμ κ΄λ¦¬νλ©΄ API κ³μ½μ λ³κ²½ μ¬νμ μΆμ νκ³ νμν κ²½μ° μ΄μ λ²μ μΌλ‘ λλ릴 μ μμ΅λλ€.
7. API κ³μ½ λͺ ννκ² λ¬Έμν
API κ³μ½μ λͺ ννκ² λ¬Έμννκ³ API μλΉμκ° μ½κ² μ κ·Όν μ μλλ‘ νμμμ€. μ΄λ μλΉμκ° APIμ λμκ³Ό κΈ°λμΉλ₯Ό μ΄ν΄νλ λ° λμμ΄ λμ΄ ν΅ν© λ¬Έμ μ κ°λ₯μ±μ μ€μ λλ€.
μμ: OpenAPI Specificationμ λͺ νν λ¬Έμ λ° μμ μ ν¨κ» κ°λ°μ ν¬νΈμ κ²μνμ¬ κ°λ°μκ° APIλ₯Ό μ½κ² μ΄ν΄νκ³ μ¬μ©ν μ μλλ‘ ν©λλ€.
8. μ¬ννΈ-λ ννΈ(Shift-Left) μ κ·Ό λ°©μ μ±ν
κ°λ° μλͺ μ£ΌκΈ° μ΄κΈ°μ κ³μ½ κ²μ¦μ ν΅ν©νμμμ€. κ°λ°μκ° μ½λλ₯Ό 컀λ°νκΈ° μ μ λ‘컬μμ κ³μ½ ν μ€νΈλ₯Ό μμ±νκ³ μ€νν μ μλλ‘ κΆνμ λΆμ¬νμμμ€. μ΄ μ¬ννΈ-λ ννΈ μ κ·Ό λ°©μμ κ³μ½ μλ°μ΄ κ°λ° νλ‘μΈμ€μ νλ° λ¨κ³μ λλ¬νλ κ²μ λ°©μ§νλ λ° λμμ΄ λ©λλ€.
μμ: κ°λ°μκ° Pactμ κ°μ λꡬλ₯Ό μ¬μ©νμ¬ μλΉμ μ£Όλ κ³μ½μ μμ±νκ³ μ½λλ₯Ό 리ν¬μ§ν 리μ νΈμνκΈ° μ μ λ‘컬μμ μ€ννλλ‘ κΆμ₯ν©λλ€.
API κ³μ½ κ²μ¦μ μ€μ μ¬λ‘
λ€μμ λ€μν μ°μ μμ API κ³μ½ κ²μ¦μ μ μ©ν μ μλ μ€μ μ¬λ‘μ λλ€:
1. μ μμκ±°λ
μ μμκ±°λ νλ«νΌμ μ ν μΉ΄νλ‘κ·Έ, μ£Όλ¬Έ μ²λ¦¬, κ²°μ κ²μ΄νΈμ¨μ΄ λ° λ°°μ‘κ³Ό κ°μ λ€μν κΈ°λ₯μ μν΄ μ¬λ¬ APIμ μμ‘΄ν©λλ€. κ³μ½ κ²μ¦μ μ¬μ©νμ¬ μ΄λ¬ν APIκ° μννκ² ν΅μ νκ³ νλ«νΌ μ 체μμ λ°μ΄ν°κ° μΌκ΄λλλ‘ λ³΄μ₯ν μ μμ΅λλ€. μλ₯Ό λ€μ΄, μ ν μΉ΄νλ‘κ·Έ APIκ° μμ νμμΌλ‘ μ ν μ΄λ¦, μ€λͺ λ° κ°κ²©μ λ°ννλμ§ κ²μ¦νλ©΄ μΉμ¬μ΄νΈμ νμ μ€λ₯λ₯Ό λ°©μ§ν μ μμ΅λλ€.
2. κΈμ΅ μλΉμ€
κΈμ΅ κΈ°κ΄μ κ³μ κ΄λ¦¬, κ±°λ μ²λ¦¬ λ° μ¬κΈ° νμ§μ κ°μ μμ μ μν΄ APIλ₯Ό μ¬μ©ν©λλ€. κ³μ½ κ²μ¦μ μ¬μ©νμ¬ μ΄λ¬ν APIμ 보μκ³Ό μ νμ±μ 보μ₯ν μ μμ΅λλ€. μλ₯Ό λ€μ΄, κ±°λ μ²λ¦¬ APIκ° μ μ ν μΈμ¦ λ° κΆν λΆμ¬λ₯Ό μꡬνλμ§ κ²μ¦νλ©΄ λ―Όκ°ν κΈμ΅ λ°μ΄ν°μ λν λ¬΄λ¨ μ‘μΈμ€λ₯Ό λ°©μ§ν μ μμ΅λλ€. μ€ν€λ§ κ²μ¦μ κ° κ±°λμ λν΄ μμλλ λͺ¨λ νλκ° μ¬λ°λ₯Έ νμμΌλ‘ μ μ‘λλλ‘ λ³΄μ₯ν©λλ€. μ΄λ κ·μ μ€μμ λ§€μ° μ€μν©λλ€.
3. μλ£
μλ£ μ 곡μλ νμ λ°μ΄ν° κ΅ν, μ½μ κ΄λ¦¬ λ° λ³΄ν μ²κ΅¬ μ²λ¦¬λ₯Ό μν΄ APIλ₯Ό μ¬μ©ν©λλ€. κ³μ½ κ²μ¦μ μ¬μ©νμ¬ μ΄λ¬ν μμ€ν μ μνΈ μ΄μ©μ±μ 보μ₯νκ³ νμ κ°μΈ μ 보λ₯Ό 보νΈν μ μμ΅λλ€. μλ₯Ό λ€μ΄, νμ λ°μ΄ν° APIκ° HIPAA κ·μ μ μ€μνλμ§ κ²μ¦νλ©΄ λ―Όκ°ν νμ μ λ³΄κ° μμ νκ³ κ·μ μ μ€μνμ¬ μ²λ¦¬λλλ‘ λ³΄μ₯ν©λλ€.
4. λ¬Όλ₯ λ° κ³΅κΈλ§
λ¬Όλ₯ νμ¬λ λ°°μ‘ μΆμ , μ¬κ³ κ΄λ¦¬ λ° λ°°μ‘ κ²½λ‘ μ΅μ νλ₯Ό μν΄ APIλ₯Ό μ¬μ©ν©λλ€. κ³μ½ κ²μ¦μ μ¬μ©νμ¬ μ΄λ¬ν APIμ μ νμ±κ³Ό μ λ’°μ±μ 보μ₯ν μ μμ΅λλ€. μλ₯Ό λ€μ΄, λ°°μ‘ μΆμ APIκ° λ°°μ‘λ¬Όμ μ νν μμΉμ μνλ₯Ό λ°ννλμ§ κ²μ¦νλ©΄ μ§μ°μ λ°©μ§νκ³ κ³ κ° λ§μ‘±λλ₯Ό ν₯μμν¬ μ μμ΅λλ€.
5. μ λΆ μλΉμ€
μ λΆλ μ¨λΌμΈ μΈκΈ μ κ³ , λ©΄ν μ μ² λ° κ³΅κ³΅ μ 보 μ κ·Όκ³Ό κ°μ μλΉμ€λ₯Ό μλ―Όμκ² μ 곡νκΈ° μν΄ μ μ λ APIλ₯Ό μ¬μ©νκ³ μμ΅λλ€. κ³μ½ κ²μ¦μ μ¬μ©νμ¬ μ΄λ¬ν μλΉμ€μ μ κ·Όμ±κ³Ό μ λ’°μ±μ 보μ₯ν μ μμ΅λλ€. μλ₯Ό λ€μ΄, μ¨λΌμΈ μΈκΈ μ κ³ APIκ° μ¬λ°λ₯Έ λ°μ΄ν° νμμ μλ½νκ³ μ νν κ²°κ³Όλ₯Ό λ°ννλμ§ κ²μ¦νλ©΄ μλ―Όλ€μ΄ μννκ³ ν¨μ¨μ μΌλ‘ μ κ³ μ μ°¨λ₯Ό λ§μΉ μ μλλ‘ λ³΄μ₯ν©λλ€.
κ²°λ‘
API κ³μ½ κ²μ¦μ μνΈ μ°κ²°λ μμ€ν μμ μνν ν΅μ κ³Ό λ°μ΄ν° 무결μ±μ 보μ₯νλ API ν μ€νΈμ μ€μν μΈ‘λ©΄μ λλ€. λͺ ννκ³ ν¬κ΄μ μΈ API κ³μ½μ μ μνκ³ , κ³μ½ κ²μ¦μ μλννλ©°, API λμμ μ§μμ μΌλ‘ λͺ¨λν°λ§ν¨μΌλ‘μ¨ μ‘°μ§μ ν΅ν© μ€ν¨μ μνμ ν¬κ² μ€μ΄κ³ , API μ λ’°μ±μ ν₯μμν€λ©°, ν κ°μ νμ μ κ°νν μ μμ΅λλ€. API κ³μ½ κ²μ¦ λͺ¨λ² μ¬λ‘λ₯Ό ꡬννλ κ²μ μ€λλ μ 볡μ‘ν λμ§νΈ νκ²½μ μꡬλ₯Ό μΆ©μ‘±νλ κ²¬κ³ νκ³ νμ₯ κ°λ₯νλ©° μ λ’°ν μ μλ APIλ₯Ό ꡬμΆνλ λ° νμμ μ λλ€.
API κ³μ½ κ²μ¦μ API κ°λ° λ° ν μ€νΈ μ λ΅μ ν΅μ¬ κ΅¬μ± μμλ‘ λ°μλ€μ΄μμμ€. κ·Έ μ΄μ μ λΆλͺ ν©λλ€: ν₯μλ API νμ§, κ°μλ ν΅ν© μν, κ·Έλ¦¬κ³ ν₯μλ κ³ κ° λ§μ‘±λμ λλ€. κ³μ½ κ²μ¦μ ν¬μν¨μΌλ‘μ¨ κ·νλ APIμ μ‘°μ§μ μ₯κΈ°μ μΈ μ±κ³΅μ ν¬μνλ κ²μ λλ€.