본문 바로가기

코딩

Django Models 모듈화 마이그레이션 가이드

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. 주의사항

  1. 순환 임포트 문제:
    • signals.py에서는 문자열로 모델을 참조 ('phrase.RequestTable')
    • managers.py에서는 apps.get_model() 사용
  2. 캐시 초기화:
    • 모듈화 후 캐시를 한 번 초기화하는 것을 권장
      from django.core.cache import cache
      cache.clear()
  3. 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.py
728x90
반응형