Django Ninja 소개——Django REST framework와의 주요 차이점#

이 글은 Django Ninja 시리즈 튜토리얼의 3번째 글이에요.
어떤 도구를 선택하기 전에는 보통 그 도구가 어떤 문제를 해결할 수 있는지, 그리고 나의 필요에 맞는지를 먼저 파악하곤 하죠.
이 글에서는 Django Ninja라는 현대적인 API 프레임워크를 소개하고, 그 기원과 주요 특징을 탐구할 거예요. 또한, 자신에게 맞는 도구를 더 잘 선택할 수 있도록 Django REST framework와의 차이점을 중점적으로 비교해 볼 예정이에요.
GitHub 예제 프로젝트#
Django Ninja: Django 생태계의 FastAPI#
Django Ninja의 기원은 FastAPI와 밀접한 관련이 있어요.
Django Ninja는 "Django 버전의 FastAPI"라고 볼 수 있으며, 원조 FastAPI보다 Django와 더 잘 통합될 수 있어요.
Django Ninja의 공식 문서에서 원작자인 Vitaliy Kucheryaviy는 왜 이 프레임워크를 만들었는지 설명했어요. 이는 그가 Django 프로젝트에서 FastAPI를 사용할 때 특히 통합 측면에서 겪었던 몇 가지 문제들에서 비롯되었죠.
그래서 그는 직접 더 적합한 도구를 만들기로 결심했고, 그렇게 해서 탄생한 것이 바로 Django Ninja예요.
짐작하시겠지만, Django Ninja는 FastAPI에서 깊은 영감을 받았어요. 사실, 이 도구는 Django REST framework의 훌륭한 모범 사례들도 꽤 많이 빌려왔답니다. 이것이 바로 후발주자의 장점이죠!
문서에 이런 문장이 인용되어 있는데, 흔히들 궁금해하는 질문이에요:
Django Ninja looks basically the same as FastAPI, so why not just use FastAPI? (Django Ninja는 FastAPI와 거의 똑같아 보이는데, 그냥 FastAPI를 쓰면 되지 않나요?)
정답은 이래요: Django와 FastAPI 두 도구의 통합이 완벽하지 않기 때문이며, Django Ninja는 Django 개발자에게 더 적합한 버전을 제공하기 때문이에요.
Django Ninja의 특징#
Django Ninja의 몇 가지 핵심 기능 덕분에 Django API 개발자에게 훌륭한 선택지가 될 수 있었어요:
- API 문서 자동 생성: Python 타입 힌트와 Pydantic을 활용하여 OpenAPI 표준을 준수하는 API 문서를 자동으로 생성해요. 덕분에 문서를 유지보수하는 수고를 크게 줄여주죠. 이것이 제가 처음에 Django Ninja를 선택한 가장 큰 이유이기도 해요.
- 요청 검증과 데이터 직렬화: Pydantic BaseModel을 기반으로 요청 데이터를 검증하고 데이터의 직렬화와 역직렬화를 처리하여, API의 안정성과 데이터의 정확성을 보장해요.
- 간결하고 효율적인 API 정의: Django Ninja는 API 라우팅과 처리 로직(뷰 함수)을 정의하는 명확하고 간단한 방법을 제공하여 개발자가 빠르게 익힐 수 있게 해줘요.
- Django와의 매끄러운 통합: 프레임워크를 설계할 때부터 Django와의 호환성을 고려했기 때문에, 기존 Django 프로젝트에 쉽게 통합할 수 있으며 ORM과 같은 Django의 기존 기능을 십분 활용할 수 있어요.
- 비동기 지원: Django Ninja는 비동기 처리(async)를 지원하여, 대량의 요청에 직면했을 때도 API가 효율적인 응답 속도와 처리 성능을 유지할 수 있게 해줘요.
Django Ninja의 비동기 성능 우위#
Django Ninja의 특징을 이해하고 나면, 비동기 지원에 대해 다시 한번 강조하지 않을 수 없어요. 이는 Django REST framework 같은 기존의 동기식 프레임워크에 비해 Django Ninja가 가지는 큰 성능적 이점이에요.

