데이터베이스 기초집LESSON 17
마이그레이션과 Alembic 기반 스키마 변경
난이도초급 → 중급
예상 시간35분
선수지식이전 강의
17강. 마이그레이션과 Alembic 기반 스키마 변경
1. 이번 강의에서 해결할 문제
운영 DB를 삭제하고 새 모델로 다시 만들 수는 없습니다. 현재 데이터와 이전 애플리케이션을 고려해 스키마 변경을 버전 파일로 남기고 단계적으로 배포합니다.
2. 학습 목표
3. 핵심 개념
Alembic은 현재 DB 스키마와 SQLAlchemy MetaData를 비교해 변경 후보 리비전을 생성합니다. autogenerate는 초안 생성 도구이며 이름 변경, 데이터 이행, DB별 잠금 영향까지 판단하지 않습니다. 배포 호환성이 필요하면 새 구조 추가, 데이터 채우기, 코드 전환, 이전 구조 제거를 여러 리비전으로 나눕니다.
4. 단계별 예시
파일 경로: C:\dev\game-ranking-service\alembic\versions\20260729_add_region.py
alembic/versions/20260729_add_region.py
from alembic import op
import sqlalchemy as sa
revision = "20260729_add_region"
down_revision = "20260728_initial_schema"
branch_labels = None
depends_on = None
def upgrade() -> None:
op.add_column(
"games",
sa.Column("server_region", sa.String(length=12), nullable=True),
schema="ranking",
)
op.execute("UPDATE ranking.games SET server_region = 'ap-northeast' WHERE server_region IS NULL")
op.alter_column("games", "server_region", nullable=False, schema="ranking")
def downgrade() -> None:
op.drop_column("games", "server_region", schema="ranking")
PowerShell · 생성, 검토, 테스트 DB 적용
alembic revision --autogenerate -m "add server region"
alembic check
alembic upgrade head
alembic current
5. 동작 원리
alembic_version 테이블은 현재 적용된 리비전을 기록합니다. upgrade는 부모 리비전부터 순서대로 실행됩니다. 새 열을 nullable로 추가한 뒤 기존 행을 채우고 NOT NULL로 강화하면 데이터가 있는 테이블에서도 규칙을 만족시킬 수 있습니다. 생성 파일을 커밋해 모든 환경이 같은 이력을 공유합니다.
6. 자주 하는 실수와 해결법
7. 직접 실습
8. 이해 점검 질문 3개
9. 핵심 요약
MINI QUIZ
0 / 2마이그레이션과 Alembic 기반 스키마 변경 미니 퀴즈
선택 즉시 정답과 해설을 확인할 수 있습니다. 결과는 이 브라우저에만 저장됩니다.
LESSON STATUS
17강. 마이그레이션과 Alembic 기반 스키마 변경 미완료 상태학습을 마쳤나요?
직접 실습과 점검 질문까지 확인한 뒤 완료로 표시하세요.