[Django 4일차] Django REST Framework Generic view: 추상화, mixin, 실전 예시까지!4/4 (short_url 프로젝트)(250515)

2025. 5. 15. 20:38·특강

🧠 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 명령어를 잘 활용하면 생산성이 크게 향상됨

프로젝트 성격에 맞게 적절한 뷰를 선택하고, 추상화 수준을 조절해보세요!

'특강' 카테고리의 다른 글

[FastAPI 1일차] FastAPI 튜토리얼: 개념부터 코드까지 한눈에 정리 1/2 (250526)  (0) 2025.05.26
🚀 FastAPI 입문 가이드: 설치부터 실행까지 한 번에!(1일차)  (0) 2025.05.26
[Django 4일차] Django REST Framework 핵심 요약: Serializer와 View의 실전 활용 3/4 (short_url 프로젝트)(250515)  (0) 2025.05.15
[Django 4일차] Django를 백엔드 프레임워크로 활용하기 - DRF 입문 가이드 1/4 (short_url 프로젝트)(250515)  (0) 2025.05.15
[Django 3일차] Django 함수형 뷰 vs 클래스형 뷰 + ORM 4/4 (short_url 프로젝트)(250514)  (0) 2025.05.14
'특강' 카테고리의 다른 글
  • [FastAPI 1일차] FastAPI 튜토리얼: 개념부터 코드까지 한눈에 정리 1/2 (250526)
  • 🚀 FastAPI 입문 가이드: 설치부터 실행까지 한 번에!(1일차)
  • [Django 4일차] Django REST Framework 핵심 요약: Serializer와 View의 실전 활용 3/4 (short_url 프로젝트)(250515)
  • [Django 4일차] Django를 백엔드 프레임워크로 활용하기 - DRF 입문 가이드 1/4 (short_url 프로젝트)(250515)
Chansman
Chansman
안녕하세요! 코딩을 시작한 지 얼마 되지 않은 초보 개발자 찬스맨입니다. 이 블로그는 제 학습 기록을 남기고, 다양한 코딩 실습을 통해 성장하는 과정을 공유하려고 합니다. 초보자의 눈높이에 맞춘 실습과 팁, 그리고 개발하면서 겪은 어려움과 해결 과정을 솔직하게 풀어내려 합니다. 함께 성장하는 개발자 커뮤니티가 되기를 바랍니다.
  • Chansman
    찬스맨의 프로그래밍 스토리
    Chansman
  • 전체
    오늘
    어제
    • 분류 전체보기 (787)
      • Python (32)
      • 프로젝트 (110)
      • 과제 (25)
      • Database (40)
      • 멘토링 (11)
      • 특강 (37)
      • 기술블로그 (41)
      • 기술블로그-Fastapi편 (33)
      • 기술블로그-Django편 (153)
      • 기술블로그-Flask편 (36)
      • AI 분석 (5)
      • HTML & CSS (31)
      • JavaScript (17)
      • AWS_Cloud (21)
      • 웹스크래핑과 데이터 수집 (14)
      • Flask (42)
      • Django (77)
      • Fastapi (16)
      • 연예 (14)
  • 블로그 메뉴

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

  • 공지사항

  • 인기 글

  • 태그

    basalcellcarcinoma
    youngprofessionals
    RM
    smartphonedurability
    gpterror
    homebartrend
    global politics
    newpoliticalparty
    urbantrends
    btsreunion
    livebroadcast
    americaparty
    classaction
    travel ban
    btscomeback
    btsjungkook
    titaniumcase
    remittance
    hotcoffeecase
    뷔
    chinanightlife
    trumpmuskclash
    self-growth
    bts
    college reunions
    lawsuitculture
    chatgpterror
    btsdischarge
    life reflection
    americanlaw
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
Chansman
[Django 4일차] Django REST Framework Generic view: 추상화, mixin, 실전 예시까지!4/4 (short_url 프로젝트)(250515)
상단으로

티스토리툴바