-
[Django] django와 django + ddd 의 차이IT 2025. 3. 21. 18:00
개발을 하다보니 Django와 restframework, tdd, ddd 등 여러가지를 볼 수가 있는데 이들의 차이가 뭔지 알아보니다.
Django
일단 Django는 MTV(Model-Template-View) 패턴을 사용하여 빠르게 웹 애플리케이션을 개발하는 것이 목표입니다.
/project_root ├── myapp/ │ ├── models.py # 데이터베이스 모델 │ ├── views.py # 비즈니스 로직 │ ├── urls.py # URL 라우팅 │ ├── templates/ # 템플릿 (HTML) │ ├── static/ # CSS, JS, 이미지 등 │ ├── forms.py # Django Form │ ├── admin.py # Django Admin 설정 │ ├── tests.py # 테스트 코드 ├── manage.py ├── settings.py ├── urls.py ├── wsgi.py
기본 구조는 위와 같습니다.
django의 장점은 쉽고 빠르게 웹 애플리케이션을 개발할 수 있다.
Django ORM을 통해 데이터베이스를 쉽게 다룰 수 있다는 것 입니다.
단점은 비즈니스 로직이 views.py에 집중되기 때문에 복잡한 로직이 섞일 수 가 있고, 앱의 크기가 커질수록 코드가 한 파일에 담기기 때문에 유지보수가 어렵다는 것입니다.
앱의 크기가 커지면 어떻게 관리를 해야할까요?
Django + DDD (Domain-Driven Design)
https://github.com/jdiazromeral/django-ddd
GitHub - jdiazromeral/django-ddd: Django the DDD way
Django the DDD way. Contribute to jdiazromeral/django-ddd development by creating an account on GitHub.
github.com
DDD는 '비즈니스 로직'을 중심으로 설계하는 방식입니다. 이 방식에서는 Django의 기본 구조를 따르지 않고 도메인별로 코드를 분리합니다.
/project_root ├── apps/ │ ├── user/ │ │ ├── domain/ # 핵심 도메인 로직 (엔티티, 값 객체 등) │ │ ├── application/ # 서비스 계층 (비즈니스 로직) │ │ ├── infrastructure/ # DB, 외부 API 연동 │ │ ├── presentation/ # Django View, Serializer │ │ ├── __init__.py │ ├── order/ │ │ ├── domain/ │ │ ├── application/ │ │ ├── infrastructure/ │ │ ├── presentation/ ├── config/ │ ├── settings.py │ ├── urls.py │ ├── wsgi.py ├── manage.py
Django + DDD 개발 방식은 다음과 같습니다.
- 도메인(Entity, Value Object): domain/
- 핵심 비즈니스 로직을 담고 있는 모델
- Django의 models.py가 아니라 순수 Python 클래스로 작성
- 애플리케이션 서비스 (Service Layer): application/
- 복잡한 비즈니스 로직을 처리하는 계층
- views.py 대신 services.py에서 로직을 수행
- 인프라스트럭처 (Infrastructure): infrastructure/
- Django ORM, 외부 API, Redis 등 데이터 관련 처리를 담당
- 프레젠테이션 (Presentation): presentation/
- views.py, serializers.py (Django Rest Framework 사용 가능)
- API 요청을 받아 application 계층에 전달
이 구조의 장점은 비즈니스 로직을 깔끔하게 분리하여 유지보수가 용이하며 도메인 중심의 설계로 확장성이 높다는 장점이 있습니다. 또한, 프레임워크에 의존적이지 않습니다.
하지만 Django의 기본 MTV 패턴보다 구조가 복잡해지는 것과 초기 학습 비용이 증가한다.라는 단점이 있습니다.
비교 항목Django (MTV 패턴)Django + DDD
설계 방식 프레임워크 중심 도메인 중심 비즈니스 로직 views.py에 집중 domain/, application/으로 분리 확장성 앱이 커질수록 유지보수 어려움 확장 가능성이 높음 테스트 프레임워크 종속적 독립적인 도메인 로직 테스트 가능 코드 재사용 Django에 종속적 Django 외에서도 재사용 가능 초기 개발 속도 빠름 상대적으로 느림 그렇기에 Django + DRF + DDD 를 사용하면 비즈니스 로직이 많고 복잡한 프로젝트에서 유지보수성을 높이기 위해 적합합니다.
또한 테스트 단계에서 Django는 API 단위 테스트만 가능하지만, DDD를 사용하면 독립적인 도메인 로직 테스트가 가능하다 라는 장점이 있습니다.
이게 무슨 말이냐면 사용자가 로그인하여 사용할 수 있는 캘린더에 대한 앱을 만든다고 할때,
사용자에 대한 로그인을 수행하지마 않으면 캘린더 읽기 쓰기 수정에 대한 로직 테스트가 불가능합니다.
하지만 DDD를 쓰면 굳이 로그인에 대한 진행을 하지 않아도 그냥 캘린더 읽기 쓰기 수정에 대한 테스트를 간단하게 진행할 수 있다는 것이죠.
'IT' 카테고리의 다른 글
[Flutter] 연산자와 기호들 (0) 2025.03.26 앱 스토어 등록 시 인앱 결제는 필수적일까? (1) 2025.03.21 [Flutter] WidgetsFlutterBinding.ensureInitialized(); 이란? (0) 2025.03.12 Nginx와 Gunicorn (0) 2025.03.06 [NAS] Docker Container 환경변수 파일로 전달하기. (0) 2025.02.27 - 도메인(Entity, Value Object): domain/