← Notes

Alembic

backend
2분 읽기

Alembic

뭔가

  • SQLAlchemy랑 같이 쓰는 DB 마이그레이션 도구
  • Git이 코드 변경을 추적하듯, DB 스키마 변경 이력을 관리함
  • 테이블 추가/컬럼 수정 등을 파일로 남겨서 팀원끼리 DB 상태 맞춤

기본 명령어

alembic revision --autogenerate -m "설명"  # 변경 감지해서 마이그레이션 파일 생성
alembic upgrade head    # 최신으로 적용
alembic downgrade -1    # 한 단계 롤백
alembic current         # 현재 버전 확인
alembic history         # 전체 이력

마이그레이션 파일 구조

def upgrade():
    op.create_table('user',
        sa.Column('id', sa.Integer(), primary_key=True),
        sa.Column('name', sa.String(50)),
    )

def downgrade():
    op.drop_table('user')
  • upgrade() : 앞으로 적용
  • downgrade() : 되돌리기

주의할 점

  • autogenerate가 다 잡아주진 않음 (타입 변경, view 등은 못 감지) → 생성 후 파일 꼭 확인
  • 팀 작업 시 동시에 마이그레이션 만들면 충돌 남 → alembic merge heads로 해결
  • DB URL은 환경변수로 분리해서 환경별로 다르게 설정

데이터 마이그레이션도 가능

스키마 변경뿐만 아니라 기존 데이터 변환도 파일 안에서 할 수 있음

def upgrade():
    op.add_column('user', sa.Column('full_name', sa.String()))
    op.execute("UPDATE user SET full_name = first_name || ' ' || last_name")
sunshinemoon · 2026