모두의연구소와 제주코딩베이스캠프가 함께 만든 백엔드 개발 과정이 궁금하다면?
#소프트웨어 

DRF: Django REST Framework 알아보기

DRF 는 Django REST Framework의 약어입니다. REST와 RESTful API 에 대해 간략하게 알아보고, Django REST Framework에 특징을 알아보겠습니다.

2024-04-11 | 김성혁

Django REST Framework

Django Rest Framework(DRF)는 Django 웹 프레임워크를 기반으로 한 강력하고 유연한 도구 세트입니다. 이를 통해 개발자들은 복잡한 데이터를 쉽게 처리하고, JSON 또는 XML 같은 형식으로 웹 API를 구축할 수 있습니다. 이 글에서는 DRF를 처음 접하는 분들을 대상으로 기본 개념과 시작 방법에 대해 설명합니다.

REST와 RESTful API 이해

REST는 인터넷에서 컴퓨터 또는 시스템 간에 정보를 주고받는 방식의 하나입니다. 이 방식은 웹 페이지 주소(URL)와 웹 페이지를 보거나 변경하는 행위(GET, POST 등의 HTTP 메소드)를 사용하여, 정보(리소스라고 함)를 쉽게 찾고 사용할 수 있도록 합니다. 간단히 말해, REST는 인터넷 상에서 정보를 교환하는 규칙의 집합입니다.

RESTful API는 이 REST 원칙을 따르는 특정한 웹 서비스 인터페이스를 의미합니다. 이는 웹 사이트나 앱이 다른 프로그램과 “대화”할 수 있는 방법을 제공합니다. 예를 들어, 소셜 미디어 플랫폼에서 사용자의 프로필 정보를 가져오거나 업데이트하기 위해 RESTful API를 사용할 수 있습니다. 사용자는 URL을 통해 특정 정보에 접근하고, HTTP 메소드를 통해 그 정보를 읽거나 변경할 수 있습니다.

RESTful API의 주요 장점은 다음과 같습니다:

  • 간단함: URL과 HTTP 메소드만 사용하기 때문에 배우기 쉽고 사용하기 간단합니다.
  • 효율적: 정보를 쉽게 찾을 수 있고, 필요한 정보만 주고받을 수 있어 효율적입니다.
  • 호환성: 다양한 기술과 프로그래밍 언어에서 사용할 수 있어, 여러 시스템 간에 정보를 교환하기 적합합니다.

요약하자면, REST와 RESTful API는 인터넷 상의 다양한 서비스와 애플리케이션들이 서로 정보를 주고받을 수 있게 하는, 규칙과 방법을 제공합니다. 이는 웹 개발의 중요한 부분이며, 현대의 다양한 웹 서비스와 애플리케이션들이 서로 연동되어 작동할 수 있는 기반을 마련해 줍니다.

