기술블로그-Django편
✅ 특정 마이그레이션으로 되돌리기 (migrate 앱명 마이그레이션번호)
Chansman
2025. 5. 13. 11:14
🔄 Django 마이그레이션 롤백과 파일 삭제 완전 정리!
Django에서 makemigrations와 migrate로 진행한 작업을 되돌리고 싶을 때, 즉 "롤백"할 수 있는 다양한 방법과 주의사항을 정리해드립니다.
✅ 1. 특정 마이그레이션으로 되돌리기
python manage.py migrate <앱이름> <마이그레이션번호>
예시:
python manage.py migrate blog 0002
👉 blog 앱을 0002 상태로 되돌림
→ 0003, 0004 등 이후 마이그레이션은 적용 해제됨
✅ 2. 완전히 초기 상태로 되돌리기 (모든 마이그레이션 제거)
python manage.py migrate <앱이름> zero
예시:
python manage.py migrate blog zero
👉 blog 앱에서 생성된 모든 테이블 삭제
⚠️ 데이터도 함께 삭제되니 반드시 백업 필요!
✅ 3. 마이그레이션 파일 자체 삭제하기
👉 makemigrations만 하고 migrate를 하지 않았다면:
rm blog/migrations/0002_*.py
그 후 다시:
python manage.py makemigrations
💡 주의: 이미 migrate로 적용된 상태라면 먼저 롤백한 후 파일 삭제 필요!
✅ 4. 마이그레이션 적용 이력 확인하기
python manage.py showmigrations blog
출력 예시:
[ ] 0001_initial
[X] 0002_add_author_field
[X] 0003_add_title_max_length
☑️ 체크 표시 = 적용된 마이그레이션
→ 현재 DB 상태 확인 가능
🧠 Git 비유로 정리하면?
Git 명령어 Django 마이그레이션 명령 설명
git revert <commit> | migrate 앱명 <버전> | 특정 시점으로 안전하게 복원 |
git reset --hard | migrate 앱명 zero | 모든 변경 제거 |
git log | showmigrations | 버전/기록 확인 |
git rm | 마이그레이션 파일 수동 삭제 | 파일 삭제 시 조심해야 함 |
❗ 마이그레이션 파일 삭제 주의사항
✅ 롤백 후 삭제는 가능
python manage.py migrate blog 0002
rm blog/migrations/0003_*.py
→ 안전하게 적용 해제 후 파일 삭제
❌ 파일만 삭제하면?
rm blog/migrations/0003_*.py
→ showmigrations에는 [X]로 남아 있고,
→ 이후 migrate, makemigrations에서 오류 발생 가능!
("No such migration", "Inconsistent history")
✅ 안전한 마이그레이션 롤백 순서
순서 설명
1️⃣ | migrate 앱명 <버전>으로 롤백 |
2️⃣ | 해당 마이그레이션 파일 수동 삭제 |
3️⃣ | makemigrations로 새로운 변경 생성 |
4️⃣ | migrate로 최종 적용 |
💡 실전 꿀팁
- 팀 프로젝트에서는 파일 삭제보다 새로운 마이그레이션 생성 권장
- 혼자 실습하는 경우에는 위 순서대로 삭제해도 OK
- 중요한 데이터는 반드시 백업하고 시도할 것!
✅ 결론 정리
상황 안전 여부 설명
롤백 후 파일 삭제 | ✅ 가능 | migrate로 상태를 되돌렸다면 안전하게 삭제 가능 |
파일만 삭제 | ❌ 위험 | DB에는 적용된 상태가 남아 있어 충돌 발생 가능 |
Django 마이그레이션을 안전하게 관리하려면 항상 DB 상태와 파일을 함께 관리해야 합니다! 🚀