마이그레이션 (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 |