Python

빠르게 시작하는 Django REST Framework (DRF)란?

배고파.. 2025. 1. 20. 16:24

Django REST Framework (DRF)란?

**Django REST Framework (DRF)**는 Django를 기반으로 한 강력하고 유연한 웹 API 구축 도구입니다. Django는 웹 애플리케이션을 빠르게 개발할 수 있는 웹 프레임워크로 잘 알려져 있는데, DRF는 Django를 활용하여 RESTful API를 쉽게 만들 수 있도록 도와주는 라이브러리입니다.

REST(Representational State Transfer)는 HTTP 프로토콜을 사용하여 클라이언트와 서버 간의 통신을 구조화하는 아키텍처 스타일로, DRF는 이를 바탕으로 API를 설계하고 개발할 때 필요한 많은 기능을 제공합니다.


1. DRF의 주요 기능

  • 빠르고 효율적인 API 개발: DRF는 Django와 통합되어 있어 기존 Django 프로젝트에 쉽게 통합할 수 있습니다. 또한, API 설계 및 개발을 빠르게 할 수 있는 다양한 도구를 제공합니다.
  • Serializer: Django 모델을 쉽게 JSON 형식으로 변환할 수 있도록 도와주는 직렬화 도구입니다. 이를 통해 Django 모델 객체를 API에서 클라이언트에게 전달할 수 있는 형식으로 변환할 수 있습니다.
  • 뷰셋(ViewSets)과 라우터(Routers): API 엔드포인트를 간편하게 정의하고, 이를 자동으로 라우팅할 수 있게 도와줍니다. 이를 통해 API 엔드포인트에 대한 많은 설정을 간단하게 할 수 있습니다.
  • 권한과 인증: DRF는 여러 가지 인증 방법(Basic Auth, OAuth, JWT 등)과 권한 관리 기능을 제공하여 API 접근을 제어할 수 있습니다.
  • 클라이언트 응답 포맷 지원: JSON 외에도 다양한 응답 포맷을 지원하며, 여러 데이터 형식에 대해 자동으로 변환할 수 있습니다.
  • Browsable API: DRF는 Browsable API라는 기능을 제공하여, API를 브라우저에서 쉽게 탐색하고 테스트할 수 있게 해줍니다. 이는 API 개발 및 디버깅에 큰 도움을 줍니다.

2. DRF 설치하기

DRF를 Django 프로젝트에 설치하려면, 아래와 같이 djangorestframework 패키지를 설치합니다:

pip install djangorestframework

설치가 완료되면, Django 프로젝트의 settings.py 파일에 rest_framework를 INSTALLED_APPS에 추가해야 합니다:

INSTALLED_APPS = [
    # 다른 앱들...
    'rest_framework',
]

3. DRF로 간단한 API 만들기

(1) Serializer 만들기

Django 모델을 직렬화하려면 Serializer 클래스를 작성해야 합니다. Serializer는 Django 모델의 데이터를 JSON, XML 등의 형식으로 변환하거나 역직렬화하여 데이터베이스에 저장할 수 있게 해줍니다.

예를 들어, 간단한 Book 모델을 직렬화하려면 다음과 같이 작성합니다:

# models.py
from django.db import models

class Book(models.Model):
    title = models.CharField(max_length=200)
    author = models.CharField(max_length=100)
    published_date = models.DateField()

    def __str__(self):
        return self.title

위 모델을 직렬화하는 BookSerializer는 다음과 같습니다:

# serializers.py
from rest_framework import serializers
from .models import Book

class BookSerializer(serializers.ModelSerializer):
    class Meta:
        model = Book
        fields = ['id', 'title', 'author', 'published_date']

(2) ViewSet과 URL 라우팅 설정하기

ViewSet은 CRUD 작업을 위한 기본적인 로직을 제공합니다. 예를 들어, BookViewSet을 만들어보겠습니다:

# views.py
from rest_framework import viewsets
from .models import Book
from .serializers import BookSerializer

class BookViewSet(viewsets.ModelViewSet):
    queryset = Book.objects.all()
    serializer_class = BookSerializer

ModelViewSet을 사용하면 기본적인 CRUD 기능을 자동으로 제공합니다. 이 뷰셋을 URL에 매핑하려면, urls.py에 다음과 같이 라우팅 설정을 합니다:

