Django 프론트& 백엔드 개발

[Model] Django Migration 개념 정리

Data Jun 2026. 1. 4. 15:06

Django에서 Migration(마이그레이션) 이란
모델(Model)의 변경 이력을 관리하고,
그 변경을 데이터베이스(DB)에 반영하는 시스템
입니다.

 

모델이 바뀔 때마다
Django는 그 변화를 기록해 두었다가
필요한 시점에 DB에 적용합니다.

 

1. Migration을 왜 사용할까?

데이터 구조는 계속 바뀝니다.

  • 필드 추가
  • 필드 삭제
  • 타입 변경

이걸 SQL로 직접 관리하면 매우 위험합니다.
그래서 Django는 ORM 기반의 Migration 시스템을 제공합니다.

Migration =
DB 변경 이력을 차곡차곡 쌓아두는 설계도

 

2. Django Migration 전체 흐름

모델 작성/수정
   ↓
makemigrations (변경 사항 기록)
   ↓
migrate (DB에 실제 반영)

이 흐름은 항상 동일합니다.

 

3. makemigrations

“변경 이력 만들기”

python manage.py makemigrations
  • models.py의 변경 사항을 감지
  • 마이그레이션 파일 생성
  • 아직 DB에는 반영 ❌
foods/migrations/0001_initial.py

 

“이런 테이블을 만들면 됩니다”라는 설계도 생성 단계

 

4. migrate

“DB에 실제 적용하기”

python manage.py migrate
  • 생성된 마이그레이션을 DB에 적용
  • 테이블 생성 / 컬럼 변경 수행
Applying foods.0001_initial... OK

 

이때 실제 DB 구조가 바뀝니다.

 

5. showmigrations

“적용 상태 확인하기”

python manage.py showmigrations

출력 예시:

foods
 [X] 0001_initial
  • [X] : 이미 적용됨
  • [ ] : 아직 적용 안 됨

프로젝트 전체 마이그레이션 상태를 한눈에 확인할 수 있습니다.

 

6. sqlmigrate

“실제 SQL 확인하기”

python manage.py sqlmigrate foods 0001
  • 해당 마이그레이션이
  • 어떤 SQL로 변환되는지 출력

ORM이 실제로 어떤 SQL을 실행하는지
확인하고 싶을 때 매우 유용합니다.

 

7. 정리하면

  • Migration은 모델 변경 이력 관리 시스템
  • makemigrations → 설계도 생성
  • migrate → DB 반영
  • showmigrations → 상태 확인
  • sqlmigrate → 실제 SQL 확인

모델을 바꿨다면
반드시 migration을 거쳐야 DB가 바뀐다

 

Django Migration은
모델 변경을 안전하게 DB에 반영하기 위한
Django만의 버전 관리 시스템이다