DRF: Django REST Framework 알아보기
DRF 는 Django REST Framework의 약어입니다. REST와 RESTful API 에 대해 간략하게 알아보고, Django REST Framework에 특징을 알아보겠습니다.
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는 인터넷 상의 다양한 서비스와 애플리케이션들이 서로 정보를 주고받을 수 있게 하는, 규칙과 방법을 제공합니다. 이는 웹 개발의 중요한 부분이며, 현대의 다양한 웹 서비스와 애플리케이션들이 서로 연동되어 작동할 수 있는 기반을 마련해 줍니다.
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를 빠르게 추가할 수 있게 해줍니다.