[python] FastAPI에서 데이터베이스 마이그레이션 자동화하기

소개

FastAPI는 파이썬으로 작성된 빠르고 간단한 웹 프레임워크입니다. 이 프레임워크를 사용하여 데이터베이스를 조작하는 애플리케이션을 만들 때, 데이터베이스 스키마 변경 및 마이그레이션을 관리하는 것이 중요합니다. 이를 위해 데이터베이스 마이그레이션 도구를 사용하여 변경된 스키마를 관리할 수 있습니다.

여기서는 FastAPI 애플리케이션에서 데이터베이스 마이그레이션을 자동화하기 위해 Alembic 도구를 사용하는 방법을 알아보겠습니다.

Alembic

Alembic은 SQLAlchemy 기반의 데이터베이스 마이그레이션 도구입니다. Alembic을 사용하면 데이터베이스 스키마 변경 내용을 버전 관리하고, 새로운 마이그레이션 스크립트를 생성하여 적용할 수 있습니다.

FastAPI에서 Alembic 설정하기

먼저, 프로젝트 루트 디렉토리에 alembic.ini 파일을 생성하고 다음과 같이 설정합니다:

[alembic]
script_location = alembic
sqlalchemy.url = DATABASE_URL

[alembic:alembic]
use_schema = False

script_location은 마이그레이션 스크립트를 생성할 디렉토리를 지정합니다. sqlalchemy.url은 데이터베이스 URL을 설정합니다. 이 URL은 FastAPI의 DATABASE_URL 환경 변수와 동일해야 합니다.

그리고 다음과 같이 alembic 디렉토리를 생성합니다:

$ mkdir alembic
$ cd alembic

alembic.ini 파일에 설정한 디렉토리와 동일한 이름의 디렉토리를 생성하고, env.py 파일과 versions 디렉토리를 생성합니다.

마이그레이션 스크립트 생성하기

env.py 파일을 다음과 같이 수정하여 마이그레이션 스크립트를 생성할 수 있습니다:

from logging.config import fileConfig

from sqlalchemy import engine_from_config
from sqlalchemy import pool

from alembic import context

# FastAPI의 데이터베이스 연결 설정 가져오기
from app.db import engine

# SQLAlchemy 모델 가져오기
from app.models import Base

# Alembic 설정 파일의 config 파싱
config = context.config

# SQLAlchemy 세션을 Alembic config에 추가
config.set_main_option("sqlalchemy.url", engine.url)

# Alembic 버전 관리용 테이블 생성
# Base.metadata는 SQLAlchemy 모델의 메타데이터
# create_all 메서드로 테이블 생성
Base.metadata.create_all(bind=engine)

# Alembic 스크립트의 풀링 설정
config.attributes['configure_logger'] = False
fileConfig(config.config_file_name)

# Alembic 버전 관리 및 마이그레이션 스크립트 생성
with context.begin_transaction():
    context.run_migrations()

위의 코드에서 app.db는 FastAPI 애플리케이션에서 데이터베이스 연결을 설정한 모듈을 가져온 것입니다. app.models는 SQLAlchemy 모델을 가져온 것으로, Base.metadata.create_all(bind=engine)를 통해 모델에 정의된 테이블을 생성합니다.

마이그레이션 스크립트 생성 및 적용

마이그레이션 스크립트는 다음과 같이 생성할 수 있습니다:

$ alembic revision --autogenerate -m "migration message"

위의 명령어를 실행하면 alembic/versions 디렉토리에 마이그레이션 스크립트 파일이 생성됩니다. 이후에는 변경된 스키마를 데이터베이스에 적용할 수 있습니다:

$ alembic upgrade head

위의 명령어를 실행하면 최신 버전의 마이그레이션 스크립트까지 순차적으로 실행됩니다.

마무리

FastAPI에서 데이터베이스 마이그레이션을 자동화하는 방법에 대해 알아보았습니다. Alembic을 사용하여 변경된 스키마를 관리하고 마이그레이션 스크립트를 생성하여 적용할 수 있습니다. 이를 통해 데이터베이스 변경을 더욱 쉽고 안전하게 관리할 수 있습니다.

참고 자료