기술블로그-Django편

🔍 Django REST Framework - GenericAPIView란?

Chansman 2025. 5. 15. 14:16

🔍 Django REST Framework - GenericAPIView란?

Django REST Framework(DRF)에서는 API를 만들 때 APIView보다 더 강력하고 편리한 기능을 제공하는 것이 바로 **GenericAPIView**입니다.

이 글에서는 GenericAPIView가 무엇인지, 왜 필요한지, 어떻게 사용하는지 예제와 함께 자세히 정리해드립니다.


✅ GenericAPIView란?

GenericAPIView는 DRF에서 공통 기능(쿼리셋 조회, 시리얼라이저 연결 등)을 미리 구현해 둔 뷰 클래스입니다.

  • APIView에서 반복적으로 작성하던 작업들을 간단하게 처리할 수 있게 도와줍니다.
  • 이후에 나오는 ListAPIView, CreateAPIView 등 다양한 제네릭 뷰들의 기반 클래스입니다.

🧠 왜 GenericAPIView를 쓸까?

문제 해결책

APIView는 모든 걸 직접 구현해야 해서 코드가 길어짐 GenericAPIView는 자주 쓰는 로직을 기본 제공함
시리얼라이저, 쿼리셋 처리를 매번 써야 함 get_queryset(), get_serializer() 자동 처리

⚙️ 주요 기능 정리

기능 설명

queryset 자동으로 데이터를 가져올 대상 설정
serializer_class 사용할 시리얼라이저 클래스 지정
get_queryset() 쿼리셋 커스터마이징 가능
get_serializer() 시리얼라이저 인스턴스 자동 생성
lookup_field 기본 pk 외의 필드로 조회 가능 (예: slug)

🏗️ 상속 구조 (중요!)

APIView
 └── GenericAPIView
       ├── ListAPIView
       ├── CreateAPIView
       ├── RetrieveAPIView
       ├── UpdateAPIView
       ├── DestroyAPIView
       └── 조합형 (ListCreateAPIView 등)

✔️ GenericAPIView는 DRF 제네릭 뷰의 핵심 뼈대입니다.


📦 사용 예시

from rest_framework.generics import GenericAPIView
from rest_framework.response import Response
from .models import User
from .serializers import UserSerializer

class UserListAPIView(GenericAPIView):
    queryset = User.objects.all()
    serializer_class = UserSerializer

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

✔️ 작동 방식

  • get_queryset() → 자동으로 queryset 속성 가져옴
  • get_serializer() → 자동으로 serializer_class 인스턴스 생성
  • Response(serializer.data) → JSON 응답 반환

🆚 APIView vs GenericAPIView

항목 APIView GenericAPIView

유연성 높지만 불편함 높고 편리함 ✅
코드 길이 직접 구현 많음 기본기능 내장됨으로 짧음 ✅
자동화 없음 있음 ✅

📌 결론 정리

항목 내용

정의 공통 기능이 구현된 DRF 기본 API 클래스
주 용도 ListAPIView, CreateAPIView 등의 기반 클래스
장점 queryset, serializer_class만 적으면 나머지는 자동 처리
추천 상황 중복되는 API 로직을 줄이고 싶을 때 👍

다음 단계로는 ListAPIView, CreateAPIView, RetrieveAPIView 등을 학습해보세요!
GenericAPIView의 진짜 파워는 거기서 시작됩니다 💪