Home > Backend Development > πŸ“š[Backend Development] API λͺ…μ„Έμ„œ

πŸ“š[Backend Development] API λͺ…μ„Έμ„œ
Backend Development API API Specification API Documentaion

πŸ“š[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)λŠ” μ΅œμ†Œν•œ λ‹€μŒ 정보λ₯Ό 포함해야 ν•©λ‹ˆλ‹€.

  1. API 이름 및 μ„€λͺ… : 이 APIκ°€ μ–΄λ–€ κΈ°λŠ₯을 ν•˜λŠ”μ§€ ν•œκΈ€λ‘œ λͺ…ν™•ν•˜κ²Œ μ„€λͺ…ν•©λ‹ˆλ‹€. (예: νšŒμ› κ°€μž…, νŠΉμ • κ²Œμ‹œκΈ€ 쑰회)
  2. HTTP Method : GET, POST, PUT, DELETE λ“± μ–΄λ–€ μš”μ²­ 방식을 μ‚¬μš©ν•˜λŠ”μ§€ λͺ…μ‹œν•©λ‹ˆλ‹€.
  3. URL (Endpoint) : APIλ₯Ό ν˜ΈμΆœν•˜κΈ° μœ„ν•œ 고유 μ£Όμ†Œλ₯Ό κΈ°μž…ν•©λ‹ˆλ‹€. (예: /api/v1/users/{userId})
  4. μš”μ²­ (Request) : ν΄λΌμ΄μ–ΈνŠΈκ°€ μ„œλ²„μ— 보내야 ν•  데이터 정보λ₯Ό μƒμ„Ένžˆ κΈ°μˆ ν•©λ‹ˆλ‹€.
    • Header : 인증 토큰 λ“± μš”μ²­ 헀더에 λ‹΄κΈΈ 정보
    • Path Variable : URL κ²½λ‘œμ— ν¬ν•¨λ˜λŠ” λ³€μˆ˜ 정보 (예: {userId})
    • Query Parameter : URL 뒀에 ?둜 λΆ™λŠ” νŒŒλΌλ―Έν„° 정보 (예: /posts?page=1&size=10)
    • Body : POST λ‚˜ PUT μš”μ²­ μ‹œ 전솑할 JSON λ°μ΄ν„°μ˜ ꡬ쑰 (ν•„λ“œλͺ…, 데이터 νƒ€μž…, ν•„μˆ˜ μ—¬λΆ€, μ„€λͺ… λ“±)
  5. 응닡 (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": "ν•΄λ‹Ή μ‚¬μš©μžλ₯Ό 찾을 수 μ—†μŠ΅λ‹ˆλ‹€."
}