맨 처음부터 OpenAPI 명세를 작성하는 것은 특히 API가 이미 작동 중일 때 많은 시간이 소요될 수 있습니다. 많은 팀이 문서화가 거의 없거나 전혀 없는 프로젝트를 물려받거나, 초기 개발 단계에서 빠르게 구축된 API를 다루게 됩니다. 이러한 경우, 문서를 작성하는 가장 실용적인 방법은 기존 API 요청에서 직접 OpenAPI 명세를 생성하는 것입니다.
이 가이드는 이 접근 방식이 왜 효과적인지, 어떤 도구들이 도움이 되는지, 그리고 실제 요청을 팀이 신뢰할 수 있는 깔끔하고 재사용 가능한 OpenAPI 명세로 바꾸는 방법을 설명합니다.
버튼
방법 1: "코드 우선" 접근 방식
이 방법은 백엔드 애플리케이션 코드에 직접 주석이나 라이브러리를 추가할 수 있는 경우에 작동합니다.
작동 방식
웹 프레임워크에 라이브러리를 설치하여 코드(경로, 컨트롤러, 모델)를 검사하고 즉석에서 OpenAPI 명세를 생성합니다.
인기 라이브러리:
- Node.js (Express):
swagger-jsdoc또는tsoa(TypeScript OpenAPI) - Python (FastAPI/Flask): FastAPI는 이를 내장하고 있습니다! Flask는
flasgger또는flask-restx를 사용할 수 있습니다. - Java (Spring Boot):
springdoc-openapi - .NET:
Swashbuckle
FastAPI (Python) 예시:
from fastapi import FastAPI
from pydantic import BaseModel
app = FastAPI()
class Item(BaseModel):
name: str
price: float
@app.post("/items/", response_model=Item)
async def create_item(item: Item):
"""
데이터베이스에 새 항목을 생성합니다.
- **name**: 항목의 이름
- **price**: 항목의 USD 가격
"""
return item
# 이 코드는 /docs 또는 /openapi.json에서 전체 OpenAPI 명세를 자동으로 생성합니다.
장점:
- 항상 정확함: 명세는 실행 중인 코드에서 직접 파생됩니다.
- 낮은 유지보수: 코드를 업데이트하면 명세가 자동으로 업데이트됩니다.
단점:
- 코드 접근 필요: 제어할 수 없는 서드파티 또는 레거시 API에는 이 방법을 사용할 수 없습니다.
- 코드를 복잡하게 만들 수 있음: 광범위한 OpenAPI 주석은 비즈니스 로직을 읽기 어렵게 만들 수 있습니다.
방법 2: "트래픽 분석" 접근 방식
이는 영리한 "외부-내부" 접근 방식입니다. 클라이언트와 API 간의 실제 HTTP 트래픽을 캡처한 다음, 이를 분석하여 명세를 추론합니다.
작동 방식
프록시 또는 네트워크 스니퍼 역할을 하는 도구를 사용합니다. 모든 API 트래픽이 이 도구를 통해 라우팅됩니다. 이 도구는 요청 및 응답(URL, 메서드, 헤더, 본문)을 분석하여 API 모델을 구축합니다.
인기 도구:
- Akita Software: API 트래픽을 자동으로 관찰하여 명세를 생성하고 모니터링합니다.
- HAR 파일 생성: 브라우저의 개발자 도구(네트워크 탭)를 사용하여 API와의 세션을 기록하고 HAR(HTTP Archive) 파일로 내보낼 수 있습니다. 일부 도구는 이를 OpenAPI로 변환할 수 있습니다.
프로세스:
- 앱 또는 클라이언트를 프록시 도구를 통해 트래픽을 라우팅하도록 구성합니다.
- 주요 API 워크플로우(로그인, 데이터 생성, 데이터 가져오기 등)를 실행합니다.
- 도구가 패턴을 관찰하고 예비 OpenAPI 명세를 생성합니다.
장점:
- 레거시/블랙박스 API에 적합: 코드 변경이나 서버의 협조 없이 작동합니다.
- 실제 사용 기반: 실제로 사용되는 엔드포인트와 데이터 형태를 캡처합니다.
단점:
- 불완전할 수 있음: 기록 중 호출한 엔드포인트에 대해서만 명세를 생성합니다.
- 미묘한 차이를 놓칠 수 있음: 모든 제약 조건, 선택적 필드 또는 오류 응답을 올바르게 추론하지 못할 수 있습니다.
- 설정 오버헤드: 네트워크 트래픽을 가로채야 하므로 일부 환경에서는 까다로울 수 있습니다.
방법 3: "요청 컬렉션" 접근 방식

