모델 개발 - 마이그레이션
Last updated
Was this helpful?
Last updated
Was this helpful?
이그레이션은 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