만약 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