기본 개념

Django
Python 웹 프레임워크로, 웹 애플리케이션의 전반적인 백엔드 개발을 돕는 도구입니다. HTML 템플릿 렌더링, ORM(Object-Relational Mapping), 라우팅, 인증 등 웹 개발 전반에 필요한 도구를 제공합니다.

  • 사용 사례: 블로그, 커머스 사이트, 포럼 등.

Django REST Framework (DRF)
Django 위에 추가되는 라이브러리로, RESTful API를 쉽게 개발할 수 있게 도와줍니다. DRF는 JSON 응답, API 인증, 직렬화(Serialization) 등을 기본적으로 지원하며, Django ORM과 잘 통합됩니다.

  • 사용 사례: 모바일 앱 백엔드, 데이터 제공용 API 서버, SPA(Single Page Application) 백엔드.

기능 비교

기능  Django DRF 
템플릿 렌더링 HTML 페이지를 렌더링하는 데 적합 JSON이나 XML 같은 데이터 응답을 제공
직렬화 지원하지 않음 Serializer를 통해 Python 객체를 JSON으로 변환 (반대도 가능)
ORM 지원 Django ORM으로 데이터베이스 연동 Django ORM을 기반으로 직렬화와 통합
라우팅 URL 패턴 매핑 (장고의 urlpatterns) API 전용 라우터 (routers) 제공
인증 기본 인증 시스템 (세션, 사용자 관리) 토큰 기반 인증(JWT), OAuth 등 다양한 인증 방식 지원
목적 전통적인 웹 애플리케이션 개발 API 개발 전용
브라우저에서의 디버깅 기본 Django Admin 제공 API를 테스트할 수 있는 Browsable API UI 제공

코드 예시 비교

Django로 구현 (HTML 렌더링)

사용자 정보를 보여주는 HTML 페이지 작성.

# views.py
from django.shortcuts import render
from .models import User

def user_list(request):
    users = User.objects.all()
    return render(request, 'user_list.html', {'users': users})

# urls.py
from django.urls import path
from .views import user_list

urlpatterns = [
    path('users/', user_list, name='user_list'),
]

# user_list.html
<!DOCTYPE html>
<html>
  <body>
    <ul>
      {% for user in users %}
        <li>{{ user.name }}</li>
      {% endfor %}
    </ul>
  </body>
</html>

결과: /users/로 접속하면 사용자 리스트를 보여주는 HTML 페이지가 렌더링됩니다.

 

DRF로 구현 (JSON API)

사용자 정보를 제공하는 RESTful API 작성.

# views.py
from rest_framework.views import APIView
from rest_framework.response import Response
from .models import User
from .serializers import UserSerializer

class UserListAPIView(APIView):
    def get(self, request):
        users = User.objects.all()
        serializer = UserSerializer(users, many=True)
        return Response(serializer.data)

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

class UserSerializer(serializers.ModelSerializer):
    class Meta:
        model = User
        fields = ['id', 'name', 'email']

# urls.py
from django.urls import path
from .views import UserListAPIView

urlpatterns = [
    path('api/users/', UserListAPIView.as_view(), name='user_list_api'),
]

 

결과: /api/users/로 요청을 보내면 JSON 형식으로 사용자 데이터를 응답합니다

[
  {"id": 1, "name": "Alice", "email": "alice@example.com"},
  {"id": 2, "name": "Bob", "email": "bob@example.com"}
]

Django와 DRF를 함께 사용하는 이유

Django는 HTML 기반 웹 애플리케이션을 빠르게 개발하는 데 강력하지만, JSON과 같은 데이터를 주고받는 API 개발에는 적합하지 않습니다. DRF는 이를 보완하여 Django의 강력한 ORM과 인증 기능을 활용하면서도 RESTful API를 간단히 설계할 수 있도록 합니다.

  • Django로 전통적인 웹 페이지와 관리자(Admin) 페이지를 개발하고,
  • DRF로 모바일 앱이나 프론트엔드(SPA)와 통신하는 API를 추가 개발하는 방식으로 두 도구를 결합할 수 있습니다.

DRF의 장점

  1. 간편한 직렬화: Serializer 클래스로 데이터를 직렬화/역직렬화하는 작업이 쉽습니다.
  2. API 문서화: 자동으로 브라우저에서 테스트 가능한 UI 제공 (Browsable API).
  3. 다양한 인증 방식 지원: OAuth2, JWT 등.
  4. 필터링과 페이징: 데이터의 검색, 정렬, 페이지네이션 기능 내장.
  5. 확장성: 커스터마이징 가능한 강력한 구조.

6. 어떤 것을 선택해야 할까?

  • HTML 페이지 중심의 프로젝트라면 Django만으로 충분.
  • 모바일 앱 또는 React/Vue.js 같은 SPA와 통신할 API가 필요하다면 Django + DRF 조합 추천.

+ Recent posts