Chapter 4-1 Flask-Migrate란?

2025. 4. 22. 13:10·Flask

📌 개념 정리

Flask-Migrate란?

Flask-Migrate는 Alembic을 기반으로 한 Flask 애플리케이션에서 데이터베이스 마이그레이션을 관리하는 확장입니다. 데이터베이스의 구조나 테이블, 컬럼 등 스키마에 변경이 있을 때마다 이를 추적하고, 변경사항을 코드로 관리할 수 있게 돕습니다. 마이그레이션 파일은 버전 관리 시스템에 포함되어 이력을 기록할 수 있습니다. 이를 통해 데이터베이스를 자동으로 업그레이드하거나 이전 상태로 되돌리는 작업이 가능합니다.


🚦 동작 원리 및 구조

Flask-Migrate의 핵심은 Alembic을 사용해 데이터베이스의 구조 변화를 추적하고 관리하는 것입니다. 모델에 대한 변경사항이 있을 때마다 flask db migrate 명령어로 마이그레이션 파일을 생성하고, flask db upgrade 명령어로 실제 데이터베이스에 적용합니다.

1. flask db init: 프로젝트를 처음 설정할 때 사용되며, migrations 디렉토리를 생성하고 초기화 작업을 합니다.

2. flask db migrate: 모델에 변경사항이 생기면 마이그레이션 파일을 생성합니다.

3. flask db upgrade: 생성된 마이그레이션을 데이터베이스에 적용하여 최신 스키마로 업그레이드합니다.

4. flask db downgrade: 필요 시, 마이그레이션을 되돌려 이전 상태로 복원할 수 있습니다.


💻 코드 예시 및 흐름 분석

Flask-Migrate 설치

Flask-Migrate를 설치하려면 다음 명령어를 사용합니다:

pip install Flask-Migrate

Flask-Migrate 설정

Flask 애플리케이션에서 Flask-Migrate를 설정하는 코드 예시입니다:

from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from flask_migrate import Migrate

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

db = SQLAlchemy(app)
migrate = Migrate(app, db)
  • Migrate 객체는 Flask 애플리케이션과 SQLAlchemy 데이터베이스 인스턴스를 연결하여 데이터베이스 마이그레이션을 관리합니다.

초기 마이그레이션 생성

초기 마이그레이션 파일을 생성하려면 flask db init 명령어를 실행합니다:

flask db init

이 명령어는 migrations 디렉토리와 관련 설정 파일을 생성합니다. 마이그레이션이 활성화되면 데이터베이스 스키마 변경을 코드로 관리할 수 있습니다.

모델 변경 후 마이그레이션 생성

모델을 변경하고 마이그레이션 파일을 생성하려면 다음 명령어를 사용합니다:

flask db migrate -m "Added email to User and created_at to Board."
  • -m 옵션을 사용해 마이그레이션 메시지를 추가할 수 있습니다.
  • flask db migrate 명령어는 데이터베이스 모델과 현재 데이터베이스 상태를 비교하여 마이그레이션 스크립트를 생성합니다.

마이그레이션 적용

생성된 마이그레이션 파일을 데이터베이스에 적용하려면 flask db upgrade 명령어를 사용합니다:

flask db upgrade
  • flask db upgrade 명령어는 마이그레이션 스크립트를 실행하여 실제로 데이터베이스를 업데이트합니다.

모델 필드 추가 후 예시

class User(db.Model):
    __tablename__ = "users"
    
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(100), unique=True, nullable=False)
    email = db.Column(db.String(100), unique=True, nullable=False)

class Board(db.Model):
    __tablename__ = "boards"
    
    id = db.Column(db.Integer, primary_key=True)
    title = db.Column(db.String(100), nullable=False)
    content = db.Column(db.String(200))
    user_id = db.Column(db.Integer, db.ForeignKey('users.id'), nullable=False)
    author = db.relationship('User', back_populates='boards')

변경 후 마이그레이션을 생성하고 적용하는 과정은 위에서 설명한 **flask db migrate**와 flask db upgrade 명령어를 통해 이루어집니다.


🧪 실전 사례

예를 들어, User 모델에 email 필드를 추가하거나, Board 모델에 created_at 필드를 추가하는 경우 마이그레이션을 생성하여 데이터베이스에 변경을 적용할 수 있습니다. 모델을 수정한 후 flask db migrate 명령어로 마이그레이션 파일을 생성하고, flask db upgrade 명령어로 적용하여 데이터베이스 스키마를 업데이트합니다.


