25분
API 문서 - "이 엔드포인트 뭐 하는 거예요?" 방지법
Day 1: 기술 문서화 - 코드를 넘어 이야기를 남겨라
API 문서 - "이 엔드포인트 뭐 하는 거예요?" 방지법
발표 & 포트폴리오 > Day 1: 기술 문서화 - 코드를 넘어 이야기를 남겨라
학습 목표
FastAPI 자동 문서화의 원리를 이해한다 Pydantic 모델로 API 문서 품질을 높이는 방법을 학습한다 OpenAPI/Swagger와 Postman Collection의 차이를 파악한다
"이 엔드포인트 뭐 하는 거예요?"
API를 만들었다. 5개 엔드포인트. 프론트엔드 개발자가 물어본다.
"/api/diagnose에 POST 보내면 되나요?" "body에 뭘 넣어야 하나요?" "응답 형식이 어떻게 되나요?"
매번 Slack으로 대답한다. 일주일 후, 같은 질문이 또 온다.
"아까 알려주셨는데 기억이 안 나서요..."
API 문서가 없으면, 개발자 = 살아있는 문서가 된다.
FastAPI가 해결해준다
FastAPI의 최대 장점: 코드 = 문서.
# 이 코드를 작성하면
@app.post("/api/diagnose", response_model=DiagnosisResponse)
async def diagnose_error(request: DiagnosisRequest):
"""
에러코드 기반 설비 진단
에러코드를 입력하면 원인 분석 및 조치 방법을 반환합니다.
Knowledge Graph와 RAG를 활용하여 정확한 진단을 제공합니다.
"""
...
# 이 문서가 자동으로 생성된다
POST /api/diagnose
├── Summary: 에러코드 기반 설비 진단
├── Description: 에러코드를 입력하면...
├── Request Body: DiagnosisRequest (자동)
├── Response: DiagnosisResponse (자동)
└── Example: 자동 생성
접속: http://localhost:8000/docs (Swagger UI)
접속: http://localhost:8000/redoc (ReDoc)
Pydantic 모델이 핵심이다
from pydantic import BaseModel, Field
from typing import Optional, List
from enum import Enum
class ErrorSeverity(str, Enum):
"""에러 심각도"""
LOW = "low"
MEDIUM = "medium"
HIGH = "high"
CRITICAL = "critical"
class DiagnosisRequest(BaseModel):
"""에러 진단 요청"""
error_code: str = Field(
description="설비 에러코드 (예: E-CNC-001)",
example="E-CNC-001"
)
equipment_id: Optional[str] = Field(
None,
description="설비 ID (지정 시 해당 설비 이력 참조)",
example="CNC-M01-LINE3"
)
include_history: bool = Field(
default=True,
description="과거 고장 이력 포함 여부"
)
class ActionStep(BaseModel):
"""조치 단계"""
step: int = Field(description="단계 번호")
action: str = Field(description="수행할 조치")
caution: Optional[str] = Field(
None,
description="주의사항"
)
class DiagnosisResponse(BaseModel):
"""에러 진단 응답"""
error_code: str = Field(description="입력된 에러코드")
diagnosis: str = Field(description="진단 결과")
severity: ErrorSeverity = Field(description="심각도")
root_cause: str = Field(description="근본 원인")
actions: List[ActionStep] = Field(description="조치 단계")
sources: List[str] = Field(
default=[],
description="참조 문서 목록"
)
confidence: float = Field(
description="진단 신뢰도 (0.0~1.0)",
ge=0.0, le=1.0
)
Field 하나가 문서 품질을 결정한다
| Field 속성 | 역할 | 효과 |
|---|---|---|
description | API 문서에 설명 표시 | 개발자가 바로 이해 |
example | 테스트용 예시 자동 생성 | Try it out에서 바로 실행 |
ge, le | 값 범위 제한 + 문서 표시 | 잘못된 요청 방지 |
default | 기본값 + 문서 표시 | Optional 필드 명확화 |
Swagger vs ReDoc vs Postman
| 도구 | 장점 | 단점 | 추천 |
|---|---|---|---|
| Swagger UI (/docs) | 바로 테스트 가능 | 복잡한 API에서 느림 | 개발 중 테스트 |
| ReDoc (/redoc) | 가독성 최고 | 테스트 불가 | 공유용 문서 |
| Postman | 팀 협업, 자동 테스트 | 별도 설정 필요 | 팀 개발 |
추천 조합: 개발 중 Swagger + 공유는 ReDoc + 팀 협업은 Postman
핵심 정리
- FastAPI의 코드 = 문서 철학을 최대한 활용
- Pydantic Field의
description,example이 문서 품질을 결정 - Enum으로 허용 값을 명시하면 문서가 더 명확
- /docs(테스트) + /redoc(공유) 조합이 최적
AI로 학습하기 — 꿀팁
🧪FastAPI 문서를 제조 현장 언어로AI 학습 팁
FastAPI의 자동 문서화(Swagger/OpenAPI)는 Pydantic 모델과 docstring 품질에 직결됩니다. AI로 현장 엔지니어가 이해할 수 있는 제조 도메인 용어로 엔드포인트 설명을 작성해 보세요.
다음 FastAPI 엔드포인트 코드를 보고 제조 현장 엔지니어(비개발자)가 이해할 수 있도록 Pydantic 모델 Field description과 함수 docstring을 작성해줘. 설명에는 '설비 ID', 'PLC 태그명', '불량률 임계치' 같은 제조 도메인 용어를 반드시 포함하고, Swagger UI에서 바로 테스트할 수 있는 예시 값도 넣어줘: [여기에 엔드포인트 코드 붙여넣기]
이 팁이 도움이 됐나요?