728x90
반응형
Django Models 모듈화 마이그레이션 가이드
1. 디렉토리 구조
phrase/
├── models/
│ ├── __init__.py # 모든 모델과 함수 임포트
│ ├── base.py # BaseModel 추상 클래스
│ ├── fields.py # 커스텀 필드들
│ ├── managers.py # 모든 매니저 클래스
│ ├── core.py # RequestTable, MovieTable, DialogueTable
│ ├── user.py # UserSearchQuery, UserSearchResult
│ ├── cache.py # CacheInvalidation
│ ├── signals.py # 신호 처리기
│ └── utils.py # 유틸리티 함수들
├── models.py (삭제 예정)
└── managers.py (삭제 예정)
2. 마이그레이션 단계
Step 1: 백업
# 기존 파일 백업
cp phrase/models.py phrase/models.py.backup
cp phrase/managers.py phrase/managers.py.backup
Step 2: 디렉토리 생성 및 파일 복사
# models 디렉토리 생성
mkdir -p phrase/models
# 새 파일들을 models 디렉토리에 생성
# (위에서 제공한 파일들을 각각 저장)
Step 3: 기존 파일 삭제
# 모든 것이 정상 작동하는지 확인 후
rm phrase/models.py
rm phrase/managers.py
Step 4: 마이그레이션 확인
# 마이그레이션 파일 생성 (변경사항이 없어야 함)
python manage.py makemigrations
# 출력: No changes detected
3. 코드 수정 사항
임포트 경로 변경이 필요한 경우:
# 기존
from phrase.models import MovieTable, DialogueTable
# 변경 후 (동일하게 작동)
from phrase.models import MovieTable, DialogueTable
매니저 임포트:
# 기존
from phrase.managers import MovieManager
# 변경 후
from phrase.models.managers import MovieManager
# 또는
from phrase.models import MovieManager
4. 테스트
Django Shell에서 테스트:
python manage.py shell
# 모델 임포트 테스트
from phrase.models import MovieTable, DialogueTable, RequestTable
from phrase.models import Movie, MovieQuote # 별칭 테스트
# 매니저 테스트
movies = MovieTable.objects.all()
active_movies = MovieTable.active.all()
# 통계 함수 테스트
from phrase.models import get_model_statistics
stats = get_model_statistics()
단위 테스트 실행:
python manage.py test phrase
5. 주의사항
- 순환 임포트 문제:
- signals.py에서는 문자열로 모델을 참조 ('phrase.RequestTable')
- managers.py에서는 apps.get_model() 사용
- 캐시 초기화:
- 모듈화 후 캐시를 한 번 초기화하는 것을 권장
from django.core.cache import cache cache.clear()
- 모듈화 후 캐시를 한 번 초기화하는 것을 권장
- IDE 설정:
- PyCharm이나 VSCode의 임포트 자동완성이 새 구조를 인식하도록 프로젝트 재인덱싱
6. 롤백 방법
문제가 발생한 경우:
# 백업 파일 복원
mv phrase/models.py.backup phrase/models.py
mv phrase/managers.py.backup phrase/managers.py
# models 디렉토리 삭제
rm -rf phrase/models/
7. 추가 최적화 (선택사항)
Admin 파일 분리:
# phrase/admin/
├── __init__.py
├── movie.py
├── dialogue.py
└── request.py
시리얼라이저 분리 (DRF 사용 시):
# phrase/serializers/
├── __init__.py
├── movie.py
├── dialogue.py
└── request.py728x90
반응형
'코딩' 카테고리의 다른 글
| settings 보안 및 캐시 설정 (0) | 2025.07.21 |
|---|---|
| MySQL 초기 설정 & settings 보안 및 캐시 설정 (0) | 2025.07.20 |
| Django Settings Modularization (0) | 2025.07.17 |
| Context Engineering (0) | 2025.07.17 |
| Django Frontend Choice: Alpine.js or Pure Javascript? (0) | 2025.07.15 |