🧠 고급 팁 or 자주 하는 실수

자주 하는 실수:

  • 마이그레이션 파일이 생성되지 않는 경우: 모델 변경 후 flask db migrate 명령어가 제대로 실행되지 않으면, **flask db upgrade**를 실행할 수 없습니다. 이 경우 마이그레이션 파일을 다시 생성하고 확인해야 합니다.

고급 팁:

  • 커스텀 마이그레이션 파일 작성: 복잡한 데이터베이스 변경이 필요한 경우, Alembic을 사용하여 직접 마이그레이션 파일을 작성할 수 있습니다. Alembic의 op.create_table 또는 **op.add_column**과 같은 기능을 활용해 더 세밀한 제어가 가능합니다.

✅ 마무리 요약 및 복습 포인트

  • Flask-Migrate는 Alembic을 사용하여 Flask 애플리케이션의 데이터베이스 마이그레이션을 관리합니다.
  • 데이터베이스 모델에 대한 변경사항을 추적하고, 이를 코드로 관리할 수 있습니다.
  • flask db init, flask db migrate, flask db upgrade 명령어를 통해 마이그레이션 파일을 생성하고 데이터베이스에 적용할 수 있습니다.
  • 데이터베이스 스키마 변경을 쉽게 관리하고, 이전 상태로 복원할 수 있는 flask db downgrade 기능도 지원합니다.

'Flask' 카테고리의 다른 글

Chapter 4-3 실습_블로그 구현 (Flask-MySQL를 활용) templates/posts.html  (0) 2025.04.22
Chapter 4-2 실습_블로그 구현 (Flask-MySQL를 활용)  (0) 2025.04.22
Chapter 3-12 Flask 개념 정리  (0) 2025.04.21
Chapter 3-11 직렬화(Serialization) & 역직렬화(Deserialization)  (0) 2025.04.21
Chapter 3-10 Schema & Model 차이  (0) 2025.04.21
'Flask' 카테고리의 다른 글
  • Chapter 4-3 실습_블로그 구현 (Flask-MySQL를 활용) templates/posts.html
  • Chapter 4-2 실습_블로그 구현 (Flask-MySQL를 활용)
  • Chapter 3-12 Flask 개념 정리
  • Chapter 3-11 직렬화(Serialization) & 역직렬화(Deserialization)
Chansman
Chansman
안녕하세요! 코딩을 시작한 지 얼마 되지 않은 초보 개발자 찬스맨입니다. 이 블로그는 제 학습 기록을 남기고, 다양한 코딩 실습을 통해 성장하는 과정을 공유하려고 합니다. 초보자의 눈높이에 맞춘 실습과 팁, 그리고 개발하면서 겪은 어려움과 해결 과정을 솔직하게 풀어내려 합니다. 함께 성장하는 개발자 커뮤니티가 되기를 바랍니다.
  • Chansman
    찬스맨의 프로그래밍 스토리
    Chansman
  • 전체
    오늘
    어제
    • 분류 전체보기 (777) N
      • Python (32)
      • 프로젝트 (101) N
      • 과제 (25)
      • Database (40)
      • 멘토링 (11)
      • 특강 (37)
      • 기술블로그 (41)
      • 기술블로그-Fastapi편 (33)
      • 기술블로그-Django편 (153)
      • 기술블로그-Flask편 (36)
      • AI 분석 (5)
      • HTML & CSS (31)
      • JavaScript (17)
      • AWS_Cloud (21)
      • 웹스크래핑과 데이터 수집 (14)
      • Flask (42)
      • Django (77)
      • Fastapi (16)
      • 연예 (14)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    hotcoffeecase
    travel ban
    americanlaw
    remittance
    btsjungkook
    btsreunion
    btscomeback
    trumpmuskclash
    classaction
    뷔
    global politics
    urbantrends
    youngprofessionals
    livebroadcast
    newpoliticalparty
    lawsuitculture
    bts
    chatgpterror
    americaparty
    college reunions
    RM
    life reflection
    gpterror
    basalcellcarcinoma
    self-growth
    smartphonedurability
    homebartrend
    btsdischarge
    chinanightlife
    titaniumcase
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
Chansman
Chapter 4-1 Flask-Migrate란?
상단으로

티스토리툴바