티스토리 뷰

REST API를 만들다 보면 처음에는 동작하는 API를 구현하는 데 집중하게 됩니다.

예를 들어 게시글 목록 API, 회원가입 API, 로그인 API, 결제 완료 웹훅 같은 기능을 하나씩 만듭니다.

그런데 API가 조금만 늘어나도 이런 문제가 생깁니다.

이 API는 어떤 URL로 호출해야 하지?
GET인지 POST인지 헷갈리네.
요청 body에는 어떤 값을 넣어야 하지?
응답 JSON 구조가 어떻게 생겼지?
인증 토큰은 필요한가?
실패하면 어떤 상태 코드와 에러 메시지가 올까?

혼자 개발할 때도 이런 정보가 정리되어 있지 않으면 불편합니다.
프론트엔드 개발자, 모바일 개발자, 외부 파트너, QA 담당자와 함께 일한다면 API 문서화는 더 중요해집니다.

이번 글에서는 API 문서화가 왜 필요한지, Swagger와 OpenAPI는 무엇인지, Django REST Framework 프로젝트에서는 어떤 방식으로 API 문서를 만들 수 있는지 정리해보겠습니다.



API 문서화란?

API 문서화는 API를 사용하는 사람이 필요한 정보를 이해할 수 있도록 정리하는 작업입니다.

단순히 URL 목록만 적어두는 것이 아닙니다.

좋은 API 문서에는 보통 다음 정보가 들어갑니다.

  • API 목적
  • 요청 URL
  • HTTP 메서드
  • 인증 필요 여부
  • 요청 헤더
  • 경로 파라미터
  • 쿼리 파라미터
  • 요청 body 구조
  • 응답 body 구조
  • 성공 상태 코드
  • 실패 상태 코드
  • 에러 응답 예시
  • 권한 조건
  • 제한 사항
  • 예제 요청과 응답

예를 들어 게시글 상세 조회 API 문서는 다음처럼 정리할 수 있습니다.

GET /api/posts/{id}/

설명:
특정 게시글의 상세 정보를 조회합니다.

인증:
필요 없음

Path Parameters:
- id: 게시글 ID

성공 응답:
200 OK

{
  "id": 1,
  "title": "REST API 이해하기",
  "content": "본문 내용",
  "author_name": "kim",
  "created_at": "2026-05-13T10:00:00Z"
}

오류 응답:
404 Not Found

이런 문서가 있으면 API를 사용하는 사람이 코드를 직접 뒤지지 않아도 사용법을 알 수 있습니다.



API 문서가 없으면 생기는 문제

API 문서가 없으면 개발 과정에서 작은 질문이 계속 반복됩니다.

예를 들어 프론트엔드 개발자가 게시글 생성 기능을 만들고 있다고 해보겠습니다.

문서가 없다면 다음을 직접 물어봐야 합니다.

게시글 생성 URL이 뭐예요?
POST인가요, PUT인가요?
title은 필수인가요?
content는 몇 글자 이상이어야 하나요?
응답으로 생성된 id가 오나요?
로그인이 안 되어 있으면 어떤 에러가 오나요?

이 질문이 한두 번이면 괜찮습니다.

하지만 API가 수십 개가 되고, 팀원이 늘어나면 커뮤니케이션 비용이 크게 늘어납니다.

문서가 없을 때 자주 생기는 문제는 다음과 같습니다.

  • 프론트엔드와 백엔드가 서로 다른 응답 구조를 기대합니다.
  • API 사용법을 매번 채팅으로 물어봐야 합니다.
  • 요청 필드가 바뀌었는데 사용하는 쪽이 모릅니다.
  • 상태 코드와 에러 형식이 제각각입니다.
  • 테스트 케이스를 만들기 어렵습니다.
  • QA가 정상 동작 기준을 확인하기 어렵습니다.
  • 외부 연동 파트너에게 API를 설명하기 어렵습니다.
  • 백엔드 개발자 본인도 시간이 지나면 헷갈립니다.

