마이그레이션과 스키마 변화 — 안전하게 DB 구조 바꾸기

2025. 7. 9. 09:00·Ruby On Rails
728x90
반응형

우리는 서비스를 운영하면서 언젠가는 데이터베이스 구조를 수정해야 할 순간을 맞이합니다.
새로운 기능이 추가되면 컬럼이 필요하고, 기존 컬럼의 타입이 바뀌거나 테이블 자체가 변경될 수 있죠.
이때 중요한 건 단 하나 — 안전하게, 그리고 되돌릴 수 있게 바꾸는 것. 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 스크립트 이상의 의미를 가집니다.
그건 "데이터를 존중하고 관리하는 개발자의 자세"를 보여주는 중요한 도구예요.
오늘 배운 내용으로 프로젝트의 데이터베이스를 좀 더 안전하게, 아름답게 다듬어보세요!

728x90
반응형

'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
'Ruby On Rails' 카테고리의 다른 글
  • Partial, Layout, Helper — 뷰를 깔끔하게 정리하는 기술
  • Validation & Callback — 데이터의 품질을 지키는 방법
  • Rails에서의 MVC 구조 진짜 제대로 파보기
  • ActiveRecord로 데이터 다루기 — CRUD의 정석
코드를 걷는 사람
코드를 걷는 사람
devwanderer 님의 블로그 입니다.
  • 코드를 걷는 사람
    터미널 밖으로 나온 개발자
    코드를 걷는 사람
  • 전체
    오늘
    어제
    • 분류 전체보기
      • Flutter
        • Flutter 게시판 앱 만들기
        • Flutter 뉴스 앱 만들기
        • Flutter 메모 앱 만들기
        • Flutter 캘린더 앱 만들기
        • Flutter 날씨 앱 만들기
      • Next.js
      • Ruby On Rails
  • 블로그 메뉴

    • 홈
    • 태그
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    flutter상태관리
    rails보안
    RubyOnRails
    날씨앱
    Flutter
    백엔드개발
    flutter앱개발
    북마크기능
    Nextjs
    UI디자인
    flutter기초
    UIUX
    fluttertips
    정적사이트
    코드를걷는사람
    캘린더앱
    모바일앱개발
    flutter디자인
    table_calendar
    flutterui
    개발블로그
    ActiveRecord
    Firebase
    다크모드
    메모앱
    감성앱
    flutter게시판
    flutter개발
    뉴스앱
    openweather
  • 최근 댓글

  • 최근 글

  • 반응형
    250x250
  • hELLO· Designed By정상우.v4.10.3
코드를 걷는 사람
마이그레이션과 스키마 변화 — 안전하게 DB 구조 바꾸기
상단으로

티스토리툴바