RoR day 3

아예 오늘 정말 할 일 없네요. 아무도 터치 안하고 ㅎㅎㅎ 완전 외딴섬 ㅋㅋㅋ

루뵨레일스의 튜토리얼 세번째를 시도해 보겠습니다.(http://railstutorial.org/chapters/static-pages#top)

아 지금 링크를 보니 튜토리얼이 있는 곳은 http://railstutorial.org 였군요! 참으로 잘 쓰여진 튜토리얼입니다.

시작합니다.

우선 새로운 레일스 프로젝트를 만드는 것으로 시작합니다.

rails new sample_app -T

-T 옵션은 test 클래스를 생성하지 않는 옵션이라고 합니다. 확인할 겸 레일스 프로젝트의 디렉토리 구조를 살펴보겠습니다.

  • app : 애플리케이션이 위치합니다.
  • config : 각종 설정파일이 위치합니다.
  • db : 테이블 생성 스크립트 등이 위치합니다.
  • doc : 문서가 위치하는 곳 같네요.
  • lib : 사용하는 라이브러리들이 위치하는 곳이겠죠?
  • log : 로그파일이 위치합니다.
  • public : 이미지, 스타일, 정적 페이지가 위치하는 곳 같습니다.
  • script : rails 파일이 있는데..뭔지 잘 모르겠네요. 관리용 스크립트인지…
  • tmp : 케시, 세션 등이 위치합니다. pids, sockets는 뭔지 모르겠네요. 버퍼용 디렉토리 같기도 하고..
  • vendor : 뭔지 모르겠네요…

사용해본 php 프레임웍들도 비슷한 구조를 사용했던 것 같습니다. RoR 이후로 다른 언어를 사용한 Agile Web 개발 툴들이 쏟아져 나왔으니 비슷한 구조를 사용하는게 당연한 것 같기도 합니다.

Gemfile을 설정합니다. group 이라는 키워드가 새로 나왔습니다. 모드에 따라서 포함되는 gem을 다르게 한다고 합니다. 빌드파일 같다는 냄새가 납니다.

source 'http://rubygems.org'

gem 'rails', '3.0.3'
gem 'sqlite3-ruby', '1.3.2', :require => 'sqlite3'

group :development do
  gem 'rspec-rails', '2.3.0'
end

group :test do
  gem 'rspec', '2.3.0'
  gem 'webrat', '0.7.1'
end

인스톨을 하게 되면 rspec과 webrat이 설치되는 걸 확인할 수 있습니다. 테스트를 위해 Test::Unit 대신 rspec을 사용하려면 추가로 필요한 파일을 설치해야 한다고 합니다.

rails generate rspec:install

악 에러가 나왔습니다. Could not find “autotest” in any of your source path. 라네요. 구글링 결과 사소한 버그인 것 같습니다. 대략 이 위치(C:\Ruby192\lib\ruby\gems\1.9.1\gems\rspec-rails-2.3.0\lib\generators\rspec\install)에 있는 install_generator.rb 파일을 구글링 결과에 따라 수정합니다. 다시 rails generate …하니 에러 없이 끝나네요. 다음으로 정적 페이지를 만들겠습니다.

기본적으로 설치된 rails 애플리케이션의 index.html 파일은 public 디렉토리에 있습니다. 정적 페이지(html 파일)들은 보통 서버상의 파일명으로 접근되곤 합니다. 하지만 종종 파일이 실제로 저장된 위치를 감추는 편이 나은 경우도 있습니다. 이를 위해서 Page 컨트롤러를 추가해 보겠습니다(rails generate 사용).

rails generate controller Pages home contact

컨트롤러를 상속받는 page 클래스가 생기고 그 클래스에 home, contact 함수가 추가되어 있는 것을 확인할 수 있습니다(app/controllers/pages_controller.rb). 추가로 routes 파일(config/routes.rb)을 확인해 봅시다.

SampleApp::Application.routes.draw do
  get "pages/home"
  get "pages/contact"

URL 라우팅을 위한 내용이 추가되어 있습니다. home 페이지는 이 주소로 접근합니다(http://localhost:3000/pages/home). 친절하게도 기본 파일은 자신이 어디에 위치해있는지 알려주네요(app/views/pages/home.html.erb). 여기까지 page 컨트롤러를 생성하여 정적 페이지를 제공하는 방법을 적용해 보았습니다.

다음으로 애플리케이션의 테스트를 자동화를 해보겠습니다.

자동화된 테스트를 갖춘 애플리케이션과 그렇지 못한 애플리케이션 사이에는 크나큰 차이가 있습니다. 사회적 안전망 같은 역할일까요? 고쳐도 망가지지 않았다는 것을 쉽게 알수 있도록 도와주며 고장이 나더라도 일찍 발견할 수 있게 해줍니다. 자바 웹 애플리케이션은 자동화된 테스트를 작성하기 어려운 편이었던 것 같네요. 가능한 방법은 있지만 복잡하고 쉽지 않은 면이 강했습니다. RoR은 그에 비하면 누워서 떡먹기네요 🙂

우선 툴을 준비합니다. autotest라고 지속적인 테스트(Continuous Test)를 지원해주는 툴이라고 하네요.

gem install autotest
gem install autotest-rails

맥을 사용한다면 growl, fsevent gem도 설치합니다. growl이 알림(notification) 툴이라는걸 첨 알았네요 ㅎㅎ 맨날 업데이트만 눌러주고 뭐하는건지 몰랐는데.

놀랍게도 Page 컨트롤러를 생성할 때 기본적인 테스트도 함께 생성되었습니다. 일단 실행시켜 봅시다.

rspec spec

잘 되셨나요? 저는 좀 문제가 있었습니다. 윈도우에서 rspec 명령어를 못 알아먹더군요. 심플하게 path에 추가해주었습니다. 이 부분에서 문제가 발생할 소지가 다분하다고 튜토리얼에서는 언급하고 있습니다. 문제가 있으면 참조해 보세요~ 다른 언어에서와 유사하게 몇 개의 테스트 중 몇 개를 성공하였으며 몇 개를 실패했는지 나타냅니다. rspec은 ruby 단위테스트를 위한 프로그램입니다. spec이라는 DSL(Domain Specific Language)를 통해 테스트를 기술합니다. 자세한 내용은 이곳을 참조하세요.

autotest는 준비된 테스트를 찾아내서 관련된 파일들에 변경이 발생할 때 마다 테스트를 실행합니다. 자동으로 rspec을 실행해 주는 것으로 일단 이해했습니다 ㅎㅎ. 안전한 개발을 위해서는 autotest를 사용하는게 좋을 것 같네요.

이후에는 테스트 스펙(spec)파일을 조금씩 수정하며 기능을 추가하게 됩니다. TDD 패턴이지요.

마지막으로 layout을 설명하겠습니다. layout은 view들의 기본 골격이라고 볼 수 있습니다. 웹의 특성상 화면의 기본적인 구성은 동일한데 이러한 것을 레이아웃이라는 별도의 뷰 파일로 분리한 것입니다. 컨텐츠는 독립적인 뷰 파일로 제작하고 기본적인 구조는 레이아웃이 제공하게 됩니다. 레이아웃 파일은 app/views/layouts/application.html.erb 파일이 default로 사용됩니다.

오늘은 조금 날림으로 해보았습니다. 자세한 내용은 튜토리얼을 참조해 주세요.

1 thought on “RoR day 3

  1. 핑백: RoR day 4, 레일스 맛이 첨가된 루비 « Samsee blogs

댓글 남기기

이메일은 공개되지 않습니다. 필수 입력창은 * 로 표시되어 있습니다