기술블로그-Django편

📌 Django REST Framework(DRF)란?

Chansman 2025. 5. 15. 10:56

📌 Django REST Framework(DRF)란?

**Django REST Framework (DRF)**는 Django를 기반으로 RESTful API를 쉽고 빠르게 개발할 수 있도록 도와주는 라이브러리입니다.

✅ DRF의 핵심 기능

  • 직렬화 (Serialization): 모델 데이터를 JSON 등으로 변환
  • 클래스 기반 View (CBV): API 전용 클래스 구조로 재사용성 향상
  • 권한 및 인증 시스템 내장
  • 자동 URL 라우팅 지원
  • 브라우저 테스트 인터페이스 제공 (Browsable API)

👉 DRF는 HTML 페이지를 보여주는 것이 아니라, 모바일/프론트엔드 앱과 연결되는 JSON 기반 API를 만드는 데 초점을 둡니다.


⚖️ Django의 다양한 View 방식 비교: FBV vs CBV vs DRF

1️⃣ FBV (Function-Based View)

def short_url_create_view(request):
    if request.method == "POST":
        form = ShortURLForm(request.POST)
        if form.is_valid():
            short_url = form.save(commit=False)
            short_url.generate_code()
            short_url.save()
    return redirect("/")
  • ✅ HTML 렌더링 및 리디렉션 중심
  • ❌ 재사용/유지보수 어려움
  • ✔️ 소규모 프로젝트에 적합

2️⃣ CBV (Class-Based View)

from django.views import View
from django.shortcuts import render

class MyPageView(View):
    def get(self, request):
        return render(request, "my_page.html")
  • ✅ HTML 렌더링 가능 (기존 FBV 기능을 클래스화)
  • ✅ 중복 줄이고, 재사용성 높임
  • ❌ 복잡한 흐름은 추적이 어려울 수 있음

3️⃣ DRF (Django REST Framework)

from rest_framework import viewsets
from .models import Book
from .serializers import BookSerializer

class BookViewSet(viewsets.ModelViewSet):
    queryset = Book.objects.all()
    serializer_class = BookSerializer
  • ✅ JSON API 전용
  • ❌ HTML 렌더링은 목적이 아님
  • ✅ 인증, 권한, 필터링, 페이징 등 API에 필요한 기능 다수 탑재
  • ✅ Router로 URL 자동 등록

🔍 정리표로 한눈에 비교

구분 목적 HTML 렌더링 JSON API 방식

FBV 함수 기반 처리 ✅ 가능 🔸 가능 (JsonResponse) 절차형
CBV 클래스 구조화 처리 ✅ 가능 🔸 가능 구조화된 방식
DRF API 전용 클래스 기반 처리 ❌ 권장 안함 ✅ 기본 목적 REST API 특화

💡 마무리 요약

  • FBV: 함수형, 간단한 뷰 처리에 적합
  • CBV: 구조화된 HTML 렌더링에 유리함
  • DRF: JSON 응답 중심, API 개발에 특화

📌 DRF는 CBV 구조를 기반으로 하지만, 목적 자체가 HTML이 아닌 API 응답이라는 점에서 Django의 일반 CBV와 다릅니다.

필요 시, 위 기능들을 하나의 기능을 기준으로 FBV → CBV → DRF 변환 예제로도 제공 가능합니다!