🧠 Django REST Framework Generic view: 추상화, mixin, 실전 예시까지!
이 글은 DRF(Django REST Framework)를 기반으로 API 개발을 할 때, 제네릭 뷰와 믹스인을 어떻게 활용하면 좋은지에 대한 통합 가이드입니다. 추상화 수준에 따른 뷰의 특징과 상황에 따른 선택 기준, PyCharm 팁까지 실무에 꼭 필요한 내용을 담았습니다.
1. 🖥️ API 메소드 구현의 차이점
1.1 전체 조회 API (GET)의 수도 코드 흐름:
- 전체 데이터를 조회한다 → 시리얼라이저에 데이터를 넣는다 → 반환한다.
- 사용되는 모델이 다르면, 당연히 시리얼라이저도 다르다.
- 반환되는 데이터 구조가 달라지므로, GET 메서드 구현은 모델과 시리얼라이저만 다르고 흐름은 동일함.
2. ⚙️ 데이터 생성 과정의 추상화
2.1 POST 요청 처리 흐름:
- 클라이언트가 데이터를 보낸다
- 서버는 해당 데이터를 읽고 시리얼라이저에 전달한다
- 시리얼라이저는 데이터 유효성 검사를 수행한다
- 조건을 만족하면 DB에 저장 후 응답 데이터를 반환한다
2.2 유효성 검사의 핵심:
- 타입, 길이 등 사전 정의된 조건에 맞는지 검사
- 개발자가 직접 하지 않고, 시리얼라이저가 자동으로 수행함
- 결과적으로 POST도 GET처럼 네 가지 공통 단계로 추상화 가능:
- 데이터 읽기 → 유효성 검사 → 저장 → 응답
3. 🛠️ 제네릭 API 뷰의 이해와 활용
3.1 공통 흐름의 재사용
- CRD 흐름은 같고, 달라지는 건 모델/시리얼라이저뿐
- 이를 기반으로 DRF는 GenericAPIView를 제공함
3.2 기본 구조 예시:
class ShortURLGenericAPIView(generics.ListAPIView):
queryset = ShortURL.objects.all()
serializer_class = ShortURLListSerializer
- 이렇게 작성하면 기존 10줄 이상 하던 코드를 단 2줄로 대체 가능
3.3 믹스인을 이용한 커스터마이징
class ShortURLCustomAPIView(generics.GenericAPIView, mixins.ListModelMixin):
queryset = ShortURL.objects.all()
serializer_class = ShortURLListSerializer
def get(self, request, *args, **kwargs):
return self.list(request, *args, **kwargs)
- 기능 조합이 필요한 경우 믹스인과 GenericAPIView를 함께 사용
3.4 Concrete View 활용
class ShortURLView(ListAPIView):
queryset = ShortURL.objects.all()
serializer_class = ShortURLListSerializer
- DRF에서 미리 만들어둔 구체화(Concrete)된 뷰 클래스
- 가장 코드가 짧고 직관적이지만 커스터마이징은 어려움
4. 🔍 추상화 수준별 뷰 비교
뷰 종류 추상화 수준 장점 단점
함수형 뷰 (FBV) | 가장 낮음 | 직관적, 커스터마이징 쉬움 | 반복 코드 많음 |
클래스형 뷰 (CBV) | 중간 | 객체지향적 설계 | 코드 길어짐 |
GenericAPIView + 믹스인 | 높음 | 코드 재사용성 높음 | 구조 이해 필요 |
ConcreteView (ListAPIView 등) | 매우 높음 | 한 줄 코드 완성 | 수정 어려움 |
✅ 추상화 수준이 높을수록 생산성은 오르지만, 커스터마이징이 어려워질 수 있음
5. 🛠️ 뷰 선택 기준 정리
- ✅ 간단한 CRUD 기능만 필요하다 → Concrete View 사용 (e.g. ListAPIView)
- ✅ 기능 일부만 바꾸고 싶다 → GenericAPIView + 믹스인 조합
- ✅ 전혀 다른 흐름이 필요하다 → CBV 혹은 FBV 직접 구현
6. 🧰 PyCharm에서 DRF 코딩을 편하게 하는 팁
6.1 자동 임포트
- Alt + Enter → 자동으로 import 문 추가
- PyCharm Pro에서는 REST 관련 모듈도 자동 인식 가능
6.2 파일/클래스 빠른 검색
- Cmd + Shift + F → 전체 검색
- Cmd + O → 클래스 찾기
- Cmd + Shift + O → 파일 이름으로 찾기
6.3 라이브러리 코드 탐색
- 가상환경 내 site-packages/rest_framework/ 경로 열기
- 클래스나 믹스인 기능 추적하여 동작 원리 파악 가능
7. 🧪 Git 꿀팁 모음
- gst = git status
- gcm -m "msg" = git commit -m "msg"
- gco -b new_branch = 브랜치 만들기 + 이동
💡 꿀팁: 명령어 축약은 .gitconfig에 alias로 등록 가능!
✅ 마무리 요약
- DRF의 다양한 뷰는 코드의 추상화 수준에 따라 분류됨
- 공통된 흐름을 최대한 재사용하려면 제네릭 뷰와 믹스인을 활용하자
- 복잡한 커스터마이징이 필요하면 FBV나 CBV 직접 구현이 유리
- PyCharm 기능과 Git 명령어를 잘 활용하면 생산성이 크게 향상됨
프로젝트 성격에 맞게 적절한 뷰를 선택하고, 추상화 수준을 조절해보세요!