API 문서화는 단순히 친절한 설명이 아니라, 협업 비용을 줄이는 실무 도구입니다.



문서화는 언제 해야 할까?

API 문서화는 개발이 모두 끝난 뒤에 한 번에 작성하는 것보다, API 설계와 구현 과정에서 함께 관리하는 것이 좋습니다.

개발이 끝난 뒤 문서를 몰아서 쓰면 실제 구현과 문서가 어긋나기 쉽습니다.

처음 구현
→ API 변경
→ 응답 구조 변경
→ 문서 업데이트 누락
→ 문서와 실제 API가 달라짐

이런 상황이 반복되면 문서의 신뢰도가 떨어집니다.

문서가 맞지 않는다는 경험이 쌓이면 팀원들은 문서를 보지 않고 다시 개발자에게 물어보게 됩니다.

그래서 API 문서는 가능한 한 실제 코드와 가까운 곳에서 관리하는 것이 좋습니다.

대표적인 방식은 다음과 같습니다.

  • 코드 기반으로 OpenAPI 스키마를 자동 생성합니다.
  • Serializer와 ViewSet 정보를 활용해 문서를 만듭니다.
  • 필요한 설명만 데코레이터나 주석으로 보강합니다.
  • CI에서 스키마 파일 변경을 확인합니다.
  • API 변경 시 문서도 함께 리뷰합니다.

즉, API 문서는 “한 번 만들어두는 문서”가 아니라 “코드와 함께 관리되는 계약서”에 가깝습니다.



OpenAPI란?

OpenAPI는 HTTP API를 표준 형식으로 설명하기 위한 명세입니다.

API의 URL, 메서드, 요청 파라미터, 요청 body, 응답 구조, 인증 방식 등을 YAML 또는 JSON으로 표현할 수 있습니다.

예를 들어 다음과 같은 정보를 문서화할 수 있습니다.

GET /api/posts/
→ 게시글 목록 조회

POST /api/posts/
→ 게시글 생성

GET /api/posts/{id}/
→ 게시글 상세 조회

OpenAPI 문서는 사람이 읽을 수도 있지만, 더 중요한 것은 기계가 읽을 수 있다는 점입니다.

기계가 읽을 수 있으면 여러 도구와 연결할 수 있습니다.

  • Swagger UI로 문서 화면 생성
  • API client 코드 생성
  • mock server 생성
  • 테스트 케이스 생성
  • API gateway 설정
  • 문서 변경 비교
  • API contract 관리

즉, OpenAPI는 API 문서를 표준화된 데이터로 표현하는 형식입니다.



Swagger와 OpenAPI의 차이

API 문서화를 이야기할 때 Swagger와 OpenAPI라는 단어가 함께 나옵니다.

처음에는 둘이 같은 것처럼 느껴질 수 있습니다.

간단히 정리하면 다음과 같습니다.

OpenAPI
→ API를 설명하는 표준 명세

Swagger
→ OpenAPI 명세를 다루는 도구 생태계

과거에는 Swagger Specification이라는 이름으로 불리던 명세가 있었고, 이후 OpenAPI Specification이라는 이름으로 발전했습니다.

현재는 API 명세 자체는 OpenAPI라고 부르는 것이 더 정확합니다.

반면 Swagger는 Swagger UI, Swagger Editor, Swagger Codegen 같은 도구 이름으로 많이 사용됩니다.

예를 들어 다음처럼 구분할 수 있습니다.

OpenAPI 문서
→ API 구조를 YAML/JSON으로 정의한 명세 파일

Swagger UI
→ OpenAPI 문서를 보기 좋은 웹 문서 화면으로 보여주는 도구

실무에서는 “Swagger 문서 열어보세요”라고 많이 말하지만, 실제 내부에서는 OpenAPI 스키마를 Swagger UI로 보여주는 경우가 많습니다.



Swagger UI란?

Swagger UI는 OpenAPI 문서를 웹 화면에서 보기 좋게 보여주는 도구입니다.

