
DRY를 위해 Django Manager를 적용해봅시다.
두줄요약
Django Manager와 커스텀 QuerySet으로 반복 ORM 쿼리를 줄이는 방법을 소개했습니다.\ndefault manager의 우선순위와 데이터 누락 위험을 고려한 팀 컨벤션의 필요성을 설명합니다.
구조와 흐름
- Django Model의 데이터베이스 쿼리 인터페이스인 Manager와 기본
objectsManager get_queryset()오버라이드로 활성 사용자 등 반복 조건을 기본 QuerySet으로 캡슐화- 커스텀 QuerySet의
as_manager()와Manager.from_queryset()을 통한 Manager·QuerySet 중복 제거
선택 이유
- 여러 위치에 반복되는 활성 사용자 조회 QuerySet의 DRY 적용
- 별도 함수 공유 대비 Model과 쿼리 로직의 응집도 향상
- 집계 같은 table-level 기능은 Manager 메서드, row-level 기능은 Model 메서드로 분리
주의할 점
- 첫 번째 Manager가 default manager가 되며
dumpdata와 서드파티 동작에 영향 - 필터링된
get_queryset()을 default manager로 지정할 때 백업 데이터 누락 가능성 Meta.default_manager_name우선순위와 Manager 추가에 따른 변경 방지용 컨벤션 필요
적용해볼 점
- 공통 필드를 가진 다수 Model의 Manager 정의에 상속 적용
- 팀 학습·리뷰를 거친 Manager 사용 규칙의 문서화와 버전 관리

