홈으로 돌아가기

Django Modern REST: 빠른 REST 프레임워크

Django Modern REST — Django에서 REST API를 위한 고성능 프레임워크, 완전한 타이핑과 OpenAPI 3.1 지원. 여러 시리얼라이저, sync/async 모드 지원. 중급/시니어 개발자에게 이상적.

🚀 Django용 가장 빠른 REST: Modern REST
Advertisement 728x90

Django Modern REST: 고성능 Django API 프레임워크

Django Modern REST(DMR)은 Django를 위해 설계된 차세대 REST API 프레임워크로, 속도와 유연성 면에서 Django REST Framework(DRF)와 django-ninja를 모두 능가합니다. 데이터베이스 쿼리를 제외한 순수 요청 처리 속도는 FastAPI의 70% 수준에 달합니다. DMR은 Pydantic v2, msgspec, attrs, dataclasses, TypedDict, NamedTuple 등 다양한 직렬화 모델을 지원하며, 완전한 타입 안정성, OpenAPI 3.1/3.2 표준 준수, 동기/비동기 코드의 원활한 혼용을 제공합니다.

주요 기능

DMR은 Django 생태계와 완벽하게 호환됩니다: 컨트롤러는 Django의 View 클래스를 상속받으며, 기존 Django 플러그인은 별도 설정 없이 바로 사용 가능합니다. JSON/msgpack 콘텐츠 협상, SSE 및 JSON Lines 스트리밍, 개발 환경에서의 엄격한 응답 스키마 검증 기능도 포함되어 있습니다.

  • 초고속 성능: 벤치마크 결과, 모든 Django 기반 프레임워크 중 DMR이 가장 빠릅니다.
  • 직렬화기 유연성: 컨트롤러 단위로 직렬화기를 자유롭게 선택 가능 — 필요 시 DRF 직렬화기도 통합 지원합니다.
  • 완전한 타입 안정성: 요청 본문과 응답 모두에 대해 강력하고 일관된 타입 체킹을 제공합니다.
  • OpenAPI 자동 생성: 최신 OpenAPI 3.1/3.2 스펙을 완벽히 지원하는 자동 스키마 생성 기능.
  • 테스트 편의성: schemathesis, polyfactory, 그리고 속성 기반 테스트를 위한 pytest 플러그인과의 원활한 연동.

클래스 기반 컨트롤러는 코드 재사용과 플러그인 확장성을 크게 향상시킵니다.

Google AdInline article slot

최소 실행 애플리케이션

단 71줄로 완전히 작동하는 API 예제:

import secrets
import sys
import uuid

import pydantic
from django.conf import settings
from django.core.management import execute_from_command_line
from django.urls import include

from dmr import Body, Controller
from dmr.openapi import build_schema
from dmr.openapi.views import OpenAPIJsonView, SwaggerView
from dmr.plugins.pydantic import PydanticSerializer
from dmr.routing import Router, path

if not settings.configured:
    settings.configure(
        ROOT_URLCONF=__name__,
        ALLOWED_HOSTS='*',
        DEBUG=True,
        INSTALLED_APPS=['dmr', 'django.contrib.staticfiles'],
        STATIC_URL='/static/',
        STATICFILES_FINDERS=[
            'django.contrib.staticfiles.finders.AppDirectoriesFinder',
        ],
        TEMPLATES=[
            {
                'APP_DIRS': True,
                'BACKEND': 'django.template.backends.django.DjangoTemplates',
            },
        ],
        SECRET_KEY=secrets.token_hex(),
    )


class UserCreateModel(pydantic.BaseModel):
    email: str


class UserResponseModel(UserCreateModel):
    uid: uuid.UUID


class UserController(Controller[PydanticSerializer]):
    async def post(
        self,
        parsed_body: Body[UserCreateModel],
    ) -> UserResponseModel:
        return UserResponseModel(uid=uuid.uuid4(), email=parsed_body.email)