Swagger UI를 사용하면 API 목록을 확인하고, 각 API의 요청 파라미터와 응답 구조를 볼 수 있습니다.

또한 설정에 따라 브라우저에서 직접 API 요청을 테스트할 수도 있습니다.

Swagger UI 화면에서는 보통 다음을 확인할 수 있습니다.

  • API 그룹
  • HTTP 메서드
  • URL 경로
  • 요청 파라미터
  • 요청 body schema
  • 응답 상태 코드
  • 응답 body schema
  • 인증 방식
  • 예제 요청
  • 예제 응답

예를 들어 POST /api/posts/ 문서를 열면, 어떤 JSON body를 보내야 하는지 확인하고 바로 테스트할 수 있습니다.

{
  "title": "API 문서화 이해하기",
  "content": "Swagger와 OpenAPI를 정리합니다.",
  "is_public": true
}

Swagger UI는 프론트엔드 개발자, QA 담당자, 백엔드 개발자 모두에게 유용합니다.



API 문서화 흐름

API 문서화 흐름은 다음처럼 볼 수 있습니다.

백엔드 API 구현
→ OpenAPI 스키마 생성
→ Swagger UI로 문서 확인
→ 프론트엔드와 QA가 문서를 기준으로 개발과 테스트 진행

Django REST Framework 프로젝트라면 Serializer, ViewSet, URL 정보를 기반으로 OpenAPI 스키마를 생성할 수 있습니다.

이 스키마는 Swagger UI나 Redoc 같은 도구로 시각화할 수 있습니다.

DRF ViewSet / Serializer
→ OpenAPI Schema
→ Swagger UI / Redoc
→ API 협업 문서

API 문서화 흐름도



OpenAPI 문서 예시

OpenAPI 문서는 YAML 또는 JSON으로 작성할 수 있습니다.

간단한 예시는 다음과 같습니다.

openapi: 3.0.3
info:
  title: Blog API
  version: 1.0.0
  description: 블로그 게시글 API 문서입니다.
paths:
  /api/posts/:
    get:
      summary: 게시글 목록 조회
      responses:
        "200":
          description: 게시글 목록 조회 성공
    post:
      summary: 게시글 생성
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/PostCreate"
      responses:
        "201":
          description: 게시글 생성 성공
components:
  schemas:
    PostCreate:
      type: object
      required:
        - title
        - content
      properties:
        title:
          type: string
          example: API 문서화 이해하기
        content:
          type: string
          example: Swagger와 OpenAPI를 정리합니다.
        is_public:
          type: boolean
          example: true

이 예시는 사람이 직접 쓰기에는 조금 길어 보입니다.

하지만 이 구조가 있으면 도구가 API 문서를 자동으로 만들 수 있습니다.

또 요청 body와 응답 body 구조를 명확하게 정의할 수 있습니다.



API 문서에 꼭 들어가야 하는 정보

API 문서에 모든 내용을 무작정 많이 넣는다고 좋은 것은 아닙니다.

하지만 실무에서 최소한 아래 정보는 들어가는 것이 좋습니다.

1. API 목적

이 API가 무엇을 하는지 한 줄로 설명해야 합니다.

게시글 목록을 조회합니다.
로그인한 사용자의 프로필을 수정합니다.
결제 완료 웹훅 이벤트를 수신합니다.

2. 요청 정보

요청 URL과 HTTP 메서드를 명확히 적어야 합니다.

GET /api/posts/
POST /api/posts/
PATCH /api/posts/{id}/
DELETE /api/posts/{id}/

3. 인증과 권한

인증이 필요한지, 어떤 권한이 필요한지 적어야 합니다.

인증 필요: 예
권한: 작성자 또는 관리자만 수정 가능

4. 요청 파라미터

path parameter, query parameter, request body를 구분해야 합니다.

Path Parameter:
- id: 게시글 ID

Query Parameter:
- page: 페이지 번호
- search: 검색어

Request Body:
- title: 제목
- content: 본문

5. 응답 구조

성공 응답과 실패 응답을 모두 보여주는 것이 좋습니다.

