π[Backend Development] API λͺ μΈμ.
β API λͺ μΈμ (API Specification, API Documentation)
API λͺ μΈμλ κ°λ°μ κ°μ API μ¬μ© μ€λͺ μμ΄μ μλ‘μ μ½μ(Contract)μ λλ€.
β 1. API λͺ μΈμλ 무μμΈκ°μ?
API λͺ μΈμλ ν΄λΉ APIμ κΈ°λ₯, μ¬μ© λ°©λ², μμ²/μλ΅ νμ, κ·μΉ λ± APIμ κ΄λ ¨λ λͺ¨λ μ 보λ₯Ό μμΈνκ² κΈ°λ‘ν 곡μ λ¬Έμμ λλ€.
β 2. API λͺ μΈμλ μΈμ μ¬μ©νλμ?
μννΈμ¨μ΄ κ°λ° μ κ³Όμ μ κ±Έμ³ μ¬μ©λ©λλ€.
- κΈ°ν/μ€κ³ λ¨κ³ : APIμ μ 체 ꡬ쑰λ₯Ό 미리 ꡬμνκ³ μ μν©λλ€.
- κ°λ° λ¨κ³ : νλ‘ νΈμλμ λ°±μλ κ°λ°μκ° μ΄ λͺ μΈμλ₯Ό κΈ°μ€μΌλ‘ κ°μμ μμ μ λμμ μ§νν©λλ€.
- ν μ€νΈ λ¨κ³ : APIκ° λͺ μΈμλλ‘ μ νν λμνλμ§ κ²μ¦νλ κΈ°μ€μΌλ‘ μΌμ΅λλ€.
- μ μ§λ³΄μ λ¨κ³ : APIλ₯Ό μμ νκ±°λ κΈ°λ₯μ μΆκ°ν λ μ°Έκ³ νλ 곡μ λ¬Έμλ‘ νμ©λ©λλ€.
β 3. API λͺ μΈμλ μ΄λ»κ² μ¬μ©νλμ?
κ°λ°μλ€μ λͺ μΈμλ₯Ό βμ°Έμ‘°βνμ¬ μ½λλ₯Ό μμ±ν©λλ€.
- λ°±μλ κ°λ°μ : λͺ μΈμμ μ μλ λλ‘ μμ²μ μ²λ¦¬νκ³ , μ½μλ νμμ μλ΅μ λ°ννλ μ½λλ₯Ό ꡬνν©λλ€.
- νλ‘ νΈμλ κ°λ°μ : λͺ μΈμλ₯Ό λ³΄κ³ μλ²μ μ΄λ€ URLλ‘, μ΄λ€ λ°μ΄ν°λ₯Ό 보λ΄μΌ νλμ§ νμΈνκ³ , μλ²λ‘λΆν° λ°μ μλ΅ λ°μ΄ν° ꡬ쑰μ λ§μΆ° νλ©΄μ ꡬνν©λλ€.
β 4. API λͺ μΈμλ μ΄λμ μ¬μ©νλμ?
κ°λ°ν λ΄λΆμ νμ λꡬμμ μ£Όλ‘ μ¬μ©νκ³ κ³΅μ ν©λλ€.
-
λ¬Έμν λꡬ :
Swagger/OpenAPI
,Postman
λ± API λ¬Έμλ₯Ό μ λ¬Έμ μΌλ‘ κ΄λ¦¬νλ ν΄ -
μν€/νμ
ν΄ :
Confluence
,Notion
,GitHub Wiki
λ± νμ΄ κ³΅μ νλ λ¬Έμ 곡κ°
β 5. API λͺ μΈμλ μ μ¬μ©νλμ?
API λͺ μΈμλ κ°λ° κ³Όμ μ λΆνμ€μ±μ μ κ±°νκ³ μμ°μ±μ κ·ΉλννκΈ° μν΄ μ¬μ©ν©λλ€.
- λͺ νν μν΅ : λͺ¨λ κ°λ°μκ° λμΌν λ¬Έμλ₯Ό λ³΄κ³ μμ νλ―λ‘, βμ΄ λ°μ΄ν°λ μ΄λ€ νμμΌλ‘ 보λ΄μΌ ν΄μ?βμ κ°μ λΆνμν μν΅ λΉμ©μ΄ μ¬λΌμ§λλ€.
- λ 립μ μΈ λ³λ ¬ κ°λ° : λ°±μλ APIκ° μμ±λμ§ μμλλΌλ, νλ‘ νΈμλ κ°λ°μλ λͺ μΈμλ§ λ³΄κ³ APIκ° μμ±λ κ²μ²λΌ κ°μ νκ³ κ°λ°μ μ§νν μ μμ΅λλ€.
- μμ‘΄μ± κ°μ : μ¬λμ κΈ°μ΅μ΄λ ꡬλ μ€λͺ μ΄ μλ, λ¬Έμμ κΈ°λ°νμ¬ κ°λ°νλ―λ‘ λ΄λΉμκ° λ°λμ΄λ μ 무 곡백μ μ΅μνν μ μμ΅λλ€.
β 6. API λͺ μΈμλ μ μ€μνκ°μ?
- νμ ν¨μ¨ μ¦κ° : νλ‘ νΈμλμ λ°±μλ κ°λ°μκ° μ½μλ λͺ μΈμλ₯Ό κΈ°μ€μΌλ‘ λμμ κ°λ°μ μ§νν μ μμ΄ μ 체 κ°λ° μκ°μ΄ λ¨μΆλ©λλ€.
- μμ¬μν΅ μ€λ₯ κ°μ : βλ°μ΄ν°λ₯Ό μ΄λ€ νμμΌλ‘ 보λ΄μΌ ν΄μ?βμ κ°μ λΆνμν μ§λ¬Έ μμ΄, λ¬Έμλ₯Ό ν΅ν΄ μν΅νμ¬ μ€ν΄λ₯Ό μ€μ λλ€.
- 체κ³μ μΈ API μ€κ³ : λͺ μΈμλ₯Ό μμ±νλ κ³Όμ μμ APIμ ꡬ쑰λ₯Ό 미리 κ³ λ―Όνκ² λμ΄, λ μΌκ΄μ± μκ³ μμ μ μΈ μ€κ³κ° κ°λ₯ν΄μ§λλ€.
β 7. 무μμ ν¬ν¨ν΄μΌ νλμ?
νλμ API μλν¬μΈνΈ(Endpoint)λ μ΅μν λ€μ μ 보λ₯Ό ν¬ν¨ν΄μΌ ν©λλ€.
- API μ΄λ¦ λ° μ€λͺ : μ΄ APIκ° μ΄λ€ κΈ°λ₯μ νλμ§ νκΈλ‘ λͺ ννκ² μ€λͺ ν©λλ€. (μ: νμ κ°μ , νΉμ κ²μκΈ μ‘°ν)
-
HTTP Method :
GET
,POST
,PUT
,DELETE
λ± μ΄λ€ μμ² λ°©μμ μ¬μ©νλμ§ λͺ μν©λλ€. -
URL (Endpoint) : APIλ₯Ό νΈμΆνκΈ° μν κ³ μ μ£Όμλ₯Ό κΈ°μ
ν©λλ€. (μ:
/api/v1/users/{userId}
) -
μμ² (Request) : ν΄λΌμ΄μΈνΈκ° μλ²μ 보λ΄μΌ ν λ°μ΄ν° μ 보λ₯Ό μμΈν κΈ°μ ν©λλ€.
- Header : μΈμ¦ ν ν° λ± μμ² ν€λμ λ΄κΈΈ μ 보
-
Path Variable : URL κ²½λ‘μ ν¬ν¨λλ λ³μ μ 보 (μ:
{userId}
) -
Query Parameter : URL λ€μ
?
λ‘ λΆλ νλΌλ―Έν° μ 보 (μ:/posts?page=1&size=10
) -
Body :
POST
λPUT
μμ² μ μ μ‘ν JSON λ°μ΄ν°μ ꡬ쑰 (νλλͺ , λ°μ΄ν° νμ , νμ μ¬λΆ, μ€λͺ λ±)
-
μλ΅ (Response) : μλ²κ° ν΄λΌμ΄μΈνΈμκ² λ³΄λ΄μ£Όλ κ²°κ³Ό λ°μ΄ν° μ 보λ₯Ό μμΈν κΈ°μ ν©λλ€.
- μν μ½λ (Status Code) : μ±κ³΅(200, 201), μ€ν¨(400, 404, 500) λ± μν©λ³ μλ΅ μ½λλ₯Ό λͺ μν©λλ€.
- Body : μ±κ³΅ λλ μ€ν¨ μ μ λ¬ν JSON λ°μ΄ν°μ ꡬ쑰 (νλλͺ , λ°μ΄ν° νμ , μ€λͺ λ±)
β 8. μ΄λ»κ² μμ±νλμ?
-
κ°λ¨ν λ°©λ² (λ§ν¬λ€μ΄) :
Notion
,Confluence
,GitHub Wiki
λ±μ λ§ν¬λ€μ΄ νλ₯Ό μ΄μ©ν΄ μ§μ μμ±ν©λλ€. ν λ΄λΆμμ λΉ λ₯΄κ³ κ°λ¨νκ² κ³΅μ νκΈ° μ’μ΅λλ€. - μ λ¬Έμ μΈ λ°©λ² (OpenAPI Specification) : Swaggerμ κ°μ λꡬλ₯Ό μ¬μ©ν΄ μμ±ν©λλ€. μ ν΄μ§ μμ(YAML, JSON)μ λ°λΌ μμ±νλ©΄, μλμΌλ‘ 보기μ’κ³ μ²΄κ³μ μΈ API λ¬Έμλ₯Ό μμ±ν΄μ£Όκ³ ν μ€νΈ κΈ°λ₯κΉμ§ μ 곡νμ¬ κ°μ₯ νμ€μ μΌλ‘ μ¬μ©λλ λ°©μμ λλ€.
β 9. μμ± μμ (λ§ν¬ λ€μ΄)
κ°λ¨ν βνΉμ νμ μ 보 μ‘°νβ APIμ λν λͺ μΈμ μμμ λλ€.
νΉμ νμ μ 보 μ‘°ν
- Description : μ¬μ©μ IDλ₯Ό μ΄μ©ν΄ νΉμ νμμ μμΈ μ 보λ₯Ό μ‘°νν©λλ€.
-
HTTP Method :
GET
-
URL :
/api/v1/users/{userId}
Request
κ΅¬λΆ | νλλͺ | λ°μ΄ν° νμ | νμ | μ€λͺ |
---|---|---|---|---|
Path Variable | userId |
Long | O | μ‘°νν νμμ κ³ μ ID |
Response
-
μ±κ³΅ :
200 OK
{
"id": 1,
"email": "user@example.com",
"username": "κ°μ μ ",
"createdAt": "2025-08-04T07:26:00"
}
-
μ€ν¨ :
404 Not Found
{
"errorCode": "USER_NOT_FOUND",
"message": "ν΄λΉ μ¬μ©μλ₯Ό μ°Ύμ μ μμ΅λλ€."
}