Ruby on Rails는 단순함과 '설정보다 관례(convention over configuration)' 철학으로 자주 칭찬받는 강력한 웹 애플리케이션 프레임워크예요. 하지만 그 단순함 아래에는 개발자의 삶을 더 편하게 만들어 주는 탄탄한 도구들이 숨어 있어요.
그중 하나가 rails generate migration 명령어예요. 이 명령어로 데이터베이스 스키마를 효율적으로 다루고, 애플리케이션의 데이터베이스 구조를 코드베이스와 동기화된 상태로 유지할 수 있어요. 이 가이드에서는 rails generate migration에서 사용할 수 있는 강력한 명령줄 옵션을 자세히 살펴볼게요.
마이그레이션 시작하기
마이그레이션은 데이터베이스 스키마를 시간에 따라 일관되고 체계적으로 수정하는 방법이에요. 데이터베이스를 위한 버전 관리라고 생각하면 돼요.
기본 사항에 대한 자세한 가이드는 Rails 마이그레이션 생성 방법 튜토리얼을 확인해 보세요.
간단한 마이그레이션을 만들려면 다음을 사용하세요:
rails generate migration AddFieldnameToTablename fieldname:string
이 명령어는 db/migrate 디렉터리에 마이그레이션 파일을 생성해요.
마이그레이션 파일의 기본 구조
마이그레이션 파일은 보통 다음과 같아요:
class AddFieldnameToTablename < ActiveRecord::Migration[6.0]
def change
add_column :tablename, :fieldname, :string
end
end
마이그레이션 실행하기
마이그레이션을 적용하려면 다음을 실행하세요:
rails db:migrate
이 명령은 새 마이그레이션 파일마다 change 메서드를 실행해 데이터베이스 스키마를 업데이트해요.
고급 명령줄 옵션
rails generate migration 명령어에는 복잡한 데이터베이스 작업을 쉽게 수행할 수 있는 다양한 옵션이 있어요. 아래에서 그중 몇 가지를 살펴볼게요.
1. Rails 버전 지정하기
Rails 마이그레이션을 다룰 때는 마이그레이션 버전이 Rails 애플리케이션 버전에 따라 자동으로 정해진다는 점을 알아두는 게 중요해요. 마이그레이션 클래스는 Rails 버전에 맞는 버전 번호와 함께 ActiveRecord::Migration을 상속해요.
2. 되돌릴 수 있는 마이그레이션
자동으로 되돌릴 수 없는 변경 사항에는 up 메서드와 down 메서드를 모두 정의할 수 있어요:
class AddDetailsToUsers < ActiveRecord::Migration[6.0]
def up
add_column :users, :details, :text
end
def down
remove_column :users, :details
end
end
up 및 down 메서드를 사용하면 마이그레이션의 실행과 롤백 방식을 완전히 제어할 수 있어요.
3. 인덱스 자동 생성하기
컬럼에 인덱스를 추가하는 것은 데이터베이스 성능을 높이기 위해 흔히 필요한 작업이에요. index 수정자를 사용하면 돼요.
인덱스에 대한 자세한 내용은 Rails Migration: add index 문법 가이드를 참고하세요.
rails generate migration AddUserIdToPosts user_id:integer:index
이 명령어는 posts 테이블에 user_id라는 정수 필드를 추가하고, 이에 대한 인덱스를 자동으로 생성하는 마이그레이션을 만들어요.
4. 참조와 외래 키 추가하기
테이블 간 연관 관계를 만들 때는 보통 외래 키를 추가해야 해요. references 옵션을 쓰면 간단해요:
rails generate migration AddCategoryRefToProducts category:references
이 명령어는 products 테이블에 category_id 컬럼을 추가하고 인덱스를 자동으로 만들어요. 외래 키 제약 조건도 함께 설정해요.
외래 키 사용법은 Rails Migration Foreign Key 가이드에서 더 알아보세요.
예상되는 마이그레이션 파일:
class AddCategoryRefToProducts < ActiveRecord::Migration[6.0]
def change
add_reference :products, :category, foreign_key: true
end
end
5. 컬럼과 테이블 이름 변경하기
컬럼이나 테이블 이름을 바꿀 때는 Rails의 내장 메서드를 사용할 수 있어요:
rails generate migration RenameDescriptionInProducts
그런 다음 생성된 파일을 직접 수정하세요:
class RenameDescriptionInProducts < ActiveRecord::Migration[6.0]
def change
rename_column :products, :description, :product_description
end
end
테이블 전체의 이름을 바꾸려면:
class RenameOldTableToNewTable < ActiveRecord::Migration[6.0]
def change
rename_table :old_table, :new_table
end
end
마치며
rails generate migration 명령어는 정확하고 확장 가능하며 유지 관리하기 쉬운 데이터베이스 변경을 가능하게 해 주는 Rails 생태계의 강력한 도구예요. 이런 고급 명령줄 옵션을 활용하면 마이그레이션 스크립트를 한층 강화하고, Rails 애플리케이션을 견고하고 성능 좋게 유지할 수 있어요.
관련 자료
관련된 Rails 마이그레이션 튜토리얼도 살펴보세요:
- Rails에서 “rails g migration add column” 사용하는 방법
- Rails Migration: 컬럼 삭제
- Rails Migration: 컬럼 이름 변경
- Rails Generate Migration: 테이블 생성
- Rails 마이그레이션 데이터 타입
- Rails 마이그레이션 롤백
다음에 데이터베이스 스키마를 변경할 때는 어떤 옵션이 개발 과정을 가장 효율적으로 만들어 줄지 고민해 보세요. 즐거운 코딩 되세요!
Beekeeper Studio는 무료 오픈 소스 데이터베이스 GUI예요
지금까지 써 본 SQL 쿼리 & 에디터 도구 중 최고예요. 데이터베이스 관리에 필요한 모든 게 다 있어요. - ⭐⭐⭐⭐⭐ Mit
Beekeeper Studio는 빠르고 직관적이며 사용하기 쉬워요. 다양한 데이터베이스를 지원하고 Windows, Mac, Linux에서 모두 잘 작동해요.
Beekeeper Studio 사용자 후기
"Beekeeper Studio가 예전 SQL 작업 방식을 완전히 대체했어요. 빠르고 직관적이라 데이터베이스 작업이 다시 즐거워졌어요."
"여러 데이터베이스 GUI를 써 봤지만, Beekeeper는 기능과 단순함 사이의 균형이 완벽해요. 그냥 잘 돌아가요."