[파이썬] Pyramid에서의 데이터베이스 마이그레이션

데이터베이스 마이그레이션이란 소프트웨어의 버전 업데이트나 구조적인 수정이 있을 때, 기존 데이터베이스 스키마를 새로운 스키마로 변환하는 작업입니다. 이는 데이터베이스의 일관성과 안정성을 유지하면서 애플리케이션을 업데이트하는 중요한 단계입니다. 이번 글에서는 Python 웹 프레임워크인 Pyramid에서 데이터베이스 마이그레이션 작업을 수행하는 방법에 대해 알아보겠습니다.

데이터베이스 마이그레이션 라이브러리 선택하기

Pyramid에서는 다양한 데이터베이스 마이그레이션 도구를 사용할 수 있습니다. 가장 널리 사용되는 도구 중 하나는 Alembic입니다. Alembic은 Python 기반의 경량화된 마이그레이션 라이브러리로 SQLAlchemy와 통합되어 있습니다.

다음은 alembic 패키지를 설치하는 명령어입니다:

pip install alembic

데이터베이스 설정하기

먼저, Pyramid 프로젝트에서 SQLAlchemy를 설정해야 합니다. 보통 development.ini 파일에 데이터베이스 설정을 작성합니다. 아래는 데이터베이스 설정 예시입니다:

[app:main]
...
sqlalchemy.url = postgresql://username:password@localhost/dbname

Alembic의 초기 설정

Alembic을 사용하기 위해서는 초기 설정 과정이 필요합니다. 프로젝트 루트 디렉토리에서 다음 명령어를 실행해 초기 설정을 생성합니다:

alembic init alembic

이 명령어를 실행하면 alembic 디렉토리와 alembic.ini 파일이 생성됩니다.

마이그레이션 스크립트 작성

alembic.ini 파일에서 데이터베이스 연결 설정을 변경해야 합니다. sqlalchemy.url 값을 development.ini 파일에 작성한 값으로 수정합니다.

alembic/env.py 파일에서 Alembic 스크립트 실행을 위한 SQLAlchemy 설정을 수정해야 합니다. run_migrations_online 함수의 config 매개변수를 아래와 같이 수정합니다:

from pyramid.paster import (
    get_appsettings,
    setup_logging,
)

from alembic import context

# ...

def run_migrations_online(config, options=None):
    settings = get_appsettings(config.filename)

    configuration = context.config
    configuration.set_main_option('sqlalchemy.url', settings['sqlalchemy.url'])
    # ...

이제 마이그레이션 스크립트를 작성할 준비가 되었습니다. alembic/versions 디렉토리에 마이그레이션 스크립트를 생성합니다. 예를 들어, 001_initial_migration.py라는 스크립트를 작성하고 다음과 같이 구성할 수 있습니다:

from alembic import op
import sqlalchemy as sa


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


def downgrade():
    op.drop_table('users')

마이그레이션 스크립트에서는 upgrade 함수와 downgrade 함수를 작성합니다. upgrade 함수는 데이터베이스를 업그레이드하는 작업을 수행하고, downgrade 함수는 데이터베이스를 다운그레이드하는 작업을 수행합니다.

마이그레이션 실행

마이그레이션 스크립트를 작성한 후에는 마이그레이션을 실행해야 합니다. 다음 명령어를 실행해 마이그레이션을 수행합니다:

alembic upgrade head

위 명령어는 versions 디렉토리에 있는 모든 마이그레이션 스크립트를 순차적으로 실행합니다. 데이터베이스가 최신 상태가 되도록 업그레이드 작업을 수행합니다.

마무리

Pyramid에서의 데이터베이스 마이그레이션은 Alembic과 SQLAlchemy의 강력한 조합을 통해 간편하게 수행할 수 있습니다. 이를 통해 애플리케이션의 데이터베이스 스키마를 업데이트하면서 안정성을 유지할 수 있습니다. 데이터베이스 마이그레이션은 애플리케이션의 성장과 유지보수를 위한 중요한 과정이므로, 꼭 익혀두시기 바랍니다.