마이그레이션 파일은 데이터베이스 스키마 변경 이력을 기록하는 Python 파일입니다. 쉽게 말해 "데이터베이스를 어떻게 변경할지" 적어놓은 설명서예요.
왜 필요한가?
예를 들어 이런 상황을 생각해보세요:
# models.py - 처음
class Place(models.Model):
name = models.CharField(max_length=100)
이걸 데이터베이스에 만들려면:
CREATE TABLE places_place (
id BIGINT PRIMARY KEY,
name VARCHAR(100)
);
나중에 모델을 수정하면:
# models.py - 수정 후
class Place(models.Model):
name = models.CharField(max_length=100)
address = models.TextField() # 새로 추가!
데이터베이스도 바꿔야겠죠:
ALTER TABLE places_place ADD COLUMN address TEXT;
문제는: 매번 이런 SQL을 직접 작성하고 실행하기 번거롭고, 팀원들도 똑같이 해줘야 합니다.
마이그레이션 파일의 역할
Django가 자동으로 이런 변경사항을 Python 코드로 만들어줍니다:
# migrations/0001_initial.py
class Migration(migrations.Migration):
operations = [
migrations.CreateModel(
name='Place',
fields=[
('id', models.BigAutoField(primary_key=True)),
('name', models.CharField(max_length=100)),
],
),
]
# migrations/0002_add_address.py
class Migration(migrations.Migration):
dependencies = [
('places', '0001_initial'), # 이전 마이그레이션에 의존
]
operations = [
migrations.AddField(
model_name='place',
name='address',
field=models.TextField(),
),
]
실제 예시
프로젝트 구조는 이렇게 됩니다:
backend/
├── apps/
│ └── places/
│ ├── models.py # 모델 정의
│ └── migrations/ # 👈 여기에 마이그레이션 파일들
│ ├── __init__.py
│ ├── 0001_initial.py # 첫 번째: 테이블 생성
│ ├── 0002_add_address.py # 두 번째: 컬럼 추가
│ └── 0003_add_rating.py # 세 번째: 또 다른 변경
장점
- 버전 관리: Git으로 데이터베이스 변경 이력 추적 가능
- 자동화: SQL 직접 작성 안 해도 됨
- 이식성: PostgreSQL, MySQL, SQLite 등 어떤 DB든 동일한 파일 사용
- 협업: 팀원들이 python manage.py migrate 한 번으로 동기화
- 되돌리기: 이전 상태로 롤백 가능
워크플로우
# 1. models.py 수정
# (예: Place 모델에 phone_number 필드 추가)
# 2. 마이그레이션 파일 생성
python manage.py makemigrations
# → migrations/0004_add_phone_number.py 자동 생성
# 3. 데이터베이스에 적용
python manage.py migrate
# → 실제 DB 테이블에 phone_number 컬럼 추가됨
즉, 코드(models.py)와 데이터베이스를 동기화하는 다리 역할을 합니다!
'Tech' 카테고리의 다른 글
| Node.js와 React.js, Vue.js와 차이는? (0) | 2025.10.02 |
|---|---|
| cloudflared tunnel 명령어 백서 (0) | 2025.08.31 |
| AhnLab Safe Transaction 에서 원격 접속 허용 설정하기 (2) | 2025.08.09 |
| [ssh] 윈도우에서 ssh 접속 시 publickey 에러 해결 (WARNING: UNPROTECTED PRIVATE KEY FILE!) (3) | 2025.08.05 |
| [Docker]watchtower - Docker 컨테이너를 모니터링하고 자동으로 최신 이미지로 업데이트해주는 도구 (3) | 2025.08.04 |

















