메뉴 바로가기 검색 및 카테고리 바로가기 본문 바로가기

한빛출판네트워크

IT/모바일

Cooking with Ruby on Rails - May(2)

한빛미디어

|

2007-07-13

|

by HANBIT

8,851

제공 : 한빛 네트워크
저자 : Bill Walton
역자 : 노재현
원문 : Cookin" with Ruby on Rails - May

[이전 기사 보기]
Cooking with Ruby on Rails - May(1)


[그림 13]

CB : 뭔가 달라진걸 알 수 있겠어?

Paul : 네, schema_info 테이블은 뭐죠?

CB : Rails가 생성한 테이블이야. Rails가 앞으로 데이터베이스 스키마의 버전을 관리하기 위해서 사용하게 되는 테이블이라고 보면 돼. Rails가 마이그레이션을 해야 할 때마다 우선 schema_info 테이블에 있는 version 정보를 확인하게 되고, 이 버전 값을 이용해서 db/migrate에 있는 파일중에서 어떤 마이그레이션 파일을 사용해야 하는지를 선택하게 되지. 그럼 지금 스키마에 해당하는 마이그레이션 파일을 한 번 볼까?


[그림 14]

Paul : 거의 하는 일이 아무것도 없네요?

CB : 우리가 이미 만들어놨던 데이터베이스에서 시작했다는 걸 명심해 두라고. 그러니까 우리가 시작했던 지점으로 돌아가기 위해서 해야 할 일이 아무것도 없다는 거지. Rails에 이런 말이 있는데, "마이그레이션을 처음으로 실행했고, 이미 버전 1의 상태에 있다면 아무것도 하지 말라"

Paul : Rails가 우리가 처음으로 마이그레이션을 실행했다는 걸 어떻게 알죠? 아까 지어준 이름 때문에 아는건가요?

CB : 아니. 이름은 Rails에게는 중요치 않아. 이름은 아무 이름으로 정해도 상관없는데, 다만 뭔가 봤을때 의미가 있는 이름으로 짓는게 나중을 위해서 도움이 되겠지. 사실 Rails는 마이그레이션 파일 이름 앞에 붙는 숫자를 사용해서 알게 되는거야. 전에 생성했던 마이그레이션 파일을 한 번 보자고.


[그림 15]

Paul : 전에 BaselineSchema 라는 이름으로 마이그레이션을 생성하라고 했더니 파일 이름앞에 "001_"을 붙여서 생성했네요. 그럼 이제 무엇을 할 수 있을까요?

CB : 물어봐줘서 고맙군.

예를 하나 들어볼께. 보스가 사이트에 요리법을 올린 사람을 알고 싶다고 하자고. 이 요구사항을 생각해보니 아무래도 recipes 테이블에 컬럼을 하나 추가해야 겠다고 결론을 내렸다고 하자. 컬럼 이름은 "contributor_name"이 적당할 것 같아. 컬럼의 타입은 문자열로 하고 기본 값을 설정한 다음에 이제 데이터베이스의 마이그레이션 데이터를 컬럼을 추가한 새로운 마이그레이션 데이터로 변환을 해야 해. 처음에 마이그레이션 데이터를 만들때와 동일한 방법을 이용하면 돼. 이번엔 기억하기 쉽도록 마이그레이션 이름을 "AddContributorName" 이라고 지어보자.


[그림 16]

그리고 마이그레이션 파일을 열고


[그림 17]

Rails가 수행해야 할 명령을 조금 적어주면 돼


[그림 18]

그리고 마이그레이션을 실행하고나서


[그림 19]

데이터베이스를 보면 다음과 같이 되어 있을거야.


[그림 20]

그리고 schema.rb 파일을 보면 Rails가 이 파일도 수정한 걸 알 수 있어.


[그림 21]

Paul : 그러네요. 버전 번호와 contributor_name 컬럼이 추가 되었네요.

CB : 정확히 봤어. Rails가 이제 알아서 버전관리를 해줄 거야. 다음을 보면 알 수 있지 : "version => 2". 이 문자열은 Rails가 버전 2까지의 마이그레이션을 할 수 있다는 것을 의미하지. 그럼 마이그레이션을 한 번 더 해보자구. 이번엔 보스가 요리법을 올린 사람의 이메일 주소까지 저장하고 싶다고 해보자구. 이번에도 마찬가지로 recipes 테이블에 컬럼을 하나 추가하고 나서 마이그레이션 데이터의 이름을 "AddContributorEmail" 이라고 짓도록 하지.

자 이제 마이그레이션 파일을 만들면


[그림 22]

이번 마이그레이션에서 뒷버전 혹은 앞버전으로 이전할때 필요한 명령을 다음과 같이 추가한 후에


[그림 23]

마이그레이션을 실행하면


[그림 24]

완성이야. 데이터베이스도 보자구.


[그림 25]

Paul : 몇 개의 컬럼을 모두 추가했네요. 근데 뭐가 좋다는 건지 잘 모르겠어요. 제 말은 데이터베이스에 종속되지 않거나 SQL을 직접 작성하지 않는 것외에 어떤 장점이 있는지 궁금하네요. 물론 여태까지 본 기능들이 별거 아니라는 뜻은 아니예요.

CB : 자 여기 버전 3의 스키마 파일을 봐봐.


[그림 26]

처음에는 contribute_name 컬럼을 추가했고, 다음으로 contributor_email을 추가했어. 그리고 이제 뭐가 좋은지 알려줄께. 버전 2로 돌아가 보자구.


역자 노재현님은 어렸을 때부터 컴퓨터를 접하게 된 덕에 프로그래밍을 오랫동안 정겹게 하고 있는 프로그래머 입니다. 특히나 게임 및 OS 개발에 관심이 많으며, 심심할 때면 뭔가 새로운 프로그램을 만들어내는 것을 좋아합니다. 다음에서 웹 관련 개발을 한 후에 현재는 www.osguru.net이라는 OS관련 웹사이트를 운영하며 넥슨에서 게임 개발을 하고 있습니다.
* e-mail: wonbear@gmail.com
* homepage: http://www.oguru.net
TAG :
댓글 입력
자료실