[파이썬] Django REST 프레임워크를 이용한 API 버전 관리
API 버전 관리는 소프트웨어의 진화와 변경에 따라 API를 업그레이드하고 사용자와의 호환성을 유지하는 데 중요한 역할을 합니다. Django REST 프레임워크(DRF)는 이러한 API 버전 관리를 쉽게 처리할 수 있는 강력한 도구를 제공합니다. 이번 블로그 포스트에서는 DRF의 API 버전 관리 기능을 소개하고, 간단한 예제를 통해 실제 구현 방법을 알아보겠습니다.
DRF의 API 버전 관리 기능
DRF는 API 버전 관리를 위한 다양한 기능을 제공합니다. 주요 기능은 다음과 같습니다:
- URL 접두사(prefix): 버전별로 다른 URL 접두사를 사용하여 API 엔드포인트를 구성할 수 있습니다. 이를 통해 각 버전의 API가 서로 독립적으로 동작하고 호환성을 유지할 수 있습니다.
- 시리얼라이저 버전 관리: 버전별로 다른 시리얼라이저(직렬화) 클래스를 제공하여 API 응답 포맷을 관리할 수 있습니다. 이를 통해 버전 간에 필드 추가, 삭제 또는 형식 변경과 같은 변화를 수용할 수 있습니다.
- 서비스 로직 분리: 버전별로 다른 서비스 로직을 구성함으로써 버전 간에 비즈니스 로직을 변경할 수 있습니다. 이를 통해 새로운 기능을 추가하거나 기존 기능을 수정하는 등의 작업이 가능합니다.
- URL 패턴 그룹화: 버전별로 다른 URL 패턴을 그룹화하여 관리할 수 있습니다. 이를 통해 버전 간에 URL 구조 변경 시에도 호환성을 유지할 수 있습니다.
API 버전 관리 예제
간단한 예제를 통해 DRF의 API 버전 관리를 적용하는 방법을 알아보겠습니다. 예제는 books
와 관련된 API를 버전별로 관리하는 상황입니다.
1. URL 접두사(prefix) 설정
# urls.py
from django.urls import include, path
from rest_framework.routers import DefaultRouter
from .views import BookViewSet
router_v1 = DefaultRouter()
router_v1.register(r'books', BookViewSet)
router_v2 = DefaultRouter()
router_v2.register(r'books', BookViewSet)
urlpatterns = [
path('v1/', include(router_v1.urls)),
path('v2/', include(router_v2.urls)),
]
위의 예제에서는 /v1/books/
와 /v2/books/
로 각각 버전별로 다른 접두사를 설정하였습니다.
2. 시리얼라이저 버전 관리
# serializers.py
from rest_framework import serializers
from .models import Book
class BookSerializerV1(serializers.ModelSerializer):
class Meta:
model = Book
fields = ['title', 'author']
class BookSerializerV2(serializers.ModelSerializer):
class Meta:
model = Book
fields = ['title', 'author', 'publication_date']
위의 예제에서는 BookSerializerV1
과 BookSerializerV2
라는 버전별로 다른 시리얼라이저 클래스를 정의하였습니다.
3. 서비스 로직 분리
# views.py
from rest_framework import viewsets
from .models import Book
class BookViewSetV1(viewsets.ModelViewSet):
queryset = Book.objects.all()
serializer_class = BookSerializerV1
class BookViewSetV2(viewsets.ModelViewSet):
queryset = Book.objects.all()
serializer_class = BookSerializerV2
위의 예제에서는 BookViewSetV1
과 BookViewSetV2
라는 버전별로 다른 서비스 로직을 구성하였습니다.
4. URL 패턴 그룹화
# urls.py
from django.urls import include, path
from rest_framework.routers import DefaultRouter
from .views import BookViewSetV1, BookViewSetV2
router = DefaultRouter()
router.register(r'books/v1', BookViewSetV1)
router.register(r'books/v2', BookViewSetV2)
urlpatterns = [
path('', include(router.urls)),
]
위의 예제에서는 /books/v1/
과 /books/v2/
로 각각 버전별로 다른 URL 패턴을 그룹화하였습니다.
이제 위의 예제를 참고하여 DRF를 이용한 API 버전 관리를 구현해 볼 수 있습니다. API 버전 관리는 API의 재사용성과 호환성을 보장하기 위해 중요한 요소이므로, 실무에서 사용할 때 이점을 꼭 고려해보시기 바랍니다.