{
  "id": 1,
  "title": "API 문서화 이해하기",
  "created_at": "2026-05-13T10:00:00Z"
}

6. 상태 코드

어떤 상황에서 어떤 상태 코드가 오는지 적어야 합니다.

200 OK
→ 조회 성공

201 Created
→ 생성 성공

400 Bad Request
→ 요청 값 검증 실패

401 Unauthorized
→ 인증 필요

403 Forbidden
→ 권한 없음

404 Not Found
→ 리소스 없음

7. 에러 응답 예시

성공 응답만 있으면 실제 개발에는 부족합니다.

검증 실패, 인증 실패, 권한 실패, 리소스 없음 같은 에러 응답도 문서화해야 합니다.



문서 없는 API와 문서화된 API 비교

문서 없는 API는 처음에는 빠르게 개발하는 것처럼 보일 수 있습니다.

하지만 시간이 지나면 비용이 커집니다.

문서 없는 API
→ API 사용법을 매번 질문
→ 응답 구조를 코드에서 추측
→ 변경사항 전달 누락
→ 테스트와 협업 비용 증가

반면 문서화된 API는 협업 기준을 제공합니다.

문서화된 API
→ 요청과 응답 구조 확인 가능
→ 프론트엔드 개발 병렬 진행 가능
→ QA 테스트 기준 명확
→ 변경사항 추적 가능
→ 외부 연동 설명 쉬움

문서 없는 API vs 문서화된 API 비교



Django REST Framework에서 API 문서 만들기

Django REST Framework 프로젝트에서는 API 문서화를 코드와 연결해 자동화할 수 있습니다.

DRF에는 schema 개념이 있고, ViewSet과 Serializer 정보를 기반으로 API 구조를 추론할 수 있습니다.

실무에서는 OpenAPI 3 스키마 생성을 위해 drf-spectacular 같은 패키지를 사용하는 경우가 많습니다.

예를 들어 drf-spectacular를 설치합니다.

pip install drf-spectacular

Django 설정에 추가합니다.

INSTALLED_APPS = [
    # ...
    "drf_spectacular",
]

DRF 설정에 schema class를 지정합니다.

REST_FRAMEWORK = {
    "DEFAULT_SCHEMA_CLASS": "drf_spectacular.openapi.AutoSchema",
}

기본 API 정보를 설정할 수 있습니다.

SPECTACULAR_SETTINGS = {
    "TITLE": "Blog API",
    "DESCRIPTION": "블로그 서비스 API 문서입니다.",
    "VERSION": "1.0.0",
}

URL도 추가합니다.

from django.urls import path
from drf_spectacular.views import (
    SpectacularAPIView,
    SpectacularSwaggerView,
    SpectacularRedocView,
)

urlpatterns = [
    path("api/schema/", SpectacularAPIView.as_view(), name="schema"),
    path(
        "api/docs/swagger/",
        SpectacularSwaggerView.as_view(url_name="schema"),
        name="swagger-ui",
    ),
    path(
        "api/docs/redoc/",
        SpectacularRedocView.as_view(url_name="schema"),
        name="redoc",
    ),
]

이제 다음 URL에서 문서를 확인할 수 있습니다.

/api/schema/
→ OpenAPI schema

/api/docs/swagger/
→ Swagger UI 문서

/api/docs/redoc/
→ Redoc 문서

프로젝트 설정에 따라 URL은 자유롭게 바꿀 수 있습니다.



Serializer가 문서 품질에 미치는 영향

DRF에서 API 문서 품질은 Serializer와 밀접하게 연결됩니다.

Serializer에 필드 타입과 read_only 설정이 명확하면 문서도 더 정확해집니다.

예를 들어 게시글 Serializer를 생각해보겠습니다.

from rest_framework import serializers

from .models import Post


class PostSerializer(serializers.ModelSerializer):
    author_name = serializers.CharField(source="author.username", read_only=True)

    class Meta:
        model = Post
        fields = [
            "id",
            "author",
            "author_name",
            "title",
            "content",
            "is_public",
            "created_at",
            "updated_at",
        ]
        read_only_fields = [
            "id",
            "author",
            "author_name",
            "created_at",
            "updated_at",
        ]

