본문으로 건너뛰기
데이터베이스 기초집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

마이그레이션과 Alembic 기반 스키마 변경 미니 퀴즈

선택 즉시 정답과 해설을 확인할 수 있습니다. 결과는 이 브라우저에만 저장됩니다.

0 / 2
  1. 문제 1“마이그레이션과 Alembic 기반 스키마 변경”에서 혼동하기 쉬운 개념을 올바르게 연결한 것은 무엇인가요?
  2. 문제 2‘운영 DB에서 downgrade를 복구 수단으로만 믿음’ 실수를 판단할 때 “마이그레이션과 Alembic 기반 스키마 변경” 강의가 제시한 기준은 무엇인가요?
LESSON STATUS

학습을 마쳤나요?

직접 실습과 점검 질문까지 확인한 뒤 완료로 표시하세요.

17강. 마이그레이션과 Alembic 기반 스키마 변경 미완료 상태