
만약 books 앱에 authors 앱에 대한 Forien Key를 추가하면 이에 따른 books의 migration은 authors에 대한 의존성을 갖게 된다.
그렇기 때문에, migrations 명령을 실행할 경우 authors 마이그레이션이 먼저 실행되어야 Foreign key가 참조하는 테이블이 생성되고 그 다음 books의 Foreign Key 열을 만드는 migration이 실행되어 제약 조건이 생성 되는 것이다.
만약 이 순서에 의해 생성되지 않는다면 migration은 테이블 없이 Foreign Key를 생성하려 할 것이며 이 경우 데이터베이스에 에러가 발생하게 된다.
이것이 바로 Migration의 의존성이다.
마이그레이션은 version control에 저장되기 때문에 git 처럼 가끔씩 충돌 상황이 발생할 때가 있다.
예를 들어, 내가 migration을 A 앱에 생성했는데 다른 개발자도 나와 동시에 A 앱에 migration을 생성했다면 두 migration이 동일한 번호를 갖게 되는 경우가 생길 수 있다. 이 때 충돌이 일어나게 되는 것이다.
마이그레이션은 여기에서 migrations 디렉토리에 온디스크 형식으로 저장 된다. 이 파일은 일반적인 파이썬 파일이며 그 내용은 declarative(선언적) 스타일로 작성되어 합의된 객체 레이아웃이라 볼 수 있다.
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [('migrations', '0001_initial')]
operations = [
migrations.DeleteModel('Tribble'),
migrations.AddField('Author', 'rating', models.IntegerField(default=0)),
]
여기서 중요한 것은, Django가 마이그레이션 파일(Python 모듈로)을 로드할 때 찾는 것은 Migration이라는 django.db.migrations.Migration의 하위 클래스라는 것이다. 그 다음 장고는 이 객체에서 4개의 속성을 검사하는데 일반적으로는 그 중 2개만 사용된다.
참고
장고 docs