본문 바로가기
Dev./Python

django migrate

by Alx.K 2023. 2. 4.
반응형

마이그레이션 (Migrateion) 이란?

 

장고 공식 문서에서는 마이그레이션이 모델의 변경 내역을 DB * 스키마 에 적용시키는 장고의 방법 이라고 설명하고 있습니다.

장고는 ORM을 사용하기 대문에 models.py 와 클래스를 통해 스키마를 생성하고 컨트롤 하게 되는데,

이 때 DB 스키마를 git처럼 버전으로 나눠서 관리할 수 있게 해주는 시스템이라 생각하시면 됩니다.

즉 하나의 마이그레이션 파일은 해당 마이그레이션이 생성된 시점의 모들의 구조(DB의 스키마)를 담고 있습니다.

 

* 스키마(Schema)란? : DB 내에서 데이터가 저장되는 구조와 제약 조건을 정의한 것. 장고로 치면 하나의 어플리케이션의 models.py파일이라 볼 수 있습니다.

 


migration 관련 명령어

 

1. python manage.py makemmigrations [app_name]

마이그레이션을 생성하는 명령어 입니다.

뒤에 app_name을 입력하면 해당 app 에 대해서만 마이그레이션을 생성하고 app_name을 생략하면 전체 app 에 대하여 마이그레이션을 생성합니다.

app_name을 입력하지 않으면 의도하지 않ㅇ느 마이그레이션이 생성될 수 있으니, 가급적 app_name을 같이 입력하는 것을 권장드립니다.

* 단, 프로젝트 생성 후 처음하는 migrate 작업을 위한 마이그레이션을 생성할 때는 app_name을 생략하셔야 합니다.

 

2. python manage.py migrate [app_name] [migation_name]

마이그레이션을 적용하는 명령어 입니다. 즉 실제 DB에 변경사항을 적용하는 명령어라고 생각하시면 됩니다.

makemigrations 와 같이 app_name을 지정ㅈ해서 특정 app 만 migrate 할 수 있으며 app_name 뒤에 마이그레이션 파일 이름을 지정하면 해당 번호(버전)의 마이그레이션을 적용하게 됩니다. 즉, 이전 버전으로 되돌리는 것도 가능합니다.

 

3. python manage.py showmigrations [app_name]

프로젝트의 마이그레이션에 대해 적용 여부를 한 눈에 보여줍니다.

app_name을 지정하면 해당 앱에 대해서만 보여지며,

app_name을 생략하면 전체 앱애 대해 보여주게 됩니다.

 

4. python manage.py sqlmigrate app_name migration_name

해당 마이그레이션 파일이 어떤 SQL 구문으로 실행되는지 보여줍니다.

실제 마이그레이션을 실행하지는 않습니다.

보통 디버깅용이나 어떤 구문이 들어가는지 확인해야 할 때 사용합니다.

 


주의점

 

적용된 마이그레이션 파일은 절대로 삭제하시면 안됩니다.

각 마이그레이션은 이전 버전에 대해 의전성을 가지기 때문에 DB 전체가 돌아올 수 없는 강을 건널 수도 있습니다.

마이그레이션 파일을 삭제하렴녀 반드시 적용을 해제하고 삭제하셔야 합니다.

 

001 _initial

002 _auto_....

 

이렇게 두개의 마이그레이션 파일이 있고, 0002가 migrate 된 상황이고, 0002 마이그레이션 파일을 삭제하고 싶다면

 

1. python manage.py migrate app_name 0001

 > 명령어로 이전 버전으로 적용시킨 후 삭제

2. python manage.py migrate app_name zero

 > 명령어로 마이그레이션을 초기화 시킨 후 삭제

 

둘 중 하나의 절차를 거친 후 삭제하셔야 합니다.

물론 DB 전체를 날려도 되는 상황이라면 그냥 마이그레이션 파일을 다 날리고, DB도 날리면 되지만,

그게 아니라면 반드시 위의 절차를 준수하시기 바랍니다.

 

DB 데이터가 중요한 상황이라면,

강이 아니라 저세상을 갈 수도 있습니다.

반응형

'Dev. > Python' 카테고리의 다른 글

파이썬 일자 관련 옵션들  (0) 2023.03.08
파이썬 post 일자 입력 체크 관련  (0) 2023.03.08
Django Start app  (0) 2023.01.20
django project settings.....  (0) 2023.01.11
Python & Django - startproject  (0) 2023.01.08