router = Router(
    'api/',
    [
        path('user/', UserController.as_view(), name='users'),
    ],
)
schema = build_schema(router)

urlpatterns = [
    path(router.prefix, include((router.urls, 'your_app'), namespace='api')),
    path('docs/openapi.json/', OpenAPIJsonView.as_view(schema), name='openapi'),
    path('docs/swagger/', SwaggerView.as_view(schema), name='swagger'),
]

if __name__ == '__main__':
    execute_from_command_line(sys.argv)

python 파일명.py runserver 명령어로 실행하세요. Swagger 문서는 /docs/swagger/에서 확인할 수 있습니다.

경쟁 프레임워크 비교

DRF는 요청과 응답에 동일한 직렬화기를 사용해 유연성이 떨어지고, 모델 필드 누출 사고가 잦으며, 타입 지원이 미흡합니다. django-ninja는 함수 기반 라우팅에 의존하고, Pydantic만 강제하며, OpenAPI 맞춤화 기능이 제한적입니다.

Google AdInline article slot

| 기능 | DRF | django-ninja | DMR |

|---------|-----|--------------|-----|

| 타입 안정성 | 없음 | 부분적 | 완전함 |

Google AdInline article slot

| 속도 | 낮음 | 중간 | 높음 |

| OpenAPI 지원 | 외부 플러그인 필요 | 제한적 | 내장 OpenAPI 3.1/3.2 지원 |

| 유연성 | 낮음 | 중간 | 높음 |

DMR은 [wemake-django-template](https://github.com/wemake-services/wemake-django-template)에서 채택된 현대적인 아키텍처 패턴을 도입함으로써 Django의 구조적 한계를 극복합니다.

현대적 파이썬 및 멀티스레딩 지원

CPython에 무료 스레딩(free-threading)이 도입되면서 asyncio의 절대적 우위는 점차 약화되고 있습니다. 핵심 파이썬 개발자들의 관점은 다음과 같습니다:

  • Guido van Rossum: "표준 라이브러리의 asyncio는 생태계 혁신을 사실상 정지시켰다."
  • Mark Shannon: "가상 스레드는 async/await보다 훨씬 직관적이고 실용적이다."
  • Armin Ronacher: "실제 멀티스레딩을 지원하는 언어에서는, 스레드가 항상 비동기보다 뛰어난 성능을 낸다."

FastAPI와 달리, Django(그리고 DMR)은 동기 및 비동기 패러다임을 모두 지원하면서도 어느 하나에도 종속되지 않습니다.

개발자 도구

  • 테스트: schemathesis는 전체 엔드포인트의 약 90%를 커버하는 속성 기반 API 테스트를 가능하게 하며, polyfactory는 현실감 있는 테스트 데이터를 자동 생성합니다.
  • AI 통합: 즉시 사용 가능한 LLM 프롬프트(llms-full.txt)와 Context7, DeepWiki, 마이그레이션 중심 템플릿을 포함합니다.
  • 검증: 개발 환경에서는 엄격한 스키마 검증을 수행하며, 운영 환경에서는 환경별로 유연하게 설정 가능합니다.

프레임워크는 완전히 문서화되어 있으며, 엄격한 타입 어노테이션이 적용되었고, AI 생성 코드는 전혀 포함하지 않습니다.

왜 이 프레임워크가 중요한가?

  • FastAPI 수준의 성능을 유지하면서도 Django 생태계와의 완벽한 호환성을 제공합니다.
  • 여러 직렬화 백엔드를 지원하여 특정 라이브러리에 대한 공급자 종속성을 해소합니다.
  • 깔끔한 코드 재사용과 플러그인 생태계 구축을 위한 클래스 기반 컨트롤러 설계.
  • OpenAPI 3.1/3.2에 대한 일류 지원과 개발 시점의 엄격한 스키마 검증.
  • 견고한 속성 기반 API 테스트를 위한 내장 도구 세트.

— Editorial Team

Advertisement 728x90

다음 읽기