🔍 Django REST Framework - GenericAPIView란?

2025. 5. 15. 14:16·기술블로그-Django편

🔍 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의 진짜 파워는 거기서 시작됩니다 💪

'기술블로그-Django편' 카테고리의 다른 글

🧠 Django에서 name=name 의미 완전 정리하기  (0) 2025.05.15
🔍 Django의 object vs objects 완전 정리!  (0) 2025.05.15
🤖 Pseudo Code란? (가짜 코드)  (0) 2025.05.15
🔄 클래스/함수 이름 변경 시 꼭 써야 할 리팩토링 기능 (Refactor → Rename)  (0) 2025.05.15
✅ Django DRF에서 Serializer 유효성 검사, 내부 구조까지 완전 정복!  (0) 2025.05.15
'기술블로그-Django편' 카테고리의 다른 글
  • 🧠 Django에서 name=name 의미 완전 정리하기
  • 🔍 Django의 object vs objects 완전 정리!
  • 🤖 Pseudo Code란? (가짜 코드)
  • 🔄 클래스/함수 이름 변경 시 꼭 써야 할 리팩토링 기능 (Refactor → Rename)
Chansman
Chansman
안녕하세요! 코딩을 시작한 지 얼마 되지 않은 초보 개발자 찬스맨입니다. 이 블로그는 제 학습 기록을 남기고, 다양한 코딩 실습을 통해 성장하는 과정을 공유하려고 합니다. 초보자의 눈높이에 맞춘 실습과 팁, 그리고 개발하면서 겪은 어려움과 해결 과정을 솔직하게 풀어내려 합니다. 함께 성장하는 개발자 커뮤니티가 되기를 바랍니다.
  • Chansman
    찬스맨의 프로그래밍 스토리
    Chansman
  • 전체
    오늘
    어제
    • 분류 전체보기 (702)
      • Python (32)
      • 프로젝트 (43)
      • 과제 (25)
      • Database (40)
      • 멘토링 (11)
      • 특강 (37)
      • 기술블로그 (40)
      • 기술블로그-Fastapi편 (33)
      • 기술블로그-Django편 (153)
      • 기술블로그-Flask편 (36)
      • AI 분석 (4)
      • HTML & CSS (31)
      • JavaScript (17)
      • AWS_Cloud (21)
      • 웹스크래핑과 데이터 수집 (14)
      • Flask (42)
      • Django (77)
      • Fastapi (16)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
Chansman
🔍 Django REST Framework - GenericAPIView란?
상단으로

티스토리툴바