널리 활용되는 Django 웹 개발 플랫폼의 전문 확장인 Django Rest Framework(DRF)는 REST(Representational State Transfer) API(애플리케이션 프로그래밍 인터페이스)의 생성 및 관리를 위한 강력한 지원을 제공합니다. 상위 프레임워크와 마찬가지로 DRF를 사용하면 개발자가 함수 중심 또는 클래스 지향 접근 방식을 사용하여 API 관점을 구성할 수 있으므로 기존 프로젝트 내에서 원활하게 통합 및 사용자 지정할 수 있습니다.

클래스 기반 뷰는 초기에는 학습 곡선이 가파를 수 있지만 코드 구성 개선, 상속을 통한 모듈성 증가, 재사용성 향상, 구현 간결성 등 여러 가지 장점이 특징입니다.

장고 REST 프레임워크로 레시피 관리자 API 만들기

장고 REST 프레임워크(DRF) 내에서 클래스 기반 뷰의 복잡성을 파악하는 훌륭한 방법은 레시피 관리 애플리케이션을 활용하는 것입니다. 이 매체를 통해 모든 데이터베이스 시스템의 기본 측면인 CRUD(생성, 읽기, 업데이트, 삭제) 기능 구현에 대한 귀중한 통찰력을 얻을 수 있습니다. 이후 지침을 준수함으로써 포괄적인 CRUD 인터페이스를 구성하는 데 필요한 지식을 갖추게 될 것입니다.

이 튜토리얼의 소스 코드는 GitHub에서 찾을 수 있습니다.

1단계: Django REST 프레임워크 설치 및 프로젝트 구성

프로젝트에 대한 가상 환경을 만들고 다음을 포함하여 필요한 종속성을 설치하세요(

 pip install django djangorestframework

).

터미널 또는 명령 프롬프트에서 다음 명령을 실행하여 “core”라는 이름의 Django 프로젝트를 설정합니다:

당면한 작업은 “recipe\_manager”로 알려진 모바일 애플리케이션을 개발하는 것입니다. 이 프로젝트의 개발자 ID는

 python manage.py startapp recipe_manager

입니다.

Django 프로젝트 내에서 애플리케이션을 통합하려면 먼저 설치된 모든 애플리케이션 목록이 포함된 “core” 또는 “settings.py” 파일을 열어야 합니다. 이 목록에서 새로 만든 앱의 이름을 목록에 포함하여 해당 앱이 등록된 섹션을 찾아야 합니다. 이렇게 하면 전체 Django 프로젝트에서 애플리케이션을 활용할 수 있습니다.

2단계: 레시피 앱의 모델 생성

기능적인 애플리케이션을 개발하기 위해서는 “recipe\_manager” 패키지 내의 models 폴더에 데이터베이스 스키마를 생성하여 기초를 구축해야 합니다. 이 프로세스는 제목, 설명, 재료, 지침 및 이미지 URL과 같은 필수 속성을 포함하는 레시피 모델을 구현하여 수행할 수 있습니다. 이 모델의 주요 목적은 다양한 레시피와 관련된 데이터를 효과적으로 저장하고 효율적으로 검색하는 것입니다.

이 글도 확인해 보세요:  Reqwest로 Rust에서 HTTP 요청 만들기

Django 모델에 대한 마이그레이션을 생성하고 데이터베이스에 적용하려면 터미널 또는 명령 프롬프트에서 다음 명령을 사용하세요:

3단계: 앱용 직렬화 프로그램 생성

본질적으로 직렬화 프로그램은 데이터베이스 쿼리를 비롯한 복잡한 데이터 구조를 JSON 또는 XML 형식 등 렌더링에 적합한 형식으로 변환하는 것을 용이하게 하는, 장고 개발 영역에서 없어서는 안 될 유틸리티 역할을 합니다.

시리얼라이저를 개발하려면 다음 절차를 준수하세요:

“recipe\_manager/serializers.py”라는 이름의 직렬화기 파일을 설정하려면 먼저 “recipe\_manager”라는 이름의 새 디렉터리를 생성한 다음 해당 디렉터리 내에 직렬화 목적으로 특별히 설계된 별도의 파일을 생성해야 합니다. 이렇게 하면 레시피 관리자 애플리케이션과 관련된 정보를 효율적으로 관리하고 구성할 수 있습니다.

직렬화 표현을 만들려는 특정 모델과 “serializers” 모듈을 모두 가져와야 합니다.