위의 차트를 보면 비교적 높은 동시성(concurrency)(concurrency=50) 네트워크 요청 상황에서 Django Ninja의 처리 능력이 Flask + Marshmallow나 Django REST framework보다 눈에 띄게 우수함을 알 수 있어요.
비동기의 장점은 worker가 1개뿐일 때 더욱 두드러지는데, 이는 리소스를 절약하고 성능을 높이는 데 큰 의미가 있죠.
Django Ninja에 대해 알아보았으니, 이제 Django REST framework와의 차이점을 비교해 볼게요.
Django Ninja와 Django REST framework의 주요 차이점#
Python 백엔드 개발 분야에 막 발을 들인 독자라면 Django REST framework가 낯설지도 모르겠네요. 제가 썼던 〈Django REST framework 튜토리얼 (1) 서론편〉이라는 글을 참고해 보셔도 좋아요.
해당 글에는 왜 Django에 Django REST framework 같은 API 프레임워크가 필요한지도 설명되어 있어요.
Django REST framework와 Django Ninja 모두 Django 생태계 내에서 API를 빠르게 구축하는 데 쓰이는 강력한 도구들이며, 전자가 훨씬 더 긴 역사를 자랑해요.
하지만 두 도구는 설계 철학이나 기능 구현 면에서 뚜렷한 차이를 보인답니다. 저에게 있어서 이 둘은 사실상 완전히 다른 도구라고 할 수 있을 정도예요😎
아래의 세 부분은 제가 개인적으로 생각하는 두 도구의 주요 차이점을 요약한 것이에요.
설계 철학#
- Django REST framework: 성숙하고 포괄적인 프레임워크로서, 풍부한 컴포넌트(components)를 제공해요. 높은 수준의 커스터마이징과 복잡한 기능이 필요한 프로젝트에 적합하며, 강력한 커뮤니티의 지원을 받고 있어요.
- Django Ninja: 간결함과 개발 속도에 중점을 두며, 현대 Python의 특성(예: 타입 힌트)을 활용하여 API 개발 과정을 간소화해요. 빠른 개발과 높은 성능을 추구하는 프로젝트에 적합해요.
주요 기능 차이#
- 직렬화 (Serialization):
- Django REST framework: 사용자 정의가 가능한 시리얼라이저(Serializer)를 사용하여 더욱 복잡한 직렬화 요구 사항을 지원해요.
- Django Ninja: Pydantic BaseModel을 사용하여 직렬화 과정을 단순화하지만, Django REST framework만큼 유연하지는 않을 수 있어요.
- API 문서 생성:
- Django REST framework: 코드에서 자동으로 API 문서를 생성하려면 추가 패키지가 필요하며, 그 결과물도 Pydantic을 사용하는 프레임워크만큼 좋지는 않아요.
- Django Ninja: OpenAPI 표준을 준수하는 문서를 자동으로 생성하며, 과정이 훨씬 간편하고 효율적이에요.
- 성능 (동기 vs 비동기):
- Django REST framework: 기능이 풍부한 만큼 성능에 다소 영향을 미칠 수 있어요. 비동기를 지원하지 않아요.
- Django Ninja: 요청 검증 및 처리 측면에서 일반적으로 더 빠른 성능을 보이며, 비동기를 지원해요.
커뮤니티 지원과 생태계#
- Django REST framework: 성숙한 커뮤니티와 수많은 플러그인 패키지를 보유하고 있으며, encode 팀이 개발과 유지보수를 담당하고 있어요.
- Django Ninja: 비교적 최신 프레임워크라 커뮤니티 규모가 작고 온라인 자료가 훨씬 적어요. 주로 원작자 1인이 개발과 유지보수를 도맡아 하고 있답니다.
마무리#
Django Ninja와 Django REST framework는 각각의 장점을 가지고 있어요:
- 빠른 개발, 높은 성능, 그리고 현대적인 Python 타입 전트를 원하신다면, 특히 비동기가 필요한 상황이라면 Django Ninja가 이상적인 선택이 될 거예요.
- 더 복잡한 인증이나 권한 관리를 처리해야 하고, API 검증과 처리 로직에 고도로 맞춤화된 설정이 필요하다면 Django REST framework가 안정적이고 강력한 선택이 될 거예요.
이 글을 통해 Django Ninja에 대해 더 명확히 이해하게 되셨기를 바라요.
이후 튜토리얼에서는 Django Ninja의 각 부분을 깊이 탐구하며, 이 현대적인 API 개발 도구를 더 잘 익힐 수 있도록 도와드릴 거예요.
하지만 그 전에, 매우 중요한 사전 주제가 하나 남았어요: 바로 예제 프로젝트와 환경 설정이에요. 이것이 우리가 Django Ninja를 배우기 위한 첫걸음이 될 거예요.