Flask-Migrate로 SQLAlchemy 마이그레이션 쉽게 하기
안녕하세요! 오늘은 Flask 애플리케이션에서 SQLAlchemy를 이용해 데이터베이스 마이그레이션을 쉽게 할 수 있도록 도와주는 Flask-Migrate에 대해 소개해드릴게요. 데이터베이스 마이그레이션은 팀 작업을 원활하게 하고, 스키마 변경을 추적하며, 배포 시 용이성을 높여주는 중요한 작업이랍니다.
Flask-Migrate 장점
- 스키마 변경의 추적
- 팀 작업 용이
- 배포 용이성
- 데이터 손실 방지
초기 설정
먼저 Flask와 필요한 확장들을 설치하고, 간단한 애플리케이션을 설정해볼게요.
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from flask_migrate import Migrate
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql+pymysql://root:password@localhost/dbname'
db = SQLAlchemy(app)
class User(db.Model):
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(80), unique=True, nullable=True)
email = db.Column(db.String(120), unique=True, nullable=True)
def __repr__(self):
return '<User %r>' % self.username
migrate = Migrate(app, db)
위와 같이 Flask 애플리케이션과 SQLAlchemy, 그리고 Flask-Migrate를 설정해줍니다.
마이그레이션 초기화
이제 마이그레이션을 초기화해볼게요. 터미널에서 아래 명령어를 실행해 주세요.
flask db init
이 명령어를 실행하면 migrations
라는 폴더가 생성되고, 이 폴더 내에 마이그레이션 파일들이 저장된답니다.
마이그레이션 파일 생성
모델에 변경 사항이 생기면 아래 명령어를 실행해 새로운 마이그레이션 파일을 생성할 수 있어요.
flask db migrate -m "Initial migration."
여기서 -m
옵션은 마이그레이션 메시지를 추가하는 옵션이에요. 메시지를 통해 어떤 변경이 있었는지 쉽게 알 수 있어요.
마이그레이션 적용
이제 생성된 마이그레이션 파일을 실제 데이터베이스에 적용해볼게요.
flask db upgrade
이 명령어를 실행하면 마이그레이션 파일을 바탕으로 데이터베이스 스키마가 변경된답니다.
롤백
만약 데이터베이스 스키마를 이전 상태로 되돌리고 싶다면, 아래 명령어를 사용해 롤백할 수 있어요.
flask db downgrade <version_hash>
하지만 롤백 시에는 주의사항이 있어요. 테이블 구조는 이전 상태로 돌아가지만, 실제 데이터에 대해서는 롤백이 수행되지 않아요. 데이터 손실이나 불일치가 발생할 수 있기 때문에 주의해야 해요.
결론
Flask-Migrate는 SQLAlchemy와 함께 사용할 때 매우 유용한 도구예요. 스키마 변경을 추적하고, 팀 작업을 원활하게 하며, 배포 시 용이성을 높여주기 때문에, Flask 애플리케이션을 개발할 때 꼭 사용해보세요. 😊