이 Serializer는 문서 생성 도구가 다음 정보를 파악하는 데 도움을 줍니다.

  • 어떤 필드가 있는지
  • 각 필드 타입이 무엇인지
  • 어떤 필드가 읽기 전용인지
  • 요청 body에 어떤 필드가 필요한지
  • 응답 body에 어떤 필드가 포함되는지

반대로 Serializer가 불명확하면 문서도 부정확해질 수 있습니다.

예를 들어 SerializerMethodField를 많이 사용하거나, 동적으로 응답 구조를 바꾸면 자동 문서화 도구가 정확히 추론하기 어려울 수 있습니다.

이런 경우 추가 설명을 보강해야 합니다.



ViewSet 설명 보강하기

자동 생성 문서는 편리하지만, 모든 설명이 자동으로 완벽하게 나오지는 않습니다.

그래서 ViewSet에 설명을 보강할 수 있습니다.

drf-spectacular에서는 extend_schema를 사용해 API 설명을 추가할 수 있습니다.

from drf_spectacular.utils import extend_schema
from rest_framework import viewsets

from .models import Post
from .serializers import PostSerializer


class PostViewSet(viewsets.ModelViewSet):
    queryset = Post.objects.all()
    serializer_class = PostSerializer

    @extend_schema(
        summary="게시글 목록 조회",
        description="공개된 게시글 목록을 페이지네이션하여 조회합니다.",
    )
    def list(self, request, *args, **kwargs):
        return super().list(request, *args, **kwargs)

이렇게 하면 Swagger UI에서 API 설명을 더 친절하게 볼 수 있습니다.

문서는 자동 생성하되, 중요한 API에는 사람이 읽기 쉬운 설명을 보강하는 것이 좋습니다.



요청과 응답 예시 추가하기

API 문서에서 예시는 매우 중요합니다.

스키마만 봐도 구조를 알 수 있지만, 실제 예시가 있으면 훨씬 이해하기 쉽습니다.

예를 들어 게시글 생성 API에 요청 예시를 추가할 수 있습니다.

from drf_spectacular.utils import OpenApiExample, extend_schema


@extend_schema(
    summary="게시글 생성",
    examples=[
        OpenApiExample(
            "게시글 생성 요청 예시",
            value={
                "title": "API 문서화 이해하기",
                "content": "Swagger와 OpenAPI를 정리합니다.",
                "is_public": True,
            },
            request_only=True,
        )
    ],
)
def create(self, request, *args, **kwargs):
    return super().create(request, *args, **kwargs)

예시는 다음 사람들에게 특히 유용합니다.

  • 프론트엔드 개발자
  • 모바일 개발자
  • QA 담당자
  • 외부 연동 담당자
  • 새로 합류한 백엔드 개발자

문서에 실제 요청과 응답 예시가 있으면 API 사용자가 훨씬 빠르게 이해할 수 있습니다.



인증 방식 문서화하기

API 문서에서 인증 방식은 반드시 명확히 해야 합니다.

예를 들어 JWT 인증을 사용한다면 다음처럼 표시할 수 있습니다.

Authorization: Bearer <access_token>

OpenAPI에서는 보안 스키마를 정의할 수 있습니다.

components:
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      bearerFormat: JWT

그리고 특정 API에 인증이 필요하다고 표시할 수 있습니다.

security:
  - bearerAuth: []

Swagger UI에서는 Authorize 버튼을 통해 토큰을 넣고 API를 테스트할 수도 있습니다.

인증 문서에는 다음 내용을 포함하면 좋습니다.

  • 인증 방식
  • 토큰을 넣는 위치
  • 토큰 형식
  • 만료 시 응답
  • 권한 부족 시 응답
  • refresh token 사용 여부
  • 로그인 API와 연결 방식

