Web/web dev

Flask-Migrate로 SQLAlchemy 마이그레이션 쉽게 하기

hy30nq 2024. 6. 19. 13:24
728x90

안녕하세요! 오늘은 Flask 애플리케이션에서 SQLAlchemy를 이용해 데이터베이스 마이그레이션을 쉽게 할 수 있도록 도와주는 Flask-Migrate에 대해 소개해드릴게요. 데이터베이스 마이그레이션은 팀 작업을 원활하게 하고, 스키마 변경을 추적하며, 배포 시 용이성을 높여주는 중요한 작업이랍니다.

Flask-Migrate 장점

  1. 스키마 변경의 추적
  2. 팀 작업 용이
  3. 배포 용이성
  4. 데이터 손실 방지

초기 설정

먼저 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 애플리케이션을 개발할 때 꼭 사용해보세요. 😊

728x90