마이그레이션

Ryu Honggyu·2024년 8월 14일

Django

목록 보기
6/19

마이그레이션(Migration) 정의

  • Django에서 DB 스키마 (데이터베이스의 구조, 관계 등을 정의한 것) 를 관리하고 버전 관리를 수행하는 도구.

  • Django 모델은 애플리케이션의 데이터 구조를 정의하며, 이 모델에 따라 DB 테이블이 생성됨.

  • 마이그레이션은 모델의 변경 사항 (모델의 필드를 추가, 수정, 삭제할 때 등) 을 DB에 반영하기 위해 사용함.

  • DB 구조와 모델 간의 일관성을 유지할 수 있게 해줌.


마이그레이션 명령어

makemigrations

  • makemigrations: Django 프로젝트에서 모델에 대한 변경 사항을 감지하고, 이를 기반으로 새로운 마이그레이션 파일을 생성하는 명령어.
  • 마이그레이션 파일: 모델의 변경 사항을 기록한 파일. 파이썬 코드로 작성되어 migrations 폴더 내에 배치됨.
$ python manage.py makemigrations

migrate

  • migrate: 생성된 마이그레이션 파일을 실제로 데이터베이스에 적용하는 명령어.
  • 이 명령어를 시행함으로써 상기한 기능인 모델과 DB 간의 일관성을 유지 작업이 진행됨.
$ python manage.py migrate
  • makemigrations 로 생성된 마이그레이션 파일들이 순차적으로 실행되어 데이터베이스에 반영됨.
  • 새로운 테이블이 생성되거나 기존 테이블에 변경이 발생, 관계가 설정되거나 인덱스가 추가되는 등의 변화가 발생.

이전 마이그레이션 목록 확인 및 복구 방법

마이그레이션 목록 확인

  • 마이그레이션에 문제가 발생 시 이전에 실행된 마이그레이션 목록을 확인하고 문제가 발생하기 전의 상태로 롤백할 수 있음.
$ python manage.py showmigrations
  • showmigrations: 생성됐던 모든 마이그레이션 파일 목록 확인. 적용된 마이그레이션은 [X]로 표시되며 적용되지 않은 마이그레이션은 [ ]로 표시됨.
app_name
[X] 0001_initial
[X] 0002_auto_20230801_1234
[X] 0003_add_new_field
[X] 0004_remove_old_field
[X] 0005_update_model_structure
[ ] 0006_modify_existing_field
[ ] 0007_create_new_table
  • 예제의 경우 5번째 마이그레이션 이후부터는 적용이 되지 않았음.

특정 마이그레이션으로 되돌리기

  • migrate <마이그레이션 이름>: 해당 마이그레이션으로 마이그레이션을 되돌림.
  • 상술한 예제에선 문제가 생기기 전인 5번째 마이그레이션으로 롤백하기 위해 다음 명령어를 입력해야함.
$ python manage.py migrate app_name 0005_update_model_structure
  • 위 명령어를 실행하면 데이터베이스는 5번째 마이그레이션으로 롤백, 이후 문제가 발생했던 마이그레이션은 적용 중단.
  • 롤백 후 문제를 해결하고 다시 새로운 마이그레이션을 생성함으로써 마이그레이션을 제대로 적용 가능.
profile
알고리즘 & 웹 & CS & AI

0개의 댓글