이는 개발자와 팀에게 가장 실용적이고 효율적인 방법인 경우가 많습니다. 요청을 보내는 것뿐만 아니라 API 디자인도 이해하는 고급 API 클라이언트를 사용합니다. 요청 컬렉션을 구축하면 도구가 요청을 깔끔한 OpenAPI 명세로 구조화하고 내보내는 데 도움을 줍니다.
이것이 바로 Apidog의 강점이 빛을 발하는 곳입니다. 이 워크플로우를 위해 구축되었습니다.
버튼
Apidog에서의 작동 방식
1. 평소대로 요청 보내기: 워크플로우를 변경하지 마세요. Apidog를 사용하여 기존 API 엔드포인트를 테스트하고 디버그하세요. GET, POST, PUT, DELETE 요청을 보내면 Apidog가 모든 세부 정보를 캡처합니다.
2. Apidog가 모델을 구축하도록 하기: 작업하는 동안 Apidog는 백그라운드에서 API의 구조를 이해하기 시작합니다. 엔드포인트, 매개변수, 요청 본문 및 응답 스키마를 파악합니다.
3. 문서로 정리하기: Apidog는 요청을 실시간으로 API 문서로 변환할 수 있습니다. 임시 요청이 도구 내에서 구조화되고 탐색 가능한 API 문서 페이지가 됩니다. 설명을 추가하고, 엔드포인트를 폴더로 그룹화하며, 자동으로 추론된 세부 정보를 정리할 수 있습니다.
4. 명세 내보내기: 컬렉션이 정확하고 잘 설명되면 내보냅니다. 그러면 사용자는 단 한 번의 클릭으로 표준 YAML 또는 JSON 형식으로 OpenAPI 명세를 내보낼 수 있습니다. 이 명세는 Swagger UI와 함께 사용하거나, 다른 도구로 가져오거나, 저장소에 커밋할 준비가 됩니다.
장점:
- 자연스러운 워크플로우: 개발자들이 이미 작업하는 방식(API 테스트)에 적합합니다.
- 높은 제어력: 컬렉션을 구축하면서 명세를 선별하고 다듬을 수 있습니다.
- 포괄적: 모든 엔드포인트, 오류 응답 및 인증 방법이 문서화되도록 할 수 있습니다.
- 협업적: 팀이 동일한 요청 컬렉션에서 함께 작업할 수 있습니다.
단점:
- 수동 작업 필요: 모든 엔드포인트를 다루었는지 확인해야 합니다. 트래픽에서 완전히 자동화되지는 않습니다.
방법 4: 수동 작성 접근 방식
때로는 Swagger Editor 또는 Stoplight Studio와 같은 편집기에서 명세를 수동으로 구축해야 할 때도 있습니다. 이는 종종 위에서 설명한 방법들과 함께 진행됩니다.
- 요청 컬렉션을 참조로 사용: Postman 컬렉션, cURL 명령어 또는 Apidog 프로젝트를 보조 화면에 열어 둡니다.
- 명세를 단계별로 구축: 참조에 있는 각 엔드포인트를 OpenAPI YAML/JSON으로 수동으로 변환합니다. 이렇게 하면 각 매개변수와 응답에 대해 깊이 생각하게 됩니다.
- 예시로 유효성 검사: 편집기의 미리보기를 사용하여 명세가 실제 API 동작과 일치하는지 확인합니다.
장점:
- 깊은 이해: 명세의 모든 세부 사항을 알게 됩니다.
- 최고의 정확성: 자동화 도구가 놓칠 수 있는 미묘한 부분까지 문서화할 수 있습니다.
단점:
- 매우 시간 소모적: 가장 많은 노동력이 필요한 방법입니다.
- 오류 발생 가능성 높음: 오타를 내거나 엔드포인트를 잊기 쉽습니다.
요청에서 OpenAPI 명세를 생성하기 위한 모범 사례
어떤 방법을 사용하든 다음 원칙을 따르세요:
- 작게 시작: 하나의 핵심 엔드포인트(예:
GET /users)를 선택하세요. 이를 완전히 생성하거나 문서화한 다음 확장하세요. - 빠르고 자주 유효성 검사: OpenAPI 명세를 사용하여 즉시 모의 서버를 생성하세요. 실제 API처럼 작동하나요? 이렇게 하면 불일치를 빠르게 파악할 수 있습니다.
- 반복 및 개선: 처음 생성된 명세는 거칠 것입니다. 초안으로 간주하세요. 설명, 예시를 추가하고 스키마 정의를 강화하세요.
- 오류 응답 포함: 이것은 종종 놓치는 부분입니다. 명세에 4xx 및 5xx 오류 응답 형식이 문서화되어 있는지 확인하세요.
- 인증을 잊지 마세요:
securitySchemes섹션에 API가 어떻게 보호되는지(API 키, OAuth2 등) 문서화하세요.
결론: 당신의 청사진이 기다립니다
기존 요청에서 OpenAPI 명세를 생성하는 것은 가능할 뿐만 아니라, 성숙한 API 프로젝트에 질서를 부여하기 위한 실질적인 필요성입니다. 코드 우선 라이브러리, 트래픽 스니핑 도구 또는 Apidog와 같은 강력한 API 클라이언트를 선택하든, 명확성, 자동화 및 협업에 투자하는 것입니다.
선택하는 방법은 코드베이스 제어, 시간 제약 및 팀 워크플로우와 같은 상황에 따라 달라집니다. 그러나 목표는 동일합니다. 요청 로그, cURL 명령어 및 구두 지식에 담긴 암묵적인 지식을 API를 발전시킬 수 있는 명확하고 기계가 읽을 수 있는 계약으로 변환하는 것입니다.
API의 복잡성이 숨겨져 있도록 두지 마세요. 이미 가지고 있는 요청으로 시작하고, 올바른 도구를 사용하여 필수적인 OpenAPI 청사진을 만드세요. 미래의 당신과 API를 사용해야 할 모든 사람이 감사할 것입니다.
버튼