인증이 필요한 API와 필요 없는 API를 문서에서 구분해두면 프론트엔드 개발이 훨씬 쉬워집니다.



에러 응답도 문서화해야 한다

API 문서에서 자주 빠지는 부분이 에러 응답입니다.

성공 응답만 문서화하면 실제 프론트엔드 개발에는 부족합니다.

예를 들어 게시글 생성 API에서 제목이 비어 있으면 다음 응답이 올 수 있습니다.

{
  "title": ["제목은 필수입니다."]
}

로그인이 필요하다면 다음 응답이 올 수 있습니다.

{
  "detail": "Authentication credentials were not provided."
}

권한이 없으면 다음 응답이 올 수 있습니다.

{
  "detail": "You do not have permission to perform this action."
}

에러 응답을 문서화할 때는 다음을 고려해야 합니다.

  • 상태 코드
  • 에러 응답 구조
  • 필드별 검증 오류 형식
  • 공통 에러 코드
  • 사용자에게 보여줄 메시지
  • 클라이언트 분기 처리 기준

에러 문서가 명확하면 프론트엔드에서 예외 처리를 더 안정적으로 할 수 있습니다.



API 변경사항 관리

API는 한 번 만들고 끝나지 않습니다.

필드가 추가될 수 있고, 응답 구조가 바뀔 수 있으며, 새로운 에러 상황이 생길 수 있습니다.

문제는 API 변경이 사용하는 쪽에 영향을 준다는 점입니다.

예를 들어 다음 변경은 비교적 안전할 수 있습니다.

응답에 새 필드 추가
→ 기존 클라이언트가 무시하면 큰 문제 없음

반면 다음 변경은 위험할 수 있습니다.

기존 필드 이름 변경
응답 구조 변경
필수 요청 필드 추가
상태 코드 변경
인증 방식 변경

이런 변경은 프론트엔드나 외부 연동을 깨뜨릴 수 있습니다.

API 문서화는 변경사항을 관리하는 데도 도움이 됩니다.

예를 들어 OpenAPI schema 파일을 저장소에 커밋해두면 Pull Request에서 API 변경 diff를 확인할 수 있습니다.

schema.yaml 변경
→ API path 추가
→ 응답 필드 변경
→ request body required 필드 변경

API 변경이 실제로 어떤 영향을 주는지 리뷰하기 쉬워집니다.



API 버전 관리

서비스가 커지면 API 버전 관리도 필요할 수 있습니다.

예를 들어 기존 모바일 앱이 /api/v1/을 사용하고 있는데, 새 앱에서는 응답 구조가 바뀐 /api/v2/를 사용해야 할 수 있습니다.

/api/v1/posts/
/api/v2/posts/

API 버전을 나누는 이유는 기존 클라이언트를 깨뜨리지 않기 위해서입니다.

버전 관리 방식은 여러 가지가 있습니다.

  • URL path에 버전 포함
  • 헤더에 버전 포함
  • query parameter로 버전 지정
  • 미디어 타입으로 버전 지정

처음에는 URL path 방식이 이해하기 쉽습니다.

GET /api/v1/posts/
GET /api/v2/posts/

API 문서도 버전별로 나누어 관리하는 것이 좋습니다.

Blog API v1 문서
Blog API v2 문서

다만 작은 프로젝트에서 처음부터 복잡한 버전 전략을 도입할 필요는 없습니다.

외부 클라이언트나 모바일 앱처럼 배포된 클라이언트를 오래 지원해야 할 때 더 중요해집니다.



프론트엔드와 API 문서 협업

API 문서는 프론트엔드와 백엔드 협업의 기준이 됩니다.

좋은 협업 흐름은 다음과 같습니다.

  1. 백엔드와 프론트엔드가 API 요구사항을 함께 정리합니다.
  2. 요청과 응답 구조를 먼저 합의합니다.
  3. OpenAPI 문서를 만들거나 업데이트합니다.
  4. 프론트엔드는 문서를 기준으로 화면 개발을 시작합니다.
  5. 백엔드는 문서에 맞춰 API를 구현합니다.
  6. 구현 후 Swagger UI에서 실제 동작을 확인합니다.
  7. 변경사항이 생기면 문서도 함께 수정합니다.

