📦
Migrations (마이그레이션)
코드로 데이터베이스 스키마를 버전 관리
Migration은 데이터베이스 스키마 변경을 Ruby 코드로 관리하는 시스템입니다. SQL을 직접 실행하는 대신, Migration 파일을 작성하고 rails db:migrate로 적용합니다.
# db/migrate/20240101000000_create_posts.rb
class CreatePosts < ActiveRecord::Migration[8.0]
def change
create_table :posts do |t|
t.string :title, null: false
t.text :content
t.references :user, null: false, foreign_key: true
t.string :status, default: 'draft'
t.timestamps # created_at, updated_at 자동 추가
end
add_index :posts, :status
end
end
주요 명령어:
rails db:migrate— 미적용 마이그레이션 실행rails db:rollback— 마지막 마이그레이션 되돌리기rails db:migrate:status— 마이그레이션 적용 상태 확인
파일명의 타임스탬프(20240101000000)로 실행 순서가 결정되며, schema_migrations 테이블에 적용된 마이그레이션이 기록됩니다.
핵심 포인트
1
rails generate migration CreatePosts title:string content:text → 마이그레이션 파일 생성
2
생성된 파일에서 change 메서드에 스키마 변경 정의
3
create_table, add_column, remove_column, rename_column 등 DSL 사용
4
rails db:migrate 실행 → SQL로 변환되어 DB에 적용
5
db/schema.rb가 자동 업데이트 (현재 스키마 스냅샷)
6
rails db:rollback으로 되돌리기 가능 (change 메서드는 자동 역전)
장점
- ✓ DB 스키마를 Git으로 버전 관리
- ✓ 팀원 간 스키마 동기화 자동화
- ✓ change 메서드로 자동 롤백 지원
- ✓ DB 종류에 독립적인 DSL
단점
- ✗ 프로덕션 마이그레이션은 신중해야 함 (데이터 손실 위험)
- ✗ 대용량 테이블 마이그레이션은 시간이 오래 걸림
- ✗ down 메서드가 없으면 롤백 불가
- ✗ 마이그레이션 파일이 계속 쌓임
사용 사례
테이블 생성/삭제
컬럼 추가/수정/삭제
인덱스 추가
외래키 설정
팀 간 스키마 동기화