며칠 전 부터 내 모델의 변경사항이 실데이터베이스에 반영이 안된다는 걸 깨달았다.
로컬에서는 잘 되는데 왜 실데이터베이스에서는 안될까?
이유는 migration 파일들에 있었다.
우선, 난 migration 파일이 너무 많아지는게 싫어서 gitignore에 넣어놓고 실배포와 로컬의 migration 파일을 따로 관리한다.
그런데 이 경우 가끔 알 수 없는 이유로 로컬의 migration 파일들이 실서버로 옮겨갈 때가 있다.
.....
아마도 이미 깃에 올라가 있어서?
뭐 어쨌든, 그런 일이 생기면 migration history가 엉키기 때문에 여러 에러가 나온다. 그럴때마다 migration 파일들을 쭉 삭제하고 다시 migrate 했는데 여기서 문제가 생긴 것이다.
0001_initial를 만들 때에는 기존의 데이터베이스를 크게 바꾸는 것 같지가 않다. 필드 이름과 필드 타입 모두 바뀌지 않는다(새로운 필드 추가 정도는 되는 것 같다). 그러니 코드베이스의 필드로직과 데이터베이스에서 받는 필드의 필드가 어긋나게 되고 그렇게 서버장애가 발생하게 된다.
이럴 땐 문제가 되는 필드를 0001_initial에서 다른 것으로 바꿔놓고 한번 더 migration하면 해당 필드를 감지해서 바꿔줄 수 있다.
하지만 기본적으로 migration history가 엉키지 않도록 하는게 우선이다. 그러니까 내 질문은 두개다:
1. 왜 자꾸 migration file들이 딸려갈까?
2. 왜 0001_initial의 사항들은 실데이터베이스에 모두 적용이 안될까?