모델 개발 - 마이그레이션
이그레이션은 Rails가 제공하는 테이블 레이아웃을 생성 또는 변경하기 위한 기능이다.
데이터베이스 스키마 변경을 하는 역할을 하는 것은 '마이그레이션 파일'이다. 마이그레이션 파일은 rails generate
명령으로 생성할 수 있다. 이 때 파일 이름에 포함되는 타임 스탬프 값이 포함되는데, Rails는 이 값을 schema_migrations
테이블에 저장해서 버전 관리한다.
정확히 말해서 마이그레이션 파일을 생성하는 방법은 다음과 같이 두 가지로 구분할 수 있다.
rails generate model
명령어로 모델과 함께 생성rails generate migration
명령어를 사용해 마이그레이션 파일만 생성
2번을 자주 쓰게되는데 이건 좀 정리해두자.
이름은 마이그레이션 파일(ActiveRecord::Migration 파생 클래스)의 클래스 이름이다.
각각의 필드를 추가하거나 제거하는 경우에는 다음과 같은 형식을 지정한다.
AddXxxxxTo<테이블 이름>
: 요기서 Xxxxx 부분은 어디까지나 이름을 읽기 위한 것이므로 추가하거나 제거하려는 필드는 객체(<필드이름>:<자료형>)로 별도 지정해줘야 한다.RemoveXxxxxFrom<테이블 이름>
가령 authros 테이블에 date 자료형으로 birth 필드를 추가한다면 아래처럼 명령어를 입력하자.
위 명령어로 자동 생성되는 코드는 어디까지나 그냥 기본적인 구조를 잡아주는 것뿐이므로 추가 처리를 하고 싶다면 코드를 직접 추가하자.
마이그레이션 파일을 명령어를 쓰지 않고 직접 생성하는 것도 가능하다. 하지만 쓸데없는 충돌이 일어날 수 있으므로 명령어를 사용할 것을 추천한다.
직접 생성하거들랑 아래 사항은 꼭 주의하자.
파일의 이름과 클래스 이름을 대응시킨다. <-- 요거.. 중요하다! 타임스태프도 꼭 붙여줘야한다!
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=20201231022143910
db:rollback
지정한 스텝만큼 버전을 되돌림
rake db:rollback STEP=5
db:migrate:redo
지정한 스텝만큼 버전을 되돌리고 다시 실행
rake db:migrate:redo STEP=5
db:migrate:reset
데이터베이스를 일단 제거하고 다시 생성한 뒤에 최신 버전의 마이그레이션을 실행
rake db:migrate:reset
Last updated