API κ²μ΄νΈμ¨μ΄ μμ² λΌμ°ν μ λν μ’ ν© κ°μ΄λ. μ μΈκ³μ μΌλ‘ ν¨μ¨μ μ΄κ³ νμ₯ κ°λ₯ν λ§μ΄ν¬λ‘μλΉμ€ λ°°ν¬λ₯Ό μν μ λ΅, ν¨ν΄, κ΅¬μ± λ° λͺ¨λ² μ¬λ‘λ₯Ό λ€λ£Ήλλ€.
API κ²μ΄νΈμ¨μ΄: λ§μ΄ν¬λ‘μλΉμ€ μν€ν μ²λ₯Ό μν μμ² λΌμ°ν λ§μ€ν°νκΈ°
λ§μ΄ν¬λ‘μλΉμ€μ μΈκ³μμ API κ²μ΄νΈμ¨μ΄λ λͺ¨λ ν΄λΌμ΄μΈνΈ μμ²μ λν λ¨μΌ μ§μ μ μν μ ν©λλ€. ν΅μ¬ μ± μμ μ΄λ¬ν μμ²μ μ μ ν λ°±μλ μλΉμ€λ‘ ν¨μ¨μ μ΄κ³ μμ νκ² λΌμ°ν νλ κ²μ λλ€. ν¨κ³Όμ μΈ μμ² λΌμ°ν μ λ§μ΄ν¬λ‘μλΉμ€ μν€ν μ²μμ μ΅μ μ μ±λ₯, νμ₯μ± λ° μ μ§ κ΄λ¦¬μ±μ λ¬μ±νλ λ° λ§€μ° μ€μν©λλ€. μ΄ μ’ ν© κ°μ΄λλ API κ²μ΄νΈμ¨μ΄ μμ² λΌμ°ν μ 볡μ‘μ±μ νν€μΉκ³ λ€μν μ λ΅, ν¨ν΄, κ΅¬μ± μ΅μ λ° λͺ¨λ² μ¬λ‘λ₯Ό λ€λ£Ήλλ€.
API κ²μ΄νΈμ¨μ΄ μμ² λΌμ°ν μ΄ν΄νκΈ°
μμ² λΌμ°ν μ νΉμ κΈ°μ€μ λ°λΌ λ€μ΄μ€λ μμ²μ μ¬λ°λ₯Έ λ°±μλ μλΉμ€λ‘ 보λ΄λ νλ‘μΈμ€μ λλ€. μ΄ νλ‘μΈμ€λ μμ²(μ: HTTP λ©μλ, κ²½λ‘, ν€λ, 쿼리 λ§€κ°λ³μ)μ λΆμνκ³ μ¬μ μ μλ κ·μΉμ μ μ©νμ¬ λμ μλΉμ€λ₯Ό κ²°μ νλ κ²μ ν¬ν¨ν©λλ€. API κ²μ΄νΈμ¨μ΄λ μ’ μ’ λ¦¬λ²μ€ νλ‘μ μν μ νμ¬ μΈλΆ μΈκ³λ‘λΆν° λ΄λΆ λ§μ΄ν¬λ‘μλΉμ€ μν€ν μ²λ₯Ό 보νΈν©λλ€.
μ£Όμ κ°λ
- λΌμ°ν κ·μΉ: λ€μ΄μ€λ μμ²κ³Ό λ°±μλ μλΉμ€ κ°μ λ§€νμ μ μν©λλ€. μ΄λ¬ν κ·μΉμ μΌλ°μ μΌλ‘ URL κ²½λ‘, HTTP λ©μλ λλ ν€λμ κ°μ μμ² μμ±μ κΈ°λ°μΌλ‘ ν©λλ€.
- μλΉμ€ λμ€μ»€λ²λ¦¬: API κ²μ΄νΈμ¨μ΄κ° λ°±μλ μλΉμ€μ μ¬μ© κ°λ₯ν μΈμ€ν΄μ€λ₯Ό μ°Ύλ λ©μ»€λμ¦μ λλ€. μλΉμ€ λμ€μ»€λ²λ¦¬λ μλΉμ€ μΈμ€ν΄μ€κ° μμ£Ό μΆκ°λκ±°λ μ κ±°λ μ μλ λμ νκ²½μμ νμμ μ λλ€.
- λ‘λ λ°Έλ°μ±: κ³ΌλΆνλ₯Ό λ°©μ§νκ³ κ³ κ°μ©μ±μ 보μ₯νκΈ° μν΄ λ€μ΄μ€λ μμ²μ λ°±μλ μλΉμ€μ μ¬λ¬ μΈμ€ν΄μ€μ λΆμ°ν©λλ€.
- νΈλν½ κ΄λ¦¬: μλΉμ€μ λ€λ₯Έ λ²μ μ΄λ μΈμ€ν΄μ€λ‘μ νΈλν½ νλ¦μ μ μ΄νμ¬ μΉ΄λ리 λ°°ν¬ λ° A/B ν μ€νΈλ₯Ό κ°λ₯νκ² ν©λλ€.
- 보μ: μΉμΈλ ν΄λΌμ΄μΈνΈλ§ 보νΈλ μλΉμ€μ μ‘μΈμ€ν μ μλλ‘ λ³΄μ₯νλ μΈμ¦ λ° κΆν λΆμ¬ λ©μ»€λμ¦μ λλ€.
μμ² λΌμ°ν μ λ΅
API κ²μ΄νΈμ¨μ΄μμ μμ² λΌμ°ν μ μν΄ μ¬λ¬ μ λ΅μ μ¬μ©ν μ μμΌλ©°, κ° μ λ΅μλ μ₯λ¨μ μ΄ μμ΅λλ€. μ¬λ°λ₯Έ μ λ΅μ μ ννλ κ²μ μ ν리μΌμ΄μ μ νΉμ μꡬ μ¬νκ³Ό λ§μ΄ν¬λ‘μλΉμ€ μν€ν μ²μ 볡μ‘μ±μ λ°λΌ λ¬λΌμ§λλ€.
1. κ²½λ‘ κΈ°λ° λΌμ°ν
μ΄λ κ°μ₯ μΌλ°μ μ΄κ³ κ°λ¨ν λΌμ°ν
μ λ΅μ
λλ€. μμ²μ URL κ²½λ‘λ₯Ό κΈ°λ°μΌλ‘ λΌμ°ν
λ©λλ€. μλ₯Ό λ€μ΄, /usersλ‘μ μμ²μ `users` μλΉμ€λ‘ λΌμ°ν
λκ³ , /productsλ‘μ μμ²μ `products` μλΉμ€λ‘ λΌμ°ν
λ μ μμ΅λλ€.
μμ:
μ μμκ±°λ νλ«νΌμ μκ°ν΄ 보μΈμ. /api/v1/productsλ‘μ μμ²μ μ ν μΉ΄νλ‘κ·Έ λ§μ΄ν¬λ‘μλΉμ€λ‘ λΌμ°ν
λκ³ , /api/v1/ordersλ‘μ μμ²μ μ£Όλ¬Έ κ΄λ¦¬ λ§μ΄ν¬λ‘μλΉμ€λ‘ λΌμ°ν
λ μ μμ΅λλ€. μ΄λ κ΄μ¬μ¬μ λͺ
νν λΆλ¦¬λ₯Ό κ°λ₯νκ² νκ³ κ°λ³ μλΉμ€μ κ΄λ¦¬λ₯Ό λ μ½κ² λ§λλλ€.
ꡬμ±:
λ§μ API κ²μ΄νΈμ¨μ΄ νλ«νΌμμλ κ°λ¨ν ν¨ν΄ λ§€μΉμ μ¬μ©νμ¬ κ²½λ‘ κΈ°λ° λΌμ°ν μ ꡬμ±ν μ μμ΅λλ€. μλ₯Ό λ€μ΄, Kongμμλ νΉμ κ²½λ‘μ μΌμΉνλ μμ²μ νΉμ μλΉμ€λ‘ μ λ¬νλ λΌμ°νΈλ₯Ό μ μν μ μμ΅λλ€.
μ₯μ :
- ꡬννκ³ μ΄ν΄νκΈ° κ°λ¨ν©λλ€.
- ꡬμ±νκ³ μ μ§ κ΄λ¦¬νκΈ° μ½μ΅λλ€.
- κΈ°λ³Έμ μΈ λΌμ°ν μλ리μ€μ μ ν©ν©λλ€.
λ¨μ :
- μλΉμ€ μκ° λ§μμ§λ©΄ 볡μ‘ν΄μ§ μ μμ΅λλ€.
- λ 볡μ‘ν κΈ°μ€μ κΈ°λ°ν λΌμ°ν μ μ μ°μ±μ΄ μ νλ©λλ€.
2. ν€λ κΈ°λ° λΌμ°ν
μμ²μ νΉμ HTTP ν€λμ κ°μ κΈ°λ°μΌλ‘ λΌμ°ν λ©λλ€. μ΄λ μ½ν μΈ νμ(μ: `Accept` ν€λ κΈ°λ° λΌμ°ν )μ΄λ λ²μ κ΄λ¦¬(μ: μ¬μ©μ μ§μ `API-Version` ν€λ κΈ°λ° λΌμ°ν )μ κ°μ κΈ°λ₯μ ꡬννλ λ° μ μ©ν©λλ€.
μμ:
`products` μλΉμ€μ λ κ°μ§ λ²μ (v1 λ° v2)μ΄ μλ€κ³ μμν΄ λ³΄μΈμ. `X-API-Version`κ³Ό κ°μ μ¬μ©μ μ§μ ν€λλ₯Ό μ¬μ©νμ¬ μμ²μ μ μ ν λ²μ μΌλ‘ λΌμ°ν ν μ μμ΅λλ€. `X-API-Version: v1`μ΄ ν¬ν¨λ μμ²μ v1 μλΉμ€λ‘ λΌμ°ν λκ³ , `X-API-Version: v2`κ° ν¬ν¨λ μμ²μ v2 μλΉμ€λ‘ λΌμ°ν λ©λλ€. μ΄λ μ μ§μ λ°°ν¬ λ° A/B ν μ€νΈμ μ μ©ν©λλ€.
ꡬμ±:
λλΆλΆμ API κ²μ΄νΈμ¨μ΄λ ν€λ κ°μ κΈ°λ°μΌλ‘ λΌμ°ν κ·μΉμ μ μν μ μλλ‘ μ§μν©λλ€. μΌμΉμν¬ ν€λ μ΄λ¦κ³Ό μμ κ°μ μ§μ ν μ μμ΅λλ€. μλ₯Ό λ€μ΄, Azure API Managementμμλ μ μ± μ μ¬μ©νμ¬ ν€λ κ°μ κ²μ¬νκ³ κ·Έμ λ°λΌ μμ²μ λΌμ°ν ν μ μμ΅λλ€.
μ₯μ :
- κ²½λ‘ κΈ°λ° λΌμ°ν λ³΄λ€ λ λ§μ μ μ°μ±μ μ 곡ν©λλ€.
- μ½ν μΈ νμ λ° λ²μ κ΄λ¦¬λ₯Ό κ°λ₯νκ² ν©λλ€.
λ¨μ :
- κ²½λ‘ κΈ°λ° λΌμ°ν λ³΄λ€ κ΅¬μ±μ΄ λ 볡μ‘ν μ μμ΅λλ€.
- ν΄λΌμ΄μΈνΈκ° μμ²μ νΉμ ν€λλ₯Ό ν¬ν¨ν΄μΌ ν©λλ€.
3. 쿼리 λ§€κ°λ³μ κΈ°λ° λΌμ°ν
μμ²μ URLμ 쿼리 λ§€κ°λ³μ κ°μ κΈ°λ°μΌλ‘ λΌμ°ν λ©λλ€. μ΄λ κ³ κ° IDλ μ ν μΉ΄ν κ³ λ¦¬μ κ°μ΄ μμ²μ μΌλΆλ‘ μ λ¬λλ νΉμ κΈ°μ€μ λ°λΌ λΌμ°ν νλ λ° μ μ©ν©λλ€.
μμ:
κ³ κ°μ μ§λ¦¬μ μμΉμ λ°λΌ μμ²μ λ€λ₯Έ λ°±μλ μλΉμ€λ‘ λΌμ°ν
νλ €λ μλ리μ€λ₯Ό μκ°ν΄ 보μΈμ. `region`κ³Ό κ°μ 쿼리 λ§€κ°λ³μλ₯Ό μ¬μ©νμ¬ μ§μμ μ§μ ν μ μμ΅λλ€. /products?region=euκ° ν¬ν¨λ μμ²μ μ λ½μ μ ν μΉ΄νλ‘κ·Έ μλΉμ€λ‘ λΌμ°ν
λκ³ , /products?region=usκ° ν¬ν¨λ μμ²μ λ―Έκ΅μ μλΉμ€λ‘ λΌμ°ν
λ μ μμ΅λλ€. μ΄λ κΈλ‘λ² μ¬μ©μλ₯Ό μν μ±λ₯ λ° κ·μ μ€μλ₯Ό μ΅μ ννλ λ° λμμ΄ λ©λλ€.
ꡬμ±:
API κ²μ΄νΈμ¨μ΄λ μΌλ°μ μΌλ‘ URLμμ 쿼리 λ§€κ°λ³μλ₯Ό μΆμΆνμ¬ λΌμ°ν κ·μΉμ μ¬μ©νλ λ©μ»€λμ¦μ μ 곡ν©λλ€. Google Cloud API Gatewayμμλ μλΉμ€ ꡬμ±μ μ¬μ©νμ¬ μΏΌλ¦¬ λ§€κ°λ³μ κ°μ κΈ°λ°μΌλ‘ λΌμ°ν κ·μΉμ μ μν μ μμ΅λλ€.
μ₯μ :
- λμ κΈ°μ€μ λ°λ₯Έ λΌμ°ν μ νμ©ν©λλ€.
- μ§μλ³ λΌμ°ν κ³Ό κ°μ κΈ°λ₯μ ꡬννλ λ° μ μ©ν©λλ€.
λ¨μ :
- URLμ λ 볡μ‘νκ³ μ½κΈ° μ΄λ ΅κ² λ§λ€ μ μμ΅λλ€.
- ν΄λΌμ΄μΈνΈκ° μμ²μ νΉμ 쿼리 λ§€κ°λ³μλ₯Ό ν¬ν¨ν΄μΌ ν©λλ€.
4. λ©μλ κΈ°λ° λΌμ°ν
μμ²μ HTTP λ©μλ(μ: GET, POST, PUT, DELETE)λ₯Ό κΈ°λ°μΌλ‘ λΌμ°ν λ©λλ€. μ΄λ μ’ μ’ RESTful APIλ₯Ό μ 곡νκΈ° μν΄ κ²½λ‘ κΈ°λ° λΌμ°ν κ³Ό ν¨κ» μ¬μ©λ©λλ€.
μμ:
GET /usersλ₯Ό μ¬μ©μ μ 보λ₯Ό κ²μνλ μλΉμ€λ‘, POST /usersλ₯Ό μ μ¬μ©μλ₯Ό μμ±νλ μλΉμ€λ‘, PUT /users/{id}λ₯Ό μ¬μ©μλ₯Ό μ
λ°μ΄νΈνλ μλΉμ€λ‘, DELETE /users/{id}λ₯Ό μ¬μ©μλ₯Ό μμ νλ μλΉμ€λ‘ λΌμ°ν
ν μ μμ΅λλ€. μ΄λ λͺ
ννκ³ μΌκ΄λ API μ€κ³λ₯Ό μν΄ νμ€ HTTP λμ¬λ₯Ό νμ©ν©λλ€.
ꡬμ±:
API κ²μ΄νΈμ¨μ΄λ μΌλ°μ μΌλ‘ HTTP λ©μλλ₯Ό κΈ°λ°μΌλ‘ ν λΌμ°ν μ μ§μν©λλ€. μ£Όμ΄μ§ κ²½λ‘μ λν΄ κ° λ©μλμ λν λ³λμ λΌμ°νΈλ₯Ό μ μν μ μμ΅λλ€. AWS API Gatewayλ₯Ό μ¬μ©νλ©΄ 리μμ€μ κ° HTTP λ©μλμ λν΄ λ€λ₯Έ ν΅ν©μ ꡬμ±ν μ μμ΅λλ€.
μ₯μ :
- RESTful API μ€κ³λ₯Ό κ°λ₯νκ² ν©λλ€.
- HTTP λ©μλλ₯Ό κΈ°λ°μΌλ‘ ν λͺ νν κ΄μ¬μ¬ λΆλ¦¬.
λ¨μ :
- HTTP λ©μλμ λν μ’μ μ΄ν΄κ° νμν©λλ€.
5. μ½ν μΈ κΈ°λ° λΌμ°ν
μμ²μ μμ² λ³Έλ¬Έμ λ΄μ©μ κΈ°λ°μΌλ‘ λΌμ°ν λ©λλ€. μ΄λ 볡μ‘ν κΈ°μ€μ λ°λΌ λΌμ°ν νκ±°λ λΌμ°ν κ²°μ μ΄ μμ²μΌλ‘ μ μ‘λλ λ°μ΄ν°μ μμ‘΄ν λ μ μ©ν©λλ€. μ΄λ 쿼리 μμ²΄κ° λΌμ°ν μ μ£Όλνλ GraphQL ꡬνμμ νΉν μ μ©ν μ μμ΅λλ€.
μμ:
μλ‘ λ€λ₯Έ μ νμ λ¬Έμλ₯Ό μ²λ¦¬νλ μ¬λ¬ λ°±μλ μλΉμ€κ° μλ μλ리μ€λ₯Ό μκ°ν΄ 보μΈμ. μμ² λ³Έλ¬Έμ κ²μ¬νμ¬ λ¬Έμ μ νμ κ²°μ νκ³ μμ²μ μ μ ν μλΉμ€λ‘ λΌμ°ν ν μ μμ΅λλ€. μλ₯Ό λ€μ΄, μμ² λ³Έλ¬Έμ `documentType: 'invoice'` νλκ° μλ JSON νμ΄λ‘λκ° ν¬ν¨λ κ²½μ°, μμ²μ μ‘μ₯ μ²λ¦¬ μλΉμ€λ‘ λΌμ°ν ν μ μμ΅λλ€. κΈλ‘λ² λΉμ¦λμ€μ κ²½μ°, μ‘μ₯μ μ§μλ³ μ°¨μ΄(μ: λΆκ°κ°μΉμΈ κ·μΉ)κ° μμ μ μμΌλ―λ‘, μ½ν μΈ λ₯Ό ν΅ν΄ κ΅κ°λ₯Ό μλ³νμ¬ κ·Έμ λ°λΌ λΌμ°ν ν μλ μμ΅λλ€.
ꡬμ±:
μ½ν μΈ κΈ°λ° λΌμ°ν μ μΌλ°μ μΌλ‘ λ€λ₯Έ λΌμ°ν μ λ΅λ³΄λ€ λ μ κ΅ν ꡬμ±μ΄ νμν©λλ€. μμ² λ³Έλ¬Έμ κ²μ¬νκ³ λΌμ°ν κ²°μ μ λ΄λ¦¬κΈ° μν΄ μ€ν¬λ¦½ν μ΄λ μ¬μ©μ μ§μ μ½λλ₯Ό μ¬μ©ν΄μΌ ν μ μμ΅λλ€. Tyk API Gatewayλ μ½ν μΈ κΈ°λ° λΌμ°ν μ μ¬μ©ν μ μλ μμ² λ³ν λ° μ€ν¬λ¦½ν κΈ°λ₯μ μ 곡ν©λλ€.
μ₯μ :
- λΌμ°ν κ²°μ μμ κ°μ₯ ν° μ μ°μ±μ μ 곡ν©λλ€.
- 볡μ‘ν κΈ°μ€μ λ°λ₯Έ λΌμ°ν μ νμ©ν©λλ€.
λ¨μ :
- ꡬννκ³ κ΅¬μ±νκΈ° κ°μ₯ 볡μ‘ν μ μμ΅λλ€.
- μ¬μ©μ μ§μ μ½λλ μ€ν¬λ¦½ν μ΄ νμν μ μμ΅λλ€.
- μμ² λ³Έλ¬Έμ κ²μ¬ν΄μΌ νλ―λ‘ μ±λ₯μ μν₯μ μ€ μ μμ΅λλ€.
μμ² λΌμ°ν ν¨ν΄
μμ² λΌμ°ν μ ν₯μμν€κ³ λ§μ΄ν¬λ‘μλΉμ€ μμ€ν μ μ λ°μ μΈ μν€ν μ²λ₯Ό κ°μ νκΈ° μν΄ μ μ©ν μ μλ λͺ κ°μ§ ν립λ ν¨ν΄μ΄ μμ΅λλ€.
1. μ§κ³(Aggregation)
API κ²μ΄νΈμ¨μ΄λ μ¬λ¬ λ°±μλ μλΉμ€μ μλ΅μ ν΄λΌμ΄μΈνΈλ₯Ό μν λ¨μΌ μλ΅μΌλ‘ μ§κ³ν©λλ€. μ΄λ νμν μ볡 νμλ₯Ό μ€μ΄κ³ ν΄λΌμ΄μΈνΈ κ²½νμ λ¨μνν©λλ€.
μμ:
ν΄λΌμ΄μΈνΈκ° μ¬μ©μ νλ‘νμ μμ²ν λ API κ²μ΄νΈμ¨μ΄λ `users` μλΉμ€, `profiles` μλΉμ€, `addresses` μλΉμ€μμ λ°μ΄ν°λ₯Ό κ²μν΄μΌ ν μ μμ΅λλ€. API κ²μ΄νΈμ¨μ΄λ μ΄λ¬ν μλΉμ€μ μλ΅μ λ¨μΌ μ¬μ©μ νλ‘ν μλ΅μΌλ‘ μ§κ³νμ¬ ν΄λΌμ΄μΈνΈμκ² λ°νν©λλ€. μ΄ ν¨ν΄μ μ±λ₯μ ν₯μμν€κ³ ν΄λΌμ΄μΈνΈ μ ν리μΌμ΄μ μ 볡μ‘μ±μ μ€μ λλ€.
2. λ³ν(Transformation)
API κ²μ΄νΈμ¨μ΄λ ν΄λΌμ΄μΈνΈμ λ°±μλ μλΉμ€ κ°μ μμ²κ³Ό μλ΅μ λ³νν©λλ€. μ΄λ₯Ό ν΅ν΄ ν΄λΌμ΄μΈνΈλ λ°±μλ μλΉμ€μμ λ ΈμΆνλ APIμ λ€λ₯Έ APIλ₯Ό μ¬μ©ν μ μμΌλ©°, ν΄λΌμ΄μΈνΈλ₯Ό λ΄λΆ μν€ν μ²μμ λΆλ¦¬μν¬ μ μμ΅λλ€.
μμ:
ν΄λΌμ΄μΈνΈλ νΉμ λ°μ΄ν° νμμ΄λ λͺ λͺ κ·μΉμΌλ‘ μμ²μ λ³΄λΌ μ μμ΅λλ€. API κ²μ΄νΈμ¨μ΄λ μμ²μ λ°±μλ μλΉμ€κ° μ΄ν΄ν μ μλ νμμΌλ‘ λ³νν©λλ€. λ§μ°¬κ°μ§λ‘, API κ²μ΄νΈμ¨μ΄λ λ°±μλ μλΉμ€μ μλ΅μ ν΄λΌμ΄μΈνΈκ° κΈ°λνλ νμμΌλ‘ λ³νν©λλ€. μ΄ ν¨ν΄μ λ§μ΄ν¬λ‘μλΉμ€ μν€ν μ²μμ λ ν° μ μ°μ±κ³Ό μ μμ±μ νμ©ν©λλ€.
3. 체μ΄λ(Chaining)
API κ²μ΄νΈμ¨μ΄λ μμ²μ μ¬λ¬ λ°±μλ μλΉμ€μ μμ°¨μ μΌλ‘ λΌμ°ν ν©λλ€. κ° μλΉμ€λ νΉμ μμ μ μννκ³ κ·Έ κ²°κ³Όλ₯Ό 체μΈμ λ€μ μλΉμ€λ‘ μ λ¬ν©λλ€.
μμ:
μ£Όλ¬Έμ μ²λ¦¬ν λ API κ²μ΄νΈμ¨μ΄λ λ¨Όμ μμ²μ `μ£Όλ¬Έ μ ν¨μ± κ²μ¬` μλΉμ€λ‘ λΌμ°ν ν λ€μ, `κ²°μ μ²λ¦¬` μλΉμ€λ‘, λ§μ§λ§μΌλ‘ `μ£Όλ¬Έ μ΄ν` μλΉμ€λ‘ λΌμ°ν ν μ μμ΅λλ€. κ° μλΉμ€λ νΉμ μμ μ μννκ³ μ£Όλ¬Έμ 체μΈμ λ€μ μλΉμ€λ‘ μ λ¬ν©λλ€. μ΄ ν¨ν΄μ 볡μ‘ν λΉμ¦λμ€ νλ‘μΈμ€λ₯Ό λͺ¨λμμ΄κ³ νμ₯ κ°λ₯ν λ°©μμΌλ‘ ꡬνν μ μκ² ν©λλ€.
4. λΆκΈ°(Branching)
API κ²μ΄νΈμ¨μ΄λ νΉμ 쑰건μ λ°λΌ μμ²μ λ€λ₯Έ λ°±μλ μλΉμ€λ‘ λΌμ°ν ν©λλ€. μ΄λ₯Ό ν΅ν΄ μμ² μ»¨ν μ€νΈμ λ°λΌ λ€λ₯Έ λΉμ¦λμ€ λ‘μ§μ ꡬνν μ μμ΅λλ€.
μμ:
μ¬μ©μμ μμΉμ λ°λΌ API κ²μ΄νΈμ¨μ΄λ μμ²μ λ€λ₯Έ κ°κ²© μ± μ μλΉμ€λ‘ λΌμ°ν ν μ μμ΅λλ€. μ λ½ μ¬μ©μλ λΆκ°κ°μΉμΈλ₯Ό μ μ©νλ μλΉμ€λ‘ λΌμ°ν λκ³ , λ―Έκ΅ μ¬μ©μλ κ·Έλ μ§ μμ μλΉμ€λ‘ λΌμ°ν λ μ μμ΅λλ€. μ΄λ₯Ό ν΅ν΄ λΉμ¦λμ€ λ‘μ§μ νΉμ μ§μμ΄λ κ³ κ° μΈκ·Έλ¨ΌνΈμ λ§κ² μ‘°μ ν μ μμ΅λλ€.
κ΅¬μ± μ΅μ
API κ²μ΄νΈμ¨μ΄μμ μμ² λΌμ°ν μ ꡬμ±νλ κ²μ μΌλ°μ μΌλ‘ λΌμ°νΈ, μλΉμ€ λ° μ μ± μ μ μνλ κ²μ ν¬ν¨ν©λλ€. νΉμ κ΅¬μ± μ΅μ μ μ¬μ© μ€μΈ API κ²μ΄νΈμ¨μ΄ νλ«νΌμ λ°λΌ λ€λ¦ λλ€.
1. λΌμ°νΈ μ μ
λΌμ°νΈλ λ€μ΄μ€λ μμ²κ³Ό λ°±μλ μλΉμ€ κ°μ λ§€νμ μ μν©λλ€. μΌλ°μ μΌλ‘ λ€μ μ 보λ₯Ό ν¬ν¨ν©λλ€:
- κ²½λ‘: μΌμΉμν¬ URL κ²½λ‘.
- λ©μλ: μΌμΉμν¬ HTTP λ©μλ(μ: GET, POST, PUT, DELETE).
- ν€λ: μΌμΉμν¬ ν€λ.
- 쿼리 λ§€κ°λ³μ: μΌμΉμν¬ μΏΌλ¦¬ λ§€κ°λ³μ.
- μλΉμ€: μμ²μ λΌμ°ν ν λ°±μλ μλΉμ€.
2. μλΉμ€ μ μ
μλΉμ€λ API κ²μ΄νΈμ¨μ΄κ° μμ²μ λΌμ°ν ν μ μλ λ°±μλ μλΉμ€λ₯Ό λνλ λλ€. μΌλ°μ μΌλ‘ λ€μ μ 보λ₯Ό ν¬ν¨ν©λλ€:
- URL: λ°±μλ μλΉμ€μ URL.
- μν νμΈ: λ°±μλ μλΉμ€μ μνλ₯Ό νμΈν μλν¬μΈνΈ.
- λ‘λ λ°Έλ°μ±: μ¬μ©ν λ‘λ λ°Έλ°μ± μκ³ λ¦¬μ¦.
3. μ μ±
μ μ± μ μμ²κ³Ό μλ΅μ νΉμ λ‘μ§μ μ μ©νλ λ° μ¬μ©λ©λλ€. μΈμ¦, κΆν λΆμ¬, μλ μ ν, μμ² λ³ν λ° μλ΅ λ³νμ μ¬μ©λ μ μμ΅λλ€.
API κ²μ΄νΈμ¨μ΄ μ ν
μ¬λ¬ API κ²μ΄νΈμ¨μ΄ μ루μ μ΄ μμΌλ©°, κ°κ° κ°μ κ³Ό μ½μ μ΄ μμ΅λλ€. API κ²μ΄νΈμ¨μ΄μ μ νμ μ ν리μΌμ΄μ μ νΉμ μꡬ μ¬νκ³Ό μΈνλΌ νκ²½μ λ°λΌ λ¬λΌμ§λλ€.
μΈκΈ° μλ API κ²μ΄νΈμ¨μ΄ μ루μ
- Kong: Nginx μμ ꡬμΆλ μ€ν μμ€ API κ²μ΄νΈμ¨μ΄μ λλ€. νμ₯μ±μ΄ λ°μ΄λκ³ λ€μν νλ¬κ·ΈμΈμ μ§μν©λλ€.
- Tyk: API κ΄λ¦¬ λ° λΆμμ μ€μ μ λ μ€ν μμ€ API κ²μ΄νΈμ¨μ΄μ λλ€.
- Apigee: API κ²μ΄νΈμ¨μ΄, λΆμ, κ°λ°μ ν¬νΈμ ν¬ν¨ν λ€μν κΈ°λ₯μ μ 곡νλ μμ© API κ΄λ¦¬ νλ«νΌμ λλ€.
- AWS API Gateway: Amazon Web Servicesμμ μ 곡νλ μμ κ΄λ¦¬ν API κ²μ΄νΈμ¨μ΄ μλΉμ€μ λλ€.
- Azure API Management: Microsoft Azureμμ μ 곡νλ μμ κ΄λ¦¬ν API κ²μ΄νΈμ¨μ΄ μλΉμ€μ λλ€.
- Google Cloud API Gateway: Google Cloud Platformμμ μ 곡νλ μμ κ΄λ¦¬ν API κ²μ΄νΈμ¨μ΄ μλΉμ€μ λλ€.
μμ² λΌμ°ν μ μν λͺ¨λ² μ¬λ‘
μμ² λΌμ°ν μ λν λͺ¨λ² μ¬λ‘λ₯Ό λ°λ₯΄λ©΄ λ§μ΄ν¬λ‘μλΉμ€ μν€ν μ²μ μ±λ₯, νμ₯μ± λ° μ μ§ κ΄λ¦¬μ±μ ν¬κ² ν₯μμν¬ μ μμ΅λλ€.
1. λΌμ°ν κ·μΉμ λ¨μνκ² μ μ§
μ΄ν΄νκ³ μ μ§ κ΄λ¦¬νκΈ° μ΄λ €μ΄ μ§λμΉκ² 볡μ‘ν λΌμ°ν κ·μΉμ νΌνμΈμ. λ κ°λ¨ν κ·μΉμ λ¬Έμ ν΄κ²°μ΄ λ μ½κ³ μ€λ₯ λ°μ κ°λ₯μ±μ΄ μ μ΅λλ€.
2. μλΉμ€ λμ€μ»€λ²λ¦¬ μ¬μ©
μλΉμ€ λμ€μ»€λ²λ¦¬λ₯Ό νμ©νμ¬ λ°±μλ μλΉμ€λ₯Ό λμ μΌλ‘ μ°ΎμΌμΈμ. μ΄λ μλΉμ€κ° νμ₯λκ±°λ μ¬λ°°ν¬λ λμλ API κ²μ΄νΈμ¨μ΄κ° νμ μ¬μ© κ°λ₯ν μΈμ€ν΄μ€λ‘ μμ²μ λΌμ°ν ν μ μλλ‘ λ³΄μ₯ν©λλ€.
3. λ‘λ λ°Έλ°μ± ꡬν
κ³ΌλΆνλ₯Ό λ°©μ§νκ³ κ³ κ°μ©μ±μ 보μ₯νκΈ° μν΄ λ€μ΄μ€λ μμ²μ λ°±μλ μλΉμ€μ μ¬λ¬ μΈμ€ν΄μ€μ λΆμ°νμΈμ. μ ν리μΌμ΄μ μ μꡬμ μ ν©ν λ‘λ λ°Έλ°μ± μκ³ λ¦¬μ¦(μ: λΌμ΄λ λ‘λΉ, μ΅μ μ°κ²°)μ μ¬μ©νμΈμ.
4. API κ²μ΄νΈμ¨μ΄ 보μ
λ¬΄λ¨ μ‘μΈμ€λ‘λΆν° λ°±μλ μλΉμ€λ₯Ό 보νΈνκΈ° μν΄ μΈμ¦ λ° κΆν λΆμ¬ λ©μ»€λμ¦μ ꡬννμΈμ. OAuth 2.0 λ° JWTμ κ°μ μ κ³ νμ€ λ³΄μ νλ‘ν μ½μ μ¬μ©νμΈμ.
5. λΌμ°ν μ±λ₯ λͺ¨λν°λ§ λ° λΆμ
λ³λͺ© νμμ μλ³νκ³ λΌμ°ν κ·μΉμ μ΅μ ννκΈ° μν΄ API κ²μ΄νΈμ¨μ΄μ λ°±μλ μλΉμ€μ μ±λ₯μ λͺ¨λν°λ§νμΈμ. λΆμ λꡬλ₯Ό μ¬μ©νμ¬ μμ² μ§μ° μκ°, μ€λ₯μ¨ λ° νΈλν½ ν¨ν΄μ μΆμ νμΈμ.
6. μ€μ μ§μ€μ κ΅¬μ± κ΄λ¦¬
μ€μ μ§μ€μ κ΅¬μ± κ΄λ¦¬ μμ€ν μ μ¬μ©νμ¬ API κ²μ΄νΈμ¨μ΄μ λΌμ°ν κ·μΉ λ° κΈ°ν ꡬμ±μ κ΄λ¦¬νμΈμ. μ΄λ μ¬λ¬ API κ²μ΄νΈμ¨μ΄ μΈμ€ν΄μ€μ κ±Έμ³ λ³κ²½ μ¬νμ κ΄λ¦¬ λ° λ°°ν¬λ₯Ό λ¨μνν©λλ€.
7. λ²μ κ΄λ¦¬ μ λ΅
APIμ λν λͺ νν λ²μ κ΄λ¦¬ μ λ΅μ ꡬννμΈμ. μ΄λ₯Ό ν΅ν΄ κΈ°μ‘΄ ν΄λΌμ΄μΈνΈλ₯Ό μμμν€μ§ μκ³ APIμ λ³κ²½ μ¬νμ λμ ν μ μμ΅λλ€. ν€λ κΈ°λ° λλ κ²½λ‘ κΈ°λ° λΌμ°ν μ μ¬μ©νμ¬ μμ²μ λ€λ₯Έ λ²μ μ APIλ‘ λΌμ°ν νμΈμ.
8. μ μμ μΈ μ±λ₯ μ ν(Graceful Degradation)
λ°±μλ μλΉμ€μ μ₯μ λ₯Ό μ²λ¦¬νκΈ° μν΄ μ μμ μΈ μ±λ₯ μ ν λ©μ»€λμ¦μ ꡬννμΈμ. λ°±μλ μλΉμ€λ₯Ό μ¬μ©ν μ μλ κ²½μ°, API κ²μ΄νΈμ¨μ΄λ μΆ©λνλ λμ ν΄λΌμ΄μΈνΈμκ² μλ―Έ μλ μ€λ₯ λ©μμ§λ₯Ό λ°νν΄μΌ ν©λλ€.
9. μλ μ ν λ° μ€λ‘νλ§
κ³Όλν νΈλν½μΌλ‘ μΈν΄ λ°±μλ μλΉμ€κ° μλλλ κ²μ λ°©μ§νκΈ° μν΄ μλ μ ν λ° μ€λ‘νλ§μ ꡬννμΈμ. μ΄λ μλΉμ€ κ±°λΆ κ³΅κ²©μ λ°©μ§νκ³ API κ²μ΄νΈμ¨μ΄κ° μλ΅μ±μ μ μ§νλ λ° λμμ΄ λ μ μμ΅λλ€.
κ²°λ‘
API κ²μ΄νΈμ¨μ΄ μμ² λΌμ°ν μ λ§μ€ν°νλ κ²μ ν¨μ¨μ μ΄κ³ νμ₯ κ°λ₯νλ©° μ μ§ κ΄λ¦¬ κ°λ₯ν λ§μ΄ν¬λ‘μλΉμ€ μν€ν μ²λ₯Ό ꡬμΆνλ λ° λ§€μ° μ€μν©λλ€. λ€μν λΌμ°ν μ λ΅, ν¨ν΄, κ΅¬μ± μ΅μ λ° λͺ¨λ² μ¬λ‘λ₯Ό μ΄ν΄ν¨μΌλ‘μ¨ λ°±μλ μλΉμ€λ‘μ νΈλν½μ ν¨κ³Όμ μΌλ‘ κ΄λ¦¬νκ³ ν΄λΌμ΄μΈνΈμκ² μνν κ²½νμ μ 곡ν μ μμ΅λλ€. λ§μ΄ν¬λ‘μλΉμ€κ° κ³μ λ°μ ν¨μ λ°λΌ μμ² λΌμ°ν λ° κ΄λ¦¬μμ API κ²μ΄νΈμ¨μ΄μ μν μ λμ± μ€μν΄μ§ κ²μ λλ€. νΉμ μꡬ μ¬νκ³Ό μΈνλΌμ μ ν©ν API κ²μ΄νΈμ¨μ΄λ₯Ό μ ννλ κ²λ μ±κ³΅μ λ§€μ° μ€μν©λλ€. λͺ¨λ λΌμ°ν κ²°μ μ μ΅μ μ μ 보μμ λλ κ²μ μμ§ λ§μΈμ.