TIL: Django REST Framework (DRF) 기초
오늘은 Django REST Framework(DRF)의 기본 개념과 핵심 요소들에 대해 학습했다. DRF는 Django 기반의 강력한 REST API 개발 도구로, 다양한 기능을 제공하여 백엔드 API 구축을 더욱 효율적으로 만들 수 있다.
1. DRF란?
**Django REST Framework(DRF)**는 Django에서 RESTful API를 쉽게 개발할 수 있도록 도와주는 강력한 라이브러리이다. DRF를 사용하면 API 요청을 보다 간편하게 처리할 수 있으며, 인증, 권한 관리, 데이터 직렬화 등의 기능을 제공한다.
2. DRF의 핵심 개념
1) Serializer (직렬화)
- Python 객체(QuerySet, Model 등)를 JSON 형식으로 변환(Serialization)
- JSON 데이터를 Python 객체로 변환(Deserialization)
- serializers.Serializer와 serializers.ModelSerializer의 차이점 이해
from rest_framework import serializers
from .models import Article
class ArticleSerializer(serializers.ModelSerializer):
class Meta:
model = Article
fields = '__all__'
2) View (뷰)
DRF의 뷰는 크게 다음과 같이 나뉜다.
- Function-Based Views (FBV)
- @api_view 데코레이터를 사용하여 함수 기반 API 작성
- HTTP 메서드(GET, POST, PUT, DELETE) 처리 가능
from rest_framework.decorators import api_view
from rest_framework.response import Response
from .models import Article
from .serializers import ArticleSerializer
@api_view(['GET'])
def article_list(request):
articles = Article.objects.all()
serializer = ArticleSerializer(articles, many=True)
return Response(serializer.data)
- Class-Based Views (CBV)
- Django의 View 클래스를 상속받아 API 작성
- get, post, put, delete 등의 메서드 오버라이딩
from rest_framework.views import APIView
class ArticleList(APIView):
def get(self, request):
articles = Article.objects.all()
serializer = ArticleSerializer(articles, many=True)
return Response(serializer.data)
- Generic Views
- CRUD 기능을 제공하는 미리 정의된 클래스 사용 (e.g., ListAPIView, RetrieveAPIView)
from rest_framework import generics
class ArticleList(generics.ListCreateAPIView):
queryset = Article.objects.all()
serializer_class = ArticleSerializer
- ViewSets
- CRUD를 자동으로 처리하는 최적화된 방법 제공
from rest_framework import viewsets
class ArticleViewSet(viewsets.ModelViewSet):
queryset = Article.objects.all()
serializer_class = ArticleSerializer
3) Router (라우팅)
- urls.py에서 뷰와 엔드포인트 연결
- DefaultRouter를 사용하면 자동으로 URL 패턴을 생성
from rest_framework.routers import DefaultRouter
from .views import ArticleViewSet
router = DefaultRouter()
router.register(r'articles', ArticleViewSet)
urlpatterns = router.urls
4) Authentication & Permissions (인증 및 권한)
- DRF에서는 다양한 인증 및 권한 부여 방식을 지원한다.
- 인증 방법
- BasicAuthentication, TokenAuthentication, SessionAuthentication, JWTAuthentication 등
- 설정 파일에서 기본 인증 설정
REST_FRAMEWORK = { 'DEFAULT_AUTHENTICATION_CLASSES': [ 'rest_framework.authentication.TokenAuthentication', ], 'DEFAULT_PERMISSION_CLASSES': [ 'rest_framework.permissions.IsAuthenticated', ] } - 권한 부여(Permissions)
- AllowAny: 누구나 접근 가능
- IsAuthenticated: 인증된 사용자만 접근 가능
- IsAdminUser: 관리자만 접근 가능
from rest_framework.permissions import IsAuthenticated class ArticleViewSet(viewsets.ModelViewSet): permission_classes = [IsAuthenticated] queryset = Article.objects.all() serializer_class = ArticleSerializer
3. DRF의 주요 기능 정리
- Browsable API 제공
- 웹 브라우저에서 API를 시각적으로 확인하고 테스트 가능
- 자동 URL 패턴 생성 (Router)
- ViewSet과 함께 사용하여 CRUD 엔드포인트 자동화
- Validation (유효성 검사)
- Serializer의 validate 메서드를 통해 데이터 유효성 검사
- 페이징, 필터링, 검색 기능 지원
- Pagination, Filtering, Ordering 등의 기능을 손쉽게 구현 가능
4. 오늘 학습하며 느낀 점
- DRF는 Django에 익숙한 개발자라면 비교적 쉽게 REST API를 개발할 수 있도록 도와준다.
- Serializer와 ViewSet을 활용하면 API 개발이 효율적이며, 가독성이 높아진다.
- FBV보다 CBV와 ViewSet을 활용하면 유지보수와 확장성이 좋지만, 상황에 맞게 선택해야 한다.
5. 앞으로의 학습 계획
- DRF의 인증(Authentication)과 권한 관리(Permission)에 대해 더 깊이 이해하기
- API 페이징 및 필터링 적용 방법 익히기
- DRF로 간단한 프로젝트를 진행하며 실전 감각 익히기
이렇게 TIL을 정리하며 DRF의 개념을 다시 한번 정리하고, 앞으로의 학습 방향을 계획할 수 있었다.
'내일배움캠프 TIL' 카테고리의 다른 글
| 2025.01.27 TIL Django : URL (0) | 2025.01.27 |
|---|---|
| 2025.01.24TIL: LLM 기초 개념 정리 (0) | 2025.01.24 |
| 2025.01.22 TIL - 장고: 데이터베이스 관계 / 날짜 및 시간 Field (0) | 2025.01.22 |
| 2025.01.21TIL - 장고: URL 패턴 (0) | 2025.01.21 |
| 2025.01.20 TIL - Django - ORM과 메서드 종류 정리 (0) | 2025.01.20 |