카테고리 없음
🌐 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 등으로 커스터마이징을 넓혀가는 걸 추천합니다.
프레임워크는 당신의 상황에 맞게 선택하는 도구일 뿐,
가장 중요한 건 '읽기 쉽고 유지보수 가능한 코드'를 만드는 것입니다 💡