[Django] migration이란?

Yeshin Lee
3 min readMay 1, 2022

--

Django 강의를 보면 초반에 나오는 개념 중 하나가 migration입니다. 프로젝트 진행 중에 이 개념을 제대로 이해하지 못해 DB를 통째로 날릴 뻔한 적이 있습니다. 그동안 익숙하게 사용했던 migration이 어떻게 동작하는지 알아보겠습니다.

사전적 의미의 migration은 ‘이주’를 의미합니다. 공식 문서에서는 ‘모델에 대한 변경 사항(필드 추가, 모델 삭제 등)을 데이터베이스 스키마에 전파하는 방법’라고 합니다. 즉, 데이터베이스에 모델의 변경 사항을 적용하기 위해 사용됩니다. 참고로 스키마(Schema)는 데이터 베이스 내의 데이터 구조라고 생각하시면 됩니다.

You should think of migrations as a version control system for your database schema.

migration의 명령어와 workflow 입니다.

  • migrate : migration을 적용하거나 혹은 적용을 취소합니다.
  • makemigrations : 모델의 변경 사항을 기반으로 새로운 migration을 만듭니다.
  • sqlmigrate : migration을 위한 SQL문을 보여줍니다.
  • showmigrations : 프로젝트의 migration 및 해당 상태를 보여줍니다.
  1. 필드를 추가하거나 지우는 등 model 을 변경합니다. 0003_auto.py를 열어보면 모델의 변경사항을 확인할 수 있습니다.
$ python manage.py makemigrations
Migrations for 'books':
books/migrations/0003_auto.py:
- Alter field author on book

2. 새로운 migration 파일이 만들어지면, 데이터베이스에 해당 파일을 적용합니다. migration이 적용되면, migration을 commit하고 모델 변경 사항을 단일 commit 으로 버전 관리 시스템에 적용합니다.

$ python manage.py migrate
Operations to perform:
Apply all migrations: books
Running migrations:
Rendering model states... DONE
Applying books.0003_auto... OK

3. 만약, migration의 이름을 지정하고 싶다면 다음과 같이 입력할 수 있습니다.

python manage.py makemigrations --name [changed_my_model] [your_app_label]

--

--

Yeshin Lee
Yeshin Lee

No responses yet