우리는 서비스를 운영하면서 언젠가는 데이터베이스 구조를 수정해야 할 순간을 맞이합니다.
새로운 기능이 추가되면 컬럼이 필요하고, 기존 컬럼의 타입이 바뀌거나 테이블 자체가 변경될 수 있죠.
이때 중요한 건 단 하나 — 안전하게, 그리고 되돌릴 수 있게 바꾸는 것. Rails에서는 이 과정을 Migration이라는 멋진 도구로 해결합니다.
🧱 마이그레이션(Migration)이란?
마이그레이션은 데이터베이스 스키마의 버전 관리 시스템입니다.
일종의 "스키마 이력 관리 도구"라고 할 수 있어요.
마이그레이션 파일은 다음과 같은 일을 합니다:
- 테이블 생성/삭제
- 컬럼 추가/변경/삭제
- 인덱스 추가/삭제
📦 마이그레이션 파일 생성하기
$ bin/rails generate migration AddPublishedToPosts published:boolean
이 명령어는 published
라는 boolean
컬럼을 posts
테이블에 추가하는 마이그레이션 파일을 생성합니다.
# db/migrate/20250613000000_add_published_to_posts.rb
class AddPublishedToPosts < ActiveRecord::Migration[7.1]
def change
add_column :posts, :published, :boolean
end
end
⚙️ 마이그레이션 적용하기
$ bin/rails db:migrate
이 명령을 통해 마이그레이션이 실제 DB에 반영됩니다. 이제 posts 테이블에 published 컬럼이 생겼겠죠?
↩️ 롤백도 가능해요
실수했을 때를 대비해 rollback 기능도 지원합니다.
$ bin/rails db:rollback
기본적으로는 가장 최근 마이그레이션 1개를 취소합니다.
$ bin/rails db:rollback STEP=3
3개 이전까지 되돌리기도 가능하죠.
🔄 change, up, down 차이점
마이그레이션 메서드는 change
가 기본이지만, 복잡한 작업일 경우 up
/down
을 사용해야 할 수도 있어요.
class ChangeTitleLimitInPosts < ActiveRecord::Migration[7.1]
def up
change_column :posts, :title, :string, limit: 100
end
def down
change_column :posts, :title, :string, limit: 255
end
end
📜 schema.rb 파일은 뭘까요?
db/schema.rb
파일은 현재 DB의 구조를 Ruby DSL로 보여주는 문서입니다. 마이그레이션을 통해 DB를 수정하면 이 파일도 자동으로 갱신됩니다.
ActiveRecord::Schema.define(version: 20250613000000) do
create_table "posts", force: :cascade do |t|
t.string "title"
t.text "content"
t.boolean "published"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
end
end
💡 실전 꿀팁
- 컬럼 삭제는 신중히! — 데이터 유실 가능
- 컬럼 타입 변경은 트래픽 적을 때 적용
- 모든 마이그레이션은 커밋 전에 실행해보기
db:structure:dump
으로 스키마 SQL로 백업도 가능
🎯 마치며
마이그레이션은 단순한 DB 스크립트 이상의 의미를 가집니다.
그건 "데이터를 존중하고 관리하는 개발자의 자세"를 보여주는 중요한 도구예요.
오늘 배운 내용으로 프로젝트의 데이터베이스를 좀 더 안전하게, 아름답게 다듬어보세요!
'Ruby On Rails' 카테고리의 다른 글
Partial, Layout, Helper — 뷰를 깔끔하게 정리하는 기술 (2) | 2025.07.11 |
---|---|
Validation & Callback — 데이터의 품질을 지키는 방법 (2) | 2025.07.10 |
Rails에서의 MVC 구조 진짜 제대로 파보기 (2) | 2025.07.08 |
ActiveRecord로 데이터 다루기 — CRUD의 정석 (0) | 2025.07.07 |
Rails의 라우팅 시스템 — config/routes.rb 제대로 이해하기 (0) | 2025.07.06 |