Django Ninja란?
Django Ninja - https://github.com/vitalik/django-ninja
Django 기반의 웹 프레임워크로 Python의 FastAPI프레임워크에 영향을 받아 개발되기 시작한 프레임워크로 최근까지도 꾸준히 업데이트가 되고 있으며 Python 3.6+ 이상의 환경에서 Pydantic과 비동기를 지원함
Ninja 장점 및 특징
Django의 장점 및 특징은 다음과 같습니다.
- 가볍게 만들어 볼 수 있음.(Django의 기본 구성을 일부 따르지만 Flask나 Fast API와 유사한 구조를 가짐)
- Pydantic을 wrapping한 Schema를 지원 하여 데이터 검증에 이점 (기존 DRF가 Validation이 느린 점을 보완)
- Type hints가 지원되어, 보다 안정적인 코드를 짤 수 있음
- API Docs 문서 자동 생성 (OpenAPI 형식을 따르며, FastAPI 처럼 Docs가 자동 지원되어 편한 API 테스트 가능)
- Django의 ORM을 그대로 쉽게 사용 가능 (FastAPI는 ORM으로 SqlAlchemy를 사용해야 함)
- Async를 지원함. (지금의 장고는 wsgi 기반에서 sync_to_async 등을 통해 비동기 처리 가능한 수준 링크)
Ninja BoilerPlate
경험적으로 작성한 Boilerplate는 다음과 같다.
App
- 분리 기준 : 서비스 따라
Router
- router 폴더 밑에는 여러 api.py들이 존재
- 하나의 앱에서는 여러 Router(api.py)를 가짐
- api.py를 분리하는 기준은 앱 내에서 논리적인 서비스 단위에 따라
- ex) accounts라는 app 밑에는 user_api.py 와 auth_api.py 가 존재 가능
- api.py 내부는 한 눈에 보일 수 있도록 최대한 간략하게 작성 (Service 모듈 이용)
Service
- 각 api 구현에 필요한 business login 코드가 존재하는 곳
- 주로 ORM을 통한 DB 작업이 이루어지는 곳
- Exception에 대한 커스텀 핸들링도 수행
Schema
- 들어온 Input에 대한 validation 수행
- validation 에러시 Exception에 대한 커스텀 핸들링도 수행
- 나가는 Output에 대한 형태 정의
- 검증 간 발생하는 DB 접근은 분리해도 되고, 분리하지 않아도 됨.
Test
- 테스트 코드 작성 (unit ~ E2E)
Common
- 프로젝트에서 공통적으로 사용되는 파일들 (필요에 따라 폴더 구조도 가능)
- enum : 개발에 필요한 상수 정의
- aws_service : 클라우드와 같은 aws와 관련 된 서비스
- decorator : 데코레이터 모음 (permission 체크 등)
- error handling : 발생하는 에러에 대해, 커스텀하여 내려주는 모듈 (발생하는 상태코드를 우리 서비스에 맞게 내려줄 수 있다.)
소스코드 : 링크
├── project/ // project 폴터
│ ├── __init__.py
│ ├── api.py // url 분리 (router들)
│ ├── asgi.py
│ ├── settings.py
│ ├── urls.py // 최초 url 진입점 (docs, admin, api 등)
│ └── wsgi.py
├── accounts/
│ ├── __init__.py
│ ├── apps.py
│ ├── router/ // router
│ │ ├── user_api.py
│ │ └── auth_api.py
│ ├── service/ // service (business logic)
│ │ ├── user_service.py
│ │ └── auth_service.py
│ ├── schema/ // schema - 필요에 따라 In, Out 스키마 분리
│ │ ├── user_schema.py
│ │ └── auth_schema.py
│ ├── test/ // test code
│ │ ├── test_user.py
│ │ └── test_auth.py
│ └── models.py // models ORM
├── common/ // 개발에 일반적으로(공통적으로) 쓰이는 폴더
│ ├── enum.py
│ ├── aws_service.py
│ ├── decorator.py
│ └── error_handling.py
├── manage.py
├── Dockerfile
└── requirements.txt
'Python > Django Ninja' 카테고리의 다른 글
[Django Ninja] GIS 데이터 처리 관련 정리 (0) | 2023.05.24 |
---|---|
[Django Ninja] 정참조, 역참조 Schema 구현 (0) | 2023.04.29 |
[Django Ninja] 커스텀 Pagination 모듈 구현기 (0) | 2023.04.16 |
[Django Ninja] API Docs에서 Enum 드롭 다운 표시하기 (0) | 2023.04.09 |
[Django Ninja] Schema 비교 (Schema, ModelSchema, CreateSchema) (0) | 2023.02.27 |