이렇게 하면 프론트엔드와 백엔드가 같은 기준으로 개발할 수 있습니다.

문서가 없으면 서로 머릿속에 다른 API를 상상한 채 개발할 수 있습니다.

프론트엔드 예상:
{
  "postId": 1,
  "title": "제목"
}

백엔드 실제 응답:
{
  "id": 1,
  "title": "제목"
}

작은 차이처럼 보이지만 실제 개발에서는 이런 차이가 계속 시간을 잡아먹습니다.

API 문서는 이런 불일치를 줄이는 데 도움이 됩니다.



QA와 API 문서

API 문서는 QA에도 유용합니다.

QA 담당자는 문서를 보고 어떤 요청이 정상이고, 어떤 요청이 실패해야 하는지 확인할 수 있습니다.

예를 들어 게시글 수정 API라면 다음 테스트 케이스를 만들 수 있습니다.

정상 케이스:
- 작성자가 제목과 본문을 수정하면 200 OK

오류 케이스:
- 로그인하지 않으면 401 Unauthorized
- 작성자가 아니면 403 Forbidden
- 존재하지 않는 게시글이면 404 Not Found
- 제목이 비어 있으면 400 Bad Request

문서가 있으면 테스트 기준이 명확해집니다.

특히 상태 코드와 에러 응답 구조가 문서화되어 있으면 API 테스트 자동화에도 도움이 됩니다.



외부 공개 API라면 더 중요하다

내부에서만 사용하는 API도 문서가 필요하지만, 외부 파트너나 고객에게 공개하는 API라면 문서화는 더 중요합니다.

외부 API 문서에는 다음도 필요할 수 있습니다.

  • 시작 가이드
  • 인증 키 발급 방법
  • rate limit
  • 요청 제한
  • webhook 설정 방법
  • pagination 방식
  • 에러 코드 목록
  • SDK 사용법
  • 샘플 코드
  • 변경 이력
  • 지원 정책

외부 API 문서는 제품의 일부입니다.

문서가 부족하면 API 자체가 좋아도 사용자가 쉽게 도입하기 어렵습니다.



좋은 API 문서의 특징

좋은 API 문서는 다음 특징을 가집니다.

1. 실제 API와 일치합니다

문서와 실제 동작이 다르면 문서의 신뢰도가 떨어집니다.

자동 생성과 코드 기반 관리를 활용하면 불일치를 줄일 수 있습니다.

2. 예시가 충분합니다

스키마만 있는 문서보다 예시 요청과 응답이 있는 문서가 훨씬 이해하기 쉽습니다.

3. 에러 상황이 설명되어 있습니다

성공 응답뿐 아니라 실패 응답도 문서화해야 합니다.

4. 인증과 권한 조건이 명확합니다

어떤 API가 인증을 요구하고, 어떤 권한이 필요한지 분명해야 합니다.

5. 용어가 일관됩니다

같은 개념을 어떤 곳에서는 user_id, 다른 곳에서는 member_id라고 하면 혼란스럽습니다.

6. 변경사항을 추적할 수 있습니다

API가 변경될 때 문서도 함께 변경되어야 합니다.

7. 사용자 관점에서 작성되어 있습니다

API를 만든 사람이 아니라 사용하는 사람이 필요한 정보를 기준으로 작성해야 합니다.



API 문서화에서 자주 하는 실수

1. 구현이 끝난 뒤 문서를 몰아서 쓰는 경우

문서가 실제 API와 달라지기 쉽습니다.

가능하면 API 구현과 문서 업데이트를 함께 진행하는 것이 좋습니다.



2. 성공 응답만 적는 경우

실제 프론트엔드 개발에서는 실패 응답이 매우 중요합니다.

검증 실패, 인증 실패, 권한 실패, 리소스 없음 같은 상황을 문서화해야 합니다.



3. 예시가 없는 경우

