기술블로그-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 상태와 파일을 함께 관리해야 합니다! 🚀