카테고리 없음

🌐 DRF(Django REST Framework) - 다양한 View 구현 방식, 왜 다를까?

Chansman 2025. 5. 15. 14:35

🌐 Django REST Framework - 다양한 View 구현 방식, 왜 다를까?

Django REST Framework(DRF)에서는 API를 만들 때 여러 가지 방식이 존재합니다.
처음엔 헷갈릴 수 있지만, 이건 개발자의 자유도와 재사용성, 유지보수 편의성을 고려한 설계 덕분입니다.


🔍 왜 다양한 방식이 존재할까?

이유 설명

✅ 상황별로 필요한 수준이 다름 단순 CRUD면 자동화된 ViewSet, 복잡한 로직엔 GenericView 등 선택 가능
✅ 코드 양/제어력 간의 균형 코드가 짧아질수록 자동화는 높아지지만, 커스터마이징은 어려움
✅ 유연성 제공 초보자는 Concrete View로 시작, 고급 사용자는 Mixin + Generic 사용 가능

📚 4가지 주요 구현 방식 비교

1️⃣ GenericAPIView 방식

  • queryset, serializer_class만 지정하면 DRF가 get_queryset()과 get_serializer()를 자동 제공
  • get(), post() 등은 직접 구현
class MyAPI(GenericAPIView):
    queryset = MyModel.objects.all()
    serializer_class = MySerializer

    def get(self, request):
        data = self.get_queryset()
        serializer = self.get_serializer(data, many=True)
        return Response(serializer.data)

✔️ 장점: 유연하게 원하는 로직 작성 가능
✔️ 단점: 직접 구현해야 하므로 코드가 늘어남


2️⃣ GenericAPIView + Mixin 방식

  • ListModelMixin, CreateModelMixin 등 Mixin 클래스와 조합해 구현
  • get()과 post()는 Mixin의 메서드 호출로 간결하게 처리
class MyAPI(ListModelMixin, CreateModelMixin, GenericAPIView):
    queryset = MyModel.objects.all()
    serializer_class = MySerializer

    def get(self, request):
        return self.list(request)

✔️ 장점: 공통 동작을 Mixin으로 간결하게 처리
✔️ 단점: 조합을 잘 이해해야 함


3️⃣ Concrete View 방식

  • DRF가 제공하는 완성형 클래스 (예: ListAPIView, CreateAPIView)
  • 가장 적은 코드로 자주 쓰는 기능 구현 가능
class MyAPI(ListCreateAPIView):
    queryset = MyModel.objects.all()
    serializer_class = MySerializer

✔️ 장점: 가장 간단한 CRUD 구현 방식
✔️ 단점: 세세한 로직 커스터마이징 어려움


4️⃣ ViewSet 방식

  • ModelViewSet 하나로 list, create, retrieve, update, destroy 자동 처리
  • Router를 통해 URL도 자동 생성
class MyViewSet(ModelViewSet):
    queryset = MyModel.objects.all()
    serializer_class = MySerializer
router = DefaultRouter()
router.register('items', MyViewSet)
urlpatterns = router.urls

✔️ 장점: 전체 API 기능을 자동화 + URL 구성까지 완성
✔️ 단점: 내부 동작을 이해하지 못하면 디버깅 어려움


✅ 선택 가이드

당신의 상황은? 추천 방식

CRUD API 빠르게 만들고 싶어요 ✅ ViewSet + Router
CRUD지만 URL을 수동으로 구성하고 싶어요 ✅ Concrete View
리스트 + 생성만 필요한데 로직도 조금 넣고 싶어요 ✅ Mixin 조합 방식
아주 복잡한 조건으로 필터링/로직 짜야 해요 ✅ GenericAPIView 직접 구현

🧠 결론 요약

  • DRF는 단순함 vs 자유도의 균형을 위해 여러 방식을 제공합니다.
  • 초보자는 ConcreteView, ModelViewSet부터 시작해서,
  • 점차 Generic + Mixin, GenericAPIView 등으로 커스터마이징을 넓혀가는 걸 추천합니다.

프레임워크는 당신의 상황에 맞게 선택하는 도구일 뿐,
가장 중요한 건 '읽기 쉽고 유지보수 가능한 코드'를 만드는 것입니다 💡