[python] Django REST framework에서의 비즈니스 로직 처리 방법

Django REST framework은 웹 애플리케이션의 비즈니스 로직을 처리하는데 매우 강력한 도구입니다. 이를 통해 API를 개발하고 데이터를 처리하는데 필요한 다양한 기능을 제공합니다. 이번 게시물에서는 Django REST framework에서의 비즈니스 로직 처리 방법을 알아보겠습니다.

ViewSet과 Serializer를 사용하여 비즈니스 로직 처리하기

Django REST framework에서 비즈니스 로직을 처리하는 일반적인 방법은 ViewSet과 Serializer를 사용하는 것입니다. ViewSet은 API 엔드포인트의 동작을 정의하고, Serializer는 데이터를 직렬화하거나 역직렬화하는 역할을 합니다.

먼저, 비즈니스 로직을 처리하기 위해 ViewSet을 작성해야 합니다. ViewSet은 API 엔드포인트의 동작을 정의하기 위해 다양한 메서드를 제공합니다. 이들 중에서 가장 일반적으로 사용되는 메서드는 list(), retrieve(), create(), update(), destroy()입니다. 이 메서드들은 각각 API 엔드포인트에서 지원할 수 있는 동작을 정의합니다.

from rest_framework import viewsets

class MyModelViewSet(viewsets.ModelViewSet):
    queryset = MyModel.objects.all()
    serializer_class = MyModelSerializer
    
    def perform_create(self, serializer):
        # 데이터 생성 시 추가 동작을 수행할 수 있습니다.
        serializer.save()
    
    def perform_update(self, serializer):
        # 데이터 업데이트 시 추가 동작을 수행할 수 있습니다.
        serializer.save()
    
    def perform_destroy(self, instance):
        # 데이터 삭제 시 추가 동작을 수행할 수 있습니다.
        instance.delete()

다음으로는 비즈니스 로직을 처리하기 위해 Serializer를 작성해야 합니다. Serializer는 데이터를 직렬화하거나 역직렬화하는 역할을 수행합니다. 필요한 필드를 정의하고, 데이터 유효성 검사를 수행하는 등의 작업을 할 수 있습니다.

from rest_framework import serializers

class MyModelSerializer(serializers.ModelSerializer):
    class Meta:
        model = MyModel
        fields = '__all__'

위의 코드에서 perform_create(), perform_update(), perform_destroy() 메서드는 데이터를 생성, 업데이트, 삭제하기 전에 추가 동작을 수행할 수 있는 훅(hook) 메서드입니다. 예를 들어, 데이터를 생성할 때 다른 모델과의 관계를 설정하거나 특정 값을 계산하여 저장할 수 있습니다.

비즈니스 로직이 필요한 기능 추가하기

Django REST framework에서는 ViewSet에 비즈니스 로직이 필요한 기능을 추가하는 것도 가능합니다. 예를 들어, 특정 동작을 위한 API 엔드포인트를 추가하거나, 사용자가 데이터를 필터링하거나 정렬하는 기능을 제공할 수 있습니다.

class MyModelViewSet(viewsets.ModelViewSet):
    # ...

    @action(detail=True, methods=['GET'])
    def custom_action(self, request, pk=None):
        # 특정 동작을 위한 API 엔드포인트입니다.
        instance = self.get_object()
        # 로직 처리 코드 작성
        return Response(data)

    def get_queryset(self):
        # 필터링이나 정렬 등을 수행할 수 있습니다.
        queryset = super().get_queryset()
        # 로직 처리 코드 작성
        return queryset

위의 예시에서는 custom_action()get_queryset() 메서드를 오버라이딩하여 특정 동작을 위한 API 엔드포인트와 필터링/정렬 기능을 추가하고 있습니다. @action 데코레이터를 사용하여 custom_action() 메서드를 특정 동작을 위한 API 엔드포인트로 등록할 수 있습니다.

마치며

Django REST framework을 사용하면 복잡한 비즈니스 로직을 간편하게 처리할 수 있습니다. ViewSet과 Serializer를 이용하여 API 엔드포인트의 동작을 정의하고, 필요한 기능을 추가하여 웹 애플리케이션을 개발할 수 있습니다. 이를 통해 빠르게 효율적인 API를 구축할 수 있습니다.

참고 자료