모델 개발 - 마이그레이션
이그레이션은 Rails가 제공하는 테이블 레이아웃을 생성 또는 변경하기 위한 기능이다.
데이터베이스 스키마 변경을 하는 역할을 하는 것은 '마이그레이션 파일'이다. 마이그레이션 파일은 rails generate 명령으로 생성할 수 있다. 이 때 파일 이름에 포함되는 타임 스탬프 값이 포함되는데, Rails는 이 값을 schema_migrations 테이블에 저장해서 버전 관리한다.
정확히 말해서 마이그레이션 파일을 생성하는 방법은 다음과 같이 두 가지로 구분할 수 있다.
rails generate model명령어로 모델과 함께 생성rails generate migration명령어를 사용해 마이그레이션 파일만 생성
2번을 자주 쓰게되는데 이건 좀 정리해두자.
rails generate migration name [field:type ...] [option]
#name: 이름
#field: 필드 이름
#type: 자료형
#options: 동작 옵션이름은 마이그레이션 파일(ActiveRecord::Migration 파생 클래스)의 클래스 이름이다.
각각의 필드를 추가하거나 제거하는 경우에는 다음과 같은 형식을 지정한다.
AddXxxxxTo<테이블 이름>: 요기서 Xxxxx 부분은 어디까지나 이름을 읽기 위한 것이므로 추가하거나 제거하려는 필드는 객체(<필드이름>:<자료형>)로 별도 지정해줘야 한다.RemoveXxxxxFrom<테이블 이름>가령 authros 테이블에 date 자료형으로 birth 필드를 추가한다면 아래처럼 명령어를 입력하자.
rails generate migration AddBirthToAuthors birth:date위 명령어로 자동 생성되는 코드는 어디까지나 그냥 기본적인 구조를 잡아주는 것뿐이므로 추가 처리를 하고 싶다면 코드를 직접 추가하자.
마이그레이션 파일을 명령어를 쓰지 않고 직접 생성하는 것도 가능하다. 하지만 쓸데없는 충돌이 일어날 수 있으므로 명령어를 사용할 것을 추천한다.
직접 생성하거들랑 아래 사항은 꼭 주의하자.
파일의 이름과 클래스 이름을 대응시킨다. <-- 요거.. 중요하다! 타임스태프도 꼭 붙여줘야한다!
ActiveRecord::Migration 클래스를 상속한다.
마이그레이션 파일에서 다룰 수 있는 메서드들이 따로 있으니 이를 확인해서 잘 써먹자.
주요 메서드
add_column
add_index
add_timestamps
change_column
change_column_default
change_table
column_exists?
create_table
create_join_table
drop_table
index_exists?
remove_column
remove_index
remove_timestamps
rename_column
rename_index
rename_table
execute
마이그레이션 파일 실행
마이그레이션 파일을 실행할 때는 rake 명령어를 사용한다. 마이그레이션의 원래 목적은 '원할 때 특정 시점이나 상황으로 스키마를 되돌리는 것'이다. rake 명령어는 이를 처리를 위한 다양한 서브 명령어를 제공한다.
명령어
설명
예시
db:migrate
지정한 버전까지 마이그레이션(Version을 지정하지 않으면 최신으로)
rake db:migrate VERSION=20201231022143910db:rollback
지정한 스텝만큼 버전을 되돌림
rake db:rollback STEP=5db:migrate:redo
지정한 스텝만큼 버전을 되돌리고 다시 실행
rake db:migrate:redo STEP=5db:migrate:reset
데이터베이스를 일단 제거하고 다시 생성한 뒤에 최신 버전의 마이그레이션을 실행
rake db:migrate:reset
Last updated
Was this helpful?