RESTful 아키텍쳐 (https://blog.postman.com/api-protocols-in-2023/)

Django 와 Django REST Framework

Django는 파이썬을 사용한 웹 개발을 위한 프레임워크이며, MVT(Model-View-Template) 패턴을 기반으로 합니다. 이 구조를 활용하여 웹 애플리케이션을 구축할 수 있지만, RESTful API를 효과적으로 만들기 위해서는 Django REST Framework를 사용하는 것이 좋습니다. 이렇게 이해하면 Django와 Django REST Framework 간의 관계를 보다 명확하게 파악할 수 있습니다.

Django의 MVT 모델

Django는 MVT(Model-View-Template) 아키텍처를 따릅니다. 이는 MVC(Model-View-Controller) 패턴과 비슷하지만, Django에서는 조금 다르게 부릅니다. 각각의 요소는 다음과 같은 역할을 합니다:

  • Model: 데이터베이스의 구조(스키마)를 정의합니다. 여기서 데이터의 형태와 관계를 설정하고, 데이터베이스와의 상호작용을 담당합니다.
  • View: 사용자에게 데이터를 어떻게 보여줄지 결정합니다. 컨트롤러 역할도 겸하여, 모델에서 데이터를 가져오고, 그 데이터를 템플릿에 전달합니다.
  • Template: 실제로 사용자에게 보여지는 부분입니다. HTML을 포함하여, 사용자 인터페이스를 구성합니다.

Django REST Framework

DRF는 Django 위에 구축된 라이브러리로, RESTful API를 쉽게 만들 수 있도록 도와줍니다. API는 애플리케이션 또는 서비스가 서로 정보를 주고받을 수 있도록 하는 인터페이스입니다. DRF는 이러한 API 개발을 위한 강력한 도구를 제공하며, JSON이나 XML 같은 형식으로 데이터를 송수신할 수 있게 해줍니다.

Django와 Django Rest Framework의 차이

  • 목적: Django 자체는 웹 애플리케이션의 전체적인 개발을 위한 프레임워크입니다. 반면, DRF는 Django 기반의 애플리케이션에서 RESTful API를 쉽게 개발하고 관리할 수 있도록 특화된 도구입니다.
  • 사용 케이스: 웹 사이트나 웹 애플리케이션 전체를 만들고 싶다면 Django를 사용합니다. 다른 시스템, 애플리케이션 또는 서비스와 통신할 수 있는 API가 필요하다면 DRF를 활용합니다.
  • 기능: Django는 사용자 인증, 관리 인터페이스, 폼 처리 등의 기능을 제공합니다. DRF는 이러한 기능들 위에 API 생성, 요청 처리, 권한 관리, 데이터 직렬화 등 API 개발에 필요한 추가 기능을 제공합니다.

Django REST Framework 예제

프로젝트 내 라이브러리 설치

시작하기 전, Django 프로젝트가 설치되어 있어야 하며, DRF도 설치되어 있어야 합니다. 다음 명령어로 DRF를 설치할 수 있습니다:

pip install djangorestframework

설치 후, settings.py 파일에 rest_framework 앱을 추가해주세요.

INSTALLED_APPS = [
    ...
    'rest_framework',
]

모델 생성

먼저, models.py 파일에 블로그 포스트 모델을 생성합니다:

from django.db import models

class Post(models.Model):
    title = models.CharField(max_length=100)
    content = models.TextField()

    def __str__(self):
        return self.title

모델을 생성한 후, 데이터베이스 마이그레이션을 실행해주세요:

python manage.py makemigrations
python manage.py migrate

Serializer 설정

DRF에서는 Serializer를 사용해 모델 인스턴스와 JSON 데이터를 변환합니다. serializers.py 파일을 생성하고 다음 코드를 추가하세요:

from rest_framework import serializers
from .models import Post

class PostSerializer(serializers.ModelSerializer):
    class Meta:
        model = Post
        fields = '__all__'

View 생성

이제, 블로그 포스트에 대한 CRUD 기능을 처리할 view를 만듭니다. views.py 파일에 다음 코드를 추가하세요:

from rest_framework import generics
from .models import Post
from .serializers import PostSerializer

class PostListCreate(generics.ListCreateAPIView):
    queryset = Post.objects.all()
    serializer_class = PostSerializer

class PostRetrieveUpdateDestroy(generics.RetrieveUpdateDestroyAPIView):
    queryset = Post.objects.all()
    serializer_class = PostSerializer

URL 설정

마지막으로, urls.py 파일에 API endpoint를 설정해야 합니다. 다음 코드를 프로젝트의 urls.py 파일에 추가하세요:

from django.urls import path
from .views import PostListCreate, PostRetrieveUpdateDestroy

urlpatterns = [
    path('posts/', PostListCreate.as_view(), name='post-list'),
    path('posts/<int:pk>/', PostRetrieveUpdateDestroy.as_view(), name='post-detail'),
]

API 테스트

이제 API를 테스트할 준비가 되었습니다. 서버를 실행하고 웹 브라우저나 Postman과 같은 도구를 사용해 API를 테스트해보세요.

python manage.py runserver

이제 http://localhost:8000/posts/ 주소로 포스트 목록을 보거나 새 포스트를 생성할 수 있습니다. 특정 포스트를 조회, 수정, 삭제하려면 http://localhost:8000/posts/<post_id>/ 주소를 사용하세요.

마무리

Django Rest Framework에 대하여 간략하게 배웠고, Django Rest Framework 사용하여 간단한 블로그 API를 만드는 기본적인 방법을 배웠습니다. DRF는 매우 강력하며, 여러분의 Django 애플리케이션에 RESTful API를 빠르게 추가할 수 있게 해줍니다.