단일 파이썬 스크립트 내에서 특정 모델에 대한 직렬화기를 올바르게 구현하려면 먼저 `serializers` 모듈의 기본 `ModelSerializer` 클래스를 확장하여 별도의 직렬화기 클래스를 만들어야 합니다. 그런 다음 정의된 직렬화기 클래스 내에서 대상 모델 유형과 직렬화 프로세스 중에 포함할 모델의 관련 속성의 선택적 하위 집합을 모두 지정하는 사용자 정의된 `Meta` 클래스가 인스턴스화됩니다. 이는 `Meta` 클래스 인스턴스의 `fields` 매개변수에 필드 이름을 포함하는 목록 또는 튜플을 제공함으로써 달성할 수 있습니다. fields` 매개 변수의 값으로 ‘all’을 지정하면 모델 내에서 사용 가능한 모든 필드가 직렬화된 출력에 포함됩니다.

4단계: CREATE 작업을 위한 뷰 작성

Django에서 사용 가능한 일반 뷰를 가져와서 앱에 대한 클래스 기반 뷰를 만들 수 있습니다. 이러한 뷰에 대한 자세한 내용은 Django의 공식 문서 에서 확인할 수 있습니다. CRUD의 CREATE 연산을 구현하려면 CreateAPIView를 임포트해야 합니다. 또한 직렬화기와 모델도 가져와야 합니다:

 # views.py
from rest_framework.generics import CreateAPIView

from .models import Recipe
from .serializers import RecipeSerializer

데이터베이스 관리 시스템에서 CREATE 문을 효과적으로 실행하려면 사용 중인 특정 뷰에서 어떤 직렬화기를 사용해야 하는지 지정해야 합니다. 예시적인 예는 다음과 같습니다:

 # Create view
class RecipeCreateView(CreateAPIView):
    serializer_class = RecipeSerializer

이 구성을 사용하면 애플리케이션에 POST 요청을 제출할 수 있습니다.

5단계: 읽기 작업을 위한 뷰 작성

제공된 모델에서 읽기 작업을 실행하려면 `ListAPIView`를 애플리케이션의 뷰에 통합합니다.이 보기의 목적은 편리한 액세스 및 검토를 위해 모델 인스턴스의 정리된 목록을 표시하는 것입니다.

이 글도 확인해 보세요:  JES를 활용한 흥미로운 사운드 처리 기법 3가지

장고에서 뷰를 정의하려면 먼저 `django.views.View` 클래스에서 상속하는 클래스를 만들어야 합니다. 그런 다음 이 클래스 내에서 `serializer_class` 속성을 설정하여 템플릿 내에 표시되는 모델 인스턴스의 데이터를 직렬화하는 데 사용할 직렬화기를 지정할 수 있습니다. 또한 `queryset` 속성을 사용하여 템플릿에 전달할 개체를 검색할 쿼리 집합을 지정할 수도 있습니다.

Django의 REST 프레임워크를 사용하여 특정 레시피를 표시하려면 import 문에서 `RetrieveAPIView` 클래스를 활용해야 합니다. 이 클래스가 추가되면 지정된 레시피 데이터를 검색하고 표시하기 위해 원하는 보기를 정의할 수 있습니다.

6단계: 업데이트 및 삭제 작업을 위한 뷰 작성

업데이트 및 삭제 작업을 실행하기 위해서는 각각의 API 뷰, 즉 UpdateAPIView와 DestroyAPIView를 활용해야 합니다. 따라서 해당 뷰를 임포트해야 합니다.

 from rest_framework.generics import (
    ListAPIView,
    CreateAPIView,
    RetrieveAPIView,
    UpdateAPIView, # new
    DestroyAPIView, # new
)

다음 단계는 앞서 언급한 뷰를 생성하는 것인데, 이 뷰는 각각 보다 구체적인 `UpdateAPIView`와 `DestroyAPIView`에서 파생될 것입니다.

 # Update view
class RecipeUpdateView(UpdateAPIView):
    serializer_class = RecipeSerializer
    queryset = Recipe.objects.all()

# Delete view
class RecipeDeleteView(DestroyAPIView):
    serializer_class = RecipeSerializer
    queryset = Recipe.objects.all()

7단계: 앱의 URL 생성

프로젝트의 `core` 모듈에서 URL을 구성하려면 해당 디렉터리 내에 있는 `urls.py` 파일에 다음 코드 조각을 추가해야 합니다.

제공된 코드 조각을 `recipe_manager/urls.py` 파일에 통합하여 `as_view()` 메서드를 활용하여 클래스 기반 보기의 URL 패턴을 설정합니다. 또한, 이러한 맥락에서 애플리케이션과 관련하여 혼란이 발생할 경우 Django 프레임워크 내에서 프로젝트와 앱 간의 차이점을 숙지하는 것이 좋습니다.

8단계: API 엔드포인트 테스트

컴퓨터의 터미널 또는 명령 프롬프트를 사용하여 프로젝트의 디렉토리 내에서 명령을 실행하려면 다음 단계를 따르세요: 1. 원하는 터미널 또는 명령 프롬프트 애플리케이션을 열고 프로젝트의 루트 폴더로 이동합니다. 일반적으로 “cd”를 입력한 다음 프로젝트의 루트 디렉터리 경로를 입력하면 됩니다. 예를 들어 프로젝트가 데스크톱의 “내\_프로젝트”라는 폴더에 있는 경우 “cd ~/Desktop/내\_프로젝트”를 입력하면 됩니다. 프로젝트가 다른 위치에 저장되어 있다면 경로를 적절히 조정하세요. 2. 프로젝트의 루트 디렉토리로 이동한 후 명령줄 인터페이스에 표시되는 대로 실행할 명령의 이름을 입력합니다.특정 명령에 필요한 인수 또는 매개 변수를 포함해야 합니다

 python manage.py runserver 

필요한 확인을 실행하여 이 서버의 작동을 시작하고 해당 기능에 원격으로 액세스할 수 있는 웹 주소를 생성합니다.

이 글도 확인해 보세요:  프리랜서 웹 개발자가 원격 근무를 할 수 있는 상위 10가지 웹사이트

등 제공된 URL 경로를 활용하고 CRUD 기능에 대한 다양한 HTTP 요청 방법론을 실행합니다. 아래와 같은 사용자 친화적인 인터페이스가 표시될 것으로 예상됩니다:

웹 브라우저를 사용하는 대신 Postman을 사용하여 API를 평가할 수 있습니다.

CRUD API를 만드는 동안 DRY 연습하기

일부 개발자에 따르면 프로그래밍에 DRY(Do Not Repeat Yourself) 원칙을 채택하면 코드의 전반적인 품질을 향상시킬 수 있다고 합니다.

앞서 언급한 뷰 구성을 활용하면 콘텐츠 중복 문제를 효과적으로 해결할 수 있지만, 더 효율적으로 유사한 결과를 얻으려면 ListCreateAPIView 및 RetrieveUpdateDestroyAPIView 제네릭 클래스를 사용하는 것이 대안이 될 수 있습니다.

ListCreateAPIView는 ListAPIView와 CreateAPIView 기능을 모두 결합한 반면, RetrieveUpdateDestroyAPIView는 RetrieveAPIView, UpdateAPIView, DestroyAPIView의 기능을 통합하여 단일 API 뷰에서 데이터 검색, 수정 및 삭제 작업에 대한 포괄적인 솔루션을 제공합니다.

다음과 유사한 방식으로 과거의 관점을 변경할 수 있습니다:

 from rest_framework.generics import ListCreateAPIView, RetrieveUpdateDestroyAPIView

from .models import Recipe
from .serializers import RecipeSerializer

class RecipeListCreateAPIView(ListCreateAPIView):
    serializer_class = RecipeSerializer
    queryset = Recipe.objects.all()

class RecipeRetrieveUpdateDeleteAPIView(RetrieveUpdateDestroyAPIView):
    serializer_class = RecipeSerializer
    queryset = Recipe.objects.all()

이 방법을 사용하면 프로그래밍 코드베이스가 더 간결해집니다.

다음과 같은 방식으로 새로운 관점에 대한 웹 주소를 생성할 수 있습니다:

 from django.urls import path
from .views import RecipeListCreateAPIView, RecipeRetrieveUpdateDeleteAPIView

urlpatterns = [
    # List and Create view
    path('recipes/', RecipeListCreateAPIView.as_view(), name='recipe-list-create'),

    # Retrieve, Update, and Delete view
    path('recipes/<int:pk>/', RecipeRetrieveUpdateDeleteAPIView.as_view(), name='recipe-retrieve-update-destroy'),
]

Postman과 같은 소프트웨어 애플리케이션 또는 API 테스트에 선호되는 다른 도구를 활용하면 이러한 엔드포인트의 기능을 평가할 수 있습니다.

일반 클래스 기반 뷰를 사용하면 작업이 쉬워집니다.

일반 클래스 기반 뷰를 통합하면 특정 애플리케이션에 적합한 APIView를 상속하여 뷰를 신속하게 개발할 수 있습니다.

차선의 소프트웨어가 생성되는 것을 방지하기 위해 적절한 코딩 기술을 구현하는 것이 중요합니다.

By 박준영

업계에서 7년간 경력을 쌓은 숙련된 iOS 개발자인 박준영님은 원활하고 매끄러운 사용자 경험을 만드는 데 전념하고 있습니다. 애플(Apple) 생태계에 능숙한 준영님은 획기적인 솔루션을 통해 지속적으로 기술 혁신의 한계를 뛰어넘고 있습니다. 소프트웨어 엔지니어링에 대한 탄탄한 지식과 세심한 접근 방식은 독자에게 실용적이면서도 세련된 콘텐츠를 제공하는 데 기여합니다.