# urls.py
from django.urls import path, include
from rest_framework.routers import DefaultRouter
from .views import BookViewSet

router = DefaultRouter()
router.register(r'books', BookViewSet)

urlpatterns = [
    path('api/', include(router.urls)),
]

이렇게 설정하면 /api/books/ 엔드포인트에서 자동으로 Create, Read, Update, Delete 작업을 처리할 수 있는 API가 만들어집니다.

(3) API 테스트하기

이제 Django 서버를 실행하고, /api/books/로 GET, POST, PUT, DELETE 요청을 보낼 수 있습니다. Browsable API 덕분에 브라우저에서 API를 쉽게 테스트할 수 있습니다.

python manage.py runserver

브라우저에서 http://localhost:8000/api/books/로 접근하면, DRF가 자동으로 제공하는 UI를 통해 API를 테스트할 수 있습니다.


4. 인증 및 권한 설정

DRF는 다양한 인증 및 권한 시스템을 제공합니다. 기본적으로는 Session Authentication을 사용하지만, 더 안전한 방식인 Token Authentication이나 JWT (JSON Web Token) 인증을 사용할 수도 있습니다.

(1) Token 인증 활성화

먼저, djangorestframework-simplejwt 패키지를 설치하여 JWT 인증을 활성화할 수 있습니다:

pip install djangorestframework-simplejwt

그 후, settings.py에서 인증 설정을 추가합니다:

REST_FRAMEWORK = {
    'DEFAULT_AUTHENTICATION_CLASSES': [
        'rest_framework_simplejwt.authentication.JWTAuthentication',
    ],
}

또한, URL에 JWT 토큰을 얻을 수 있는 엔드포인트를 추가합니다:

# urls.py
from rest_framework_simplejwt import views as jwt_views

urlpatterns = [
    path('api/token/', jwt_views.TokenObtainPairView.as_view(), name='token_obtain_pair'),
    path('api/token/refresh/', jwt_views.TokenRefreshView.as_view(), name='token_refresh'),
    # 다른 URL 패턴들...
]

이렇게 하면 /api/token/을 통해 JWT 토큰을 발급받고, 이를 API 요청 시 헤더에 포함하여 인증을 처리할 수 있습니다.

(2) 권한 설정

DRF는 API에 대한 권한을 설정할 수 있는 다양한 클래스를 제공합니다. 예를 들어, IsAuthenticated 권한 클래스를 사용하여 인증된 사용자만 API에 접근하도록 설정할 수 있습니다:

from rest_framework.permissions import IsAuthenticated

class BookViewSet(viewsets.ModelViewSet):
    queryset = Book.objects.all()
    serializer_class = BookSerializer
    permission_classes = [IsAuthenticated]

이 설정은 인증되지 않은 사용자가 API를 호출하면 401 Unauthorized 오류를 반환하게 됩니다.


5. DRF의 장점

  • 빠른 개발: Django의 기존 기능들과 잘 통합되며, API 개발을 위한 많은 기본 기능을 자동으로 제공합니다.
  • 유연성: 다양한 인증 방법, 권한 설정, 응답 형식 등을 지원하여 다양한 요구사항을 처리할 수 있습니다.
  • 문서화 지원: DRF는 자동으로 API 문서를 생성할 수 있는 기능을 제공합니다. drf-yasg나 django-rest-swagger와 같은 라이브러리를 사용하면 Swagger UI를 통해 API를 문서화할 수 있습니다.
  • Browsable API: DRF는 브라우저에서 쉽게 API를 탐색하고 테스트할 수 있도록 인터페이스를 제공합니다.

6. 결론

Django REST Framework는 Django 기반의 RESTful API를 손쉽게 구축할 수 있게 해주는 도구입니다. 빠르고 효율적으로 API를 개발할 수 있으며, 인증, 권한 관리, 직렬화 등 여러 기능을 지원하여 API 개발 시 발생할 수 있는 다양한 문제를 해결해줍니다.

DRF를 활용하여 API를 개발하면, Django의 강력한 ORM과 관리 기능을 그대로 사용할 수 있기 때문에 효율적인 백엔드 시스템을 구축할 수 있습니다.

'Python' 카테고리의 다른 글

Django Rest Framework 를 사용한 restful API 개발  (0) 2025.01.20
Python 가상환경 설정 방법  (1) 2025.01.20