Python/Python Flask

Flask 데이터베이스 마이그레이션 관리

임베디드 친구 2025. 9. 3. 19:59
728x90
반응형

Flask 데이터베이스 마이그레이션 관리

Flask는 가벼운 웹 애플리케이션 프레임워크이지만, 데이터베이스 마이그레이션과 같은 복잡한 작업을 쉽게 처리할 수 있는 강력한 도구를 제공합니다. 오늘은 Flask에서 데이터베이스 마이그레이션 관리를 어떻게 설정하고 활용할 수 있는지 살펴보겠습니다.

1. Flask-Migrate 소개

Flask-Migrate는 Alembic을 기반으로 하여 Flask 애플리케이션에서 데이터베이스 마이그레이션을 간편하게 관리할 수 있게 해주는 확장입니다. 이를 통해 데이터베이스 스키마 변경 사항을 효율적으로 관리할 수 있습니다.

2. 사전 준비

필요한 패키지 설치

Flask-Migrate를 사용하려면 다음 패키지를 설치해야 합니다:

pip install flask flask-sqlalchemy flask-migrate

기본 Flask 애플리케이션 생성

app.py라는 파일을 생성하고 다음과 같이 작성합니다:

from flask import Flask
from flask_sqlalchemy import SQLAlchemy

app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///example.db'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False

db = SQLAlchemy(app)

class User(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(80), nullable=False)
    email = db.Column(db.String(120), unique=True, nullable=False)

    def __repr__(self):
        return f'<User {self.username}>'

if __name__ == "__main__":
    app.run(debug=True)

위 코드는 기본적인 Flask와 SQLAlchemy 설정을 포함하고 있습니다. 데이터베이스 URI는 SQLite를 사용하도록 설정했습니다.

3. Flask-Migrate 설정

Flask-Migrate 초기화

애플리케이션에 Flask-Migrate를 추가합니다:

from flask_migrate import Migrate

migrate = Migrate(app, db)

마이그레이션 환경 초기화

터미널에서 다음 명령어를 실행하여 마이그레이션 환경을 초기화합니다:

flask db init

이 명령은 migrations 디렉터리를 생성합니다. 이 디렉터리는 마이그레이션 스크립트를 저장하는 데 사용됩니다.

4. 데이터베이스 마이그레이션 작업

모델 변경 사항 생성

User 모델에 새로운 필드를 추가해 보겠습니다. 예를 들어 age 필드를 추가한다고 가정합니다:

class User(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(80), nullable=False)
    email = db.Column(db.String(120), unique=True, nullable=False)
    age = db.Column(db.Integer, nullable=True)  # 새로운 필드 추가

    def __repr__(self):
        return f'<User {self.username}>'

이제 변경된 내용을 반영하기 위한 마이그레이션 스크립트를 생성합니다:

flask db migrate -m "Add age column to User model"

위 명령은 migrations/versions 디렉터리에 새로운 마이그레이션 파일을 생성합니다. 생성된 파일을 열어보면 Alembic이 자동으로 생성한 변경 사항이 포함되어 있습니다.

변경 사항 적용

다음 명령어를 실행하여 변경 사항을 데이터베이스에 적용합니다:

flask db upgrade

이 명령은 데이터베이스에 age 열을 추가합니다.

5. 데이터베이스 마이그레이션 관리 명령어

Flask-Migrate는 다음과 같은 명령어를 제공합니다:

  • flask db init: 마이그레이션 환경 초기화
  • flask db migrate -m "메시지": 모델 변경 사항에 대한 마이그레이션 스크립트 생성
  • flask db upgrade: 마이그레이션 적용
  • flask db downgrade: 이전 마이그레이션으로 롤백
  • flask db history: 마이그레이션 기록 확인

6. 마이그레이션 실습 예제

User 모델 확장하기

이번에는 User 모델에 프로필 사진 URL(profile_pic) 필드를 추가해 보겠습니다:

class User(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(80), nullable=False)
    email = db.Column(db.String(120), unique=True, nullable=False)
    age = db.Column(db.Integer, nullable=True)
    profile_pic = db.Column(db.String(200), nullable=True)  # 새로운 필드 추가

    def __repr__(self):
        return f'<User {self.username}>'

마이그레이션 명령 실행:

flask db migrate -m "Add profile_pic column to User model"

변경 사항 적용:

flask db upgrade

결과 확인

SQLite 데이터베이스를 확인하면 User 테이블에 profile_pic 열이 추가된 것을 확인할 수 있습니다. SQLite 브라우저 또는 Flask-SQLAlchemy를 사용하여 데이터 확인이 가능합니다.

7. 마이그레이션 관리 시 주의 사항

  • 마이그레이션 파일 관리: 생성된 마이그레이션 파일은 프로젝트 버전에 따라 관리해야 합니다. 불필요한 파일은 삭제하지 않도록 주의하세요.
  • 데이터 백업: 중요한 데이터가 있다면 마이그레이션 전 반드시 데이터베이스 백업을 수행하세요.
  • 테스트 환경 사용: 마이그레이션을 프로덕션에 적용하기 전에 테스트 환경에서 충분히 테스트하세요.

결론

Flask-Migrate를 사용하면 데이터베이스 스키마를 유연하게 관리할 수 있습니다. 오늘 설명한 내용을 기반으로 Flask 애플리케이션에서 데이터베이스 마이그레이션을 활용해 보세요!

반응형