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 애플리케이션에서 데이터베이스 마이그레이션을 활용해 보세요!
'Python > Python Flask' 카테고리의 다른 글
Flask와 폼 처리 기법: 폼 유효성 검사 및 사용자 입력 처리 (0) | 2025.09.05 |
---|---|
Flask와 폼 처리 기법: Flask-WTF 사용하기 (0) | 2025.09.04 |
Flask-SQLAlchemy 소개 및 사용법 (0) | 2025.09.02 |
Flask Jinja2 템플릿 상속으로 템플릿 구조화하기 (0) | 2025.08.31 |
Flask Jinja2 템플릿: 변수 및 필터 사용법 (0) | 2025.08.30 |