Django는 파이썬 기반의 웹 프레임워크로서, 강력하고 유연한 백엔드 서버 개발을 가능하게 합니다. Django REST Framework (DRF)는 Django에 RESTful API를 쉽게 구현할 수 있도록 도와주는 도구입니다. 그러나 API의 문서화는 종종 간과되는 부분이며, 이는 API의 사용성을 저하시킬 수 있습니다. 이에 따라 Swagger와 CoreAPI와 같은 API 문서화 도구를 사용하는 방법을 살펴보겠습니다.
1. Django REST Framework 소개
Django REST Framework는 Django로 RESTful API를 쉽게 구축할 수 있게 해주는 고급 라이브러리입니다. 이 라이브러리는 다음을 제공합니다:
- 직관적인 API 설계
 - 강력한 인증 시스템
 - 유연한 시리얼라이징
 - 다양한 필터링 옵션
 - 문서화 지원
 
이러한 기능 덕분에 DRF를 사용하면 복잡한 API를 보다 쉽게 구축할 수 있습니다.
2. API 문서화의 중요성
API 문서화는 API의 사용법을 명확히 하고, 외부 개발자 또는 팀원들이 API를 효율적으로 사용할 수 있도록 하는 중요한 과정입니다. 잘 문서화된 API는:
- 사용자 교육을 용이하게 합니다.
 - 버그를 줄일 수 있습니다.
 - 개발 속도를 높입니다.
 - 기타 팀원 간의 소통을 원활하게 합니다.
 
3. Swagger와 CoreAPI 소개
Swagger는 API 문서화를 위한 가장 널리 사용되는 도구 중 하나입니다. Swagger UI는 API를 시각적으로 보여주고, 사용자들이 요청을 테스트할 수 있는 기능을 제공합니다. 반면, CoreAPI는 DRF와 자연스럽게 통합되어 API 문서화 및 테스트를 쉽게 해줍니다.
3.1 Swagger
Swagger는 API 문서와 테스트 도구를 제공합니다. Swagger를 사용하면 다음과 같은 장점을 누릴 수 있습니다:
- 사용자 친화적인 UI 제공
 - API 요청/응답 테스트
 - API 문서 자동 생성
 
3.2 CoreAPI
CoreAPI는 RESTful API의 문서화 및 테스트를 위한 더 경량화된 옵션입니다. DRF와의 통합이 용이하며, API 사양을 정의할 수 있는 간단한 문법을 제공합니다. 핵심 기능으로는 다음이 있습니다:
- 간단한 사용법
 - API 문서 자동화
 - 완성도 높은 스펙
 
4. Django 프로젝트에 Swagger 및 CoreAPI 설정하기
Swagger와 CoreAPI를 Django 프로젝트에 통합하는 과정은 아래와 같은 단계로 진행됩니다.
4.1 설정 준비
먼저 기본적인 Django 프로젝트와 Django REST Framework가 설치되어 있어야 합니다. 필요한 패키지를 설치합시다:
pip install djangorestframework
pip install drf-yasg  # Swagger 문서화를 위한 패키지
pip install coreapi  # CoreAPI 이용을 위한 패키지
4.2 Django settings 구성
Django 프로젝트의 settings.py에 다음과 같이 추가합니다:
INSTALLED_APPS = [
        ...
        'rest_framework',
        'drf_yasg',
    ]
4.3 Swagger 설정 예제
Swagger를 설정하기 위해 urls.py에 다음 코드를 추가합니다:
from rest_framework import permissions
from drf_yasg.views import get_schema_view
from drf_yasg import openapi
schema_view = get_schema_view(
   openapi.Info(
      title="My API",
      default_version='v1',
      description="API 설명서",
      terms_of_service="https://www.google.com/policies/terms/",
      contact=openapi.Contact(email="contact@myapi.local"),
      license=openapi.License(name="BSD License"),
   ),
   public=True,
   permission_classes=(permissions.AllowAny,),
)
urlpatterns = [
    ...
    path('swagger/', schema_view.with_ui('swagger', cache_timeout=0), name='schema-swagger-ui'),
] 
4.4 CoreAPI 설정 예제
CoreAPI를 사용하기 위한 설정은 좀 더 간단합니다. urls.py에 다음 코드를 추가합니다:
from rest_framework.documentation import include_docs_urls
urlpatterns = [
    ...
    path('docs/', include_docs_urls(title='My API title')),
]
5. API 문서화 예제
이제 간단한 API를 만들어 문서화를 테스트해 보겠습니다. 간단한 메모리 저장소 API를 만들어 보겠습니다.
5.1 모델 정의
먼저, API를 위한 모델을 정의합니다. models.py에 아래와 같이 작성합니다:
from django.db import models
class Note(models.Model):
    title = models.CharField(max_length=100)
    content = models.TextField()
    def __str__(self):
        return self.title
5.2 시리얼라이저 정의
모델과 연결될 시리얼라이저를 생성합니다. serializers.py를 생성하거나 사용하여 아래와 같이 작성합니다:
from rest_framework import serializers
from .models import Note
class NoteSerializer(serializers.ModelSerializer):
    class Meta:
        model = Note
        fields = '__all__'
5.3 뷰 정의
API의 로직을 정의할 뷰를 만들어야 합니다. views.py를 수정하여 아래와 같이 작성합니다:
from rest_framework import viewsets
from .models import Note
from .serializers import NoteSerializer
class NoteViewSet(viewsets.ModelViewSet):
    queryset = Note.objects.all()
    serializer_class = NoteSerializer
5.4 URL 패턴 정의
이제 API의 URL 패턴을 설정합니다. urls.py에 아래와 같이 작성합니다:
from django.urls import path, include
from rest_framework.routers import DefaultRouter
from .views import NoteViewSet
router = DefaultRouter()
router.register(r'notes', NoteViewSet)
urlpatterns = [
    path('', include(router.urls)),
]
6. API 테스트 및 문서화
모든 설정이 완료되었습니다. Django 서버를 실행하고 http://localhost:8000/swagger/ 또는 http://localhost:8000/docs/에 접속하여 API 문서화 상태를 확인해보세요. 각 엔드포인트에서 제공하는 API 문서와 함께 요청을 테스트할 수 있습니다.
7. 결론
Django REST Framework와 Swagger, CoreAPI를 사용하여 API 문서화를 효율적으로 진행할 수 있습니다. 이러한 도구들은 개발자의 생산성을 높이고, 다른 사용자에게도 유용한 정보를 제공합니다. 프로젝트의 복잡성이 증가함에 따라 API 문서화는 점점 더 중요해지며, 따라서 이러한 도구들을 적극적으로 활용하는 것이 좋습니다.
8. 추가 자료
더 읽어보기: