Django REST Framework (DRF)
Django 위에서 REST API를 빠르게 구축하기 위한 라이브러리. Django의 ORM 모델을 JSON API로 노출하는 표준적인 방법이다.
핵심 개념
Serializer
Django 모델 ↔ JSON 변환을 담당한다. 유효성 검증도 여기서 처리한다.
from rest_framework import serializers
from .models import Product
class ProductSerializer(serializers.ModelSerializer):
class Meta:
model = Product
fields = ["id", "name", "price", "description"]ViewSet
CRUD 로직을 하나의 클래스로 묶는다. list, create, retrieve, update, destroy 액션을 자동 제공한다.
from rest_framework import viewsets
class ProductViewSet(viewsets.ModelViewSet):
queryset = Product.objects.all()
serializer_class = ProductSerializerRouter
ViewSet을 URL에 자동 매핑한다.
from rest_framework.routers import DefaultRouter
router = DefaultRouter()
router.register(r"products", ProductViewSet)
# → GET/POST /products/, GET/PUT/DELETE /products/{id}/인증 & 권한
| 클래스 | 역할 |
|---|---|
TokenAuthentication | API 토큰 기반 인증 |
SessionAuthentication | Django 세션 기반 |
IsAuthenticated | 로그인 사용자만 허용 |
IsAdminUser | 관리자만 허용 |
DjangoModelPermissions | 모델별 CRUD 권한 매핑 |
Graphene과의 비교
| DRF (REST) | Graphene (GraphQL) | |
|---|---|---|
| 프로토콜 | REST — 리소스별 엔드포인트 | GraphQL — 단일 엔드포인트 |
| 데이터 페칭 | 서버가 응답 형태 결정 | 클라이언트가 필요한 필드만 요청 |
| N+1 문제 | select_related/prefetch_related | DataLoader 패턴 |
| 문서화 | OpenAPI/Swagger 자동 생성 | Schema introspection |
| 학습 곡선 | 낮음 — REST 개념만 알면 됨 | 중간 — GraphQL 스펙 이해 필요 |
| 적합한 경우 | 단순 CRUD, 공개 API, 모바일 BFF | 복잡한 관계형 데이터, 다양한 클라이언트 |
관련 문서
- Django — DRF의 기반 프레임워크
- Graphene — Django에서 GraphQL을 쓰는 대안
- Saleor Core - GraphQL, Settings, Dependencies 분석 — DRF 대신 Graphene을 선택한 사례