Django 공식 문서에 보면 이렇게 나와있다.

migrate은 마이그레이션을 반영하거나 반영하지 않기 위해 사용합니다.
> 원문 : migrate, which is responsible for applying and unapplying migrations.
makemigrations는 모델을 변경한 것에 기반한 새로운 마이그레이션을 만들 때 사용합니다.
> 원문 : makemigrations, which is responsible for creating new migrations based on the changes you have made to your models.
sqlmigrate은 마이그레이션을 위한 SQL 구문을 보기 위해 사용합니다.
> 원문 : sqlmigrate, which displays the SQL statements for a migration
showmigrations는 프로젝트 전체의 마이그레이션과 각각의 상태를 나열하기 위해 사용합니다.
> 원문 : showmigrations, which lists a project’s migrations and their status.

다시 간단하게 적으면 다음과 같다.

  • makemigrations : models.py에서 적용한 변경사항이나 추가된 혹은 삭제된 사항들을 감지하여 파일로 생성
  • migrate : 적용되지 않은 migrations들을 적용시키는 역할
- makemigration 이후에는 migration 폴더를 확인하는 것이 좋다.
  - DB는 중요하기 떄문에 수정된 부분을 확인하는 것은 중요!
- makemigrations [appname] 처럼 app 이름을 명시하는 것이 좋다 (예상치 못한 사고를 방지)
- showmigration를 통해 적용 상태를 조회할 수 있다.
- 실제 DB에는 sql 쿼리로 전달이 된다.
  - migration 파일은 쿼리가 아니다. 따라서 sqlmigrate 명령을 통해 sql로도 확인하는 습관이 필요하다.
- 이미 적용한 migration 파일은 지우면 안된다.
- no such table, column 등의 오류는 migration 관련 문제다.