스키마만 보면 이해가 느릴 수 있습니다.

실제 요청과 응답 예시를 넣으면 문서 사용성이 좋아집니다.



4. 문서와 실제 API가 달라지는 경우

가장 큰 문제입니다.

문서가 틀리다는 경험이 생기면 팀원들은 문서를 신뢰하지 않습니다.



5. 내부 용어를 설명 없이 사용하는 경우

백엔드 개발자에게는 익숙한 용어라도 프론트엔드나 외부 파트너에게는 낯설 수 있습니다.

필요한 용어는 문서에서 설명하는 것이 좋습니다.



6. 권한 조건을 빼먹는 경우

API가 동작하지 않을 때 권한 문제인지, 요청 값 문제인지 알기 어렵습니다.

인증 필요 여부와 권한 조건을 명확히 적어야 합니다.



7. API 변경사항을 공유하지 않는 경우

응답 필드 하나가 바뀌어도 클라이언트가 깨질 수 있습니다.

변경사항은 문서, PR, 릴리즈 노트 등을 통해 공유해야 합니다.



API 문서화 도입 순서

처음 API 문서화를 도입한다면 다음 순서가 좋습니다.

  1. 현재 API 목록을 정리합니다.
  2. URL, 메서드, 인증 필요 여부를 먼저 정리합니다.
  3. 요청과 응답 예시를 추가합니다.
  4. 에러 응답 구조를 정리합니다.
  5. OpenAPI 스키마 생성을 도입합니다.
  6. Swagger UI 또는 Redoc으로 문서를 볼 수 있게 합니다.
  7. 중요한 API부터 설명과 예시를 보강합니다.
  8. PR에서 API 변경사항을 함께 리뷰합니다.
  9. 문서와 실제 API가 맞는지 주기적으로 확인합니다.
  10. 외부 공개 API라면 시작 가이드와 변경 이력도 관리합니다.

처음부터 완벽한 문서를 만들려고 하면 부담이 큽니다.

가장 자주 사용하는 API부터 문서화하고, 점진적으로 확장하는 것이 좋습니다.



정리

API 문서화는 백엔드 개발에서 매우 중요한 실무 작업입니다.

API를 만드는 것만큼, API를 사용하는 사람이 정확히 이해할 수 있게 만드는 것도 중요합니다.

핵심을 정리하면 다음과 같습니다.

  • API 문서화는 API의 사용 방법, 요청 구조, 응답 구조, 인증, 에러 상황을 정리하는 작업입니다.
  • 문서가 없으면 프론트엔드, 모바일, QA, 외부 파트너와의 커뮤니케이션 비용이 커집니다.
  • OpenAPI는 HTTP API를 표준 형식으로 설명하기 위한 명세입니다.
  • Swagger UI는 OpenAPI 스키마를 보기 좋은 웹 문서로 보여주는 도구입니다.
  • 좋은 API 문서에는 URL, 메서드, 요청 파라미터, 응답 구조, 상태 코드, 에러 예시, 인증 조건이 포함되어야 합니다.
  • Django REST Framework에서는 Serializer와 ViewSet 정보를 기반으로 OpenAPI 스키마를 생성할 수 있습니다.
  • 실무에서는 drf-spectacular 같은 도구로 OpenAPI 문서를 생성하는 경우가 많습니다.
  • 문서에는 성공 응답뿐 아니라 실패 응답과 예시도 포함해야 합니다.
  • API 문서는 프론트엔드와 백엔드의 협업 기준이 됩니다.
  • API 변경사항은 문서와 함께 관리해야 합니다.
  • 좋은 문서는 실제 API와 일치하고, 예시가 충분하며, 사용자 관점에서 작성되어야 합니다.

API 문서화는 부가 작업이 아니라 협업과 유지보수를 위한 핵심 작업입니다.

Swagger와 OpenAPI를 잘 활용하면 API를 더 명확하게 설계하고, 더 쉽게 공유하고, 더 안정적으로 변경할 수 있습니다.



참고 링크