레일스 따라하기 1

Posted by 大山 Fri, 28 Jul 2006 08:08:00 GMT

[참고: 레일스 튜토리얼을 몇 번에 나누어서 연재하려고 합니다. 특정 주제에 대한 요청이 있으면 반영을 할 예정이니 피드백 바랍니다. 이 작업은 서민구님의 제안으로 시작되었습니다.]

레일스는 루비로 만들어진 웹개발 프레임워크이다. 루비만의 강력함과 몇 가지 획기적인 아이디어로 인해 레일스에서의 웹 개발은 정말로 편리하다. 여기서는 루비와 레일스를 설치하고, 간단한 전화번호부 애플리케이션을 만들어 보면서 레일스의 강력함을 직접 경험해 보기로 한다.

레일스로 개발을 하려면 우선 루비를 설치해야 한다. 윈도우에서 루비를 설치할 때 반드시 'Enable RubyGems' 옵션을 선택해서 루비젬도 같이 설치하도록 한다. (맥 OS X나 리눅스 사용자라면 이곳에서 루비젬을 다운로드 받아 별도로 설치해야 한다.)

루비젬은 루비의 각종 라이브러리를 쉽게 설치하고 관리하게 해주는 유틸리티 프로그램이다. 루비와 루비젬의 설치가 끝나면, 명령 프롬프트(DOS) 창에 다음을 입력한다. (맥 OS X나 리눅스에서는 sudo를 사용해야 한다.)

c:\> gem install rails --include-dependencies
 

레일스와 레일스가 필요로 하는 몇가지 라이브러리가 설치되는 과정이 보여질 것이다. 다음에는 데이터베이스 프로그램을 설치할 차례이다. 이곳에서 MySQL 5.0을 다운로드 받아 설치한다.

MySQL Command Line Client로 데이터베이스에 접속해서 이번 전화번호부 프로젝트를 위한 phonebook 데이터베이스를 만든다.

Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 1 to server version: 5.0.27-standard

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

mysql> create database phonebook default charset utf8;
Query OK, 1 row affected (0.00 sec)
 

다음에는 인명정보를 담을 people이란 이름을 가진 테이블을 만든다.

mysql> use phonebook;
mysql> create table people (
mysql>   id int auto_increment primary key,
mysql>   name varchar(20),
mysql>   phone_number varchar(20),
mysql>   note text
mysql> );
Query OK, 0 rows affected (0.03 sec)
 

이제 레일스 애플리케이션을 만들 차례이다. 프로젝트를 위한 폴더를 하나 만들어야 하는데, 레일스에서는 새로운 프로젝트의 폴더 구조를 자동으로 생성해주는 rails란 이름의 유틸리티 프로그램이 있다. 다음을 실행해 보자.

c:\>rails phonebook
      create  
      create  app/controllers
      create  app/helpers
      create  app/models
      create  app/views/layouts
      create  config/environments
      create  components
      create  db
        .        .
        .        .
 

꽤나 많은 서브 폴더와 파일이 생성되는 것이 보일 것이다. 여기서는 핵심적인 몇개의 폴더만 설명하고 넘어간다.

  • app: 대부분의 애플리케이션 코드가 들어갈 폴더
  • config: 애플리케이션의 각종 설정 파일이 들어 있는 폴더
  • public: 이미지, 자바스크립트, CSS 파일 등이 저장되는 폴더로 웹 애플리케이션의 루트에 해당됨
  • script: 웹 애플리케이션을 개발을 편리하게 해주는 각종 스크립트가 들어있는 폴더

이제 초기 상태의 레일스 애플리케이션을 한 번 구동해 보자.

c:\> cd phonebook
c:\phonebook> ruby script/server
=> Booting WEBrick...
=> Rails application started on http://0.0.0.0:3000
=> Ctrl-C to shutdown server; call with --help for options
 

웹 브라우저에서 주소창에 'http://127.0.0.1:3000/'을 입력하면, 다음과 같은 화면이 나올 것이다.

레일스 애플리케이션이 잘 작동되는 것을 확인했으면, Ctrl-C를 눌러 서버를 종료시킨다.

이제는 우리의 새 레일스 애플리케이션이 MySQL 데이터베이스에 접근할 수 있도록 설정을 할 차례이다. 'config/database.yml' 파일을 열고, 'development:' 섹션에 다음과 같이 입력한다.

development:
  adapter: mysql
  database: phonebook
  username: root
  password: your_mysql_password
  host: localhost
  encoding: utf8
 

'test:'와 'production:' 부분의 설정은 아직 신경쓰지 않아도 된다. 이제 우리의 애플리케이션은 DB 연결이 필요할때 마다 이 설정을 이용해서 자동으로 DB에 접속하게 된다.

이번에는 DB의 people 테이블을 객체 레벨에서 접근할 수 있게 해주는 모델 클래스를 생성해보자.

c:\phonebook> ruby script/generate model Person
 

여러가지 파일이 생성되는게 보이는데, 지금 시점에서는 개별 파일에 신경을 쓸 필요는 없다.

이번에는 사용자가 웹 브라우저를 통해 우리의 전화번호부 애플리케이션에 접근했을때 이를 처리해줄 컨트롤러 클래스를 생성한다.

c:\phonebook> ruby script/generate controller PhoneBook
 

이번에도 여러 파일이 생성되는데, 'app/controllers/phonebookcontroller.rb' 파일이 가장 중요하다. 이 파일에는 PhoneBook 컨트롤러 클래스가 정의되어 있는데, 바로 이곳에서 웹 브라우저와 애플리케이션간의 교신이 일어나게 된다.

마지막으로 'app/controllers/phonebookcontroller.rb' 파일을 열어 'scaffold :person' 라인을 추가한다.

class PhoneBookController < ApplicationController
  scaffold :person
end
 

이제 우리가 만든 애플리케이션을 한 번 사용해 보도록 하자. 다시 명령 프롬프트 창에서 'ruby script/server'이라고 입력해서 웹서버를 시작한 다음, 웹 브라우저의 주소창에 'http://127.0.0.1:3000/phone_book/'이라고 입력한다.

'New person' 링크를 눌러 사람을 추가할 수 있다.

정보가 입력된 후에는 열람, 수정 및 삭제가 가능하다.

이로써 간단한 전화번호부 애플리케이션을 만드는 작업이 모두 끝났다. 세부적으로 궁금한 사항은 답글로 질문 바람!

업데이트(07/3/15): 레일스 1.2에 맞게 튜토리얼 내용을 수정합니다. (기본적으로 'app/controllers/application.rb' 파일에서 수동으로 UTF-8 인코딩 설정을 해주던 부분이 빠졌습니다.)

Posted in  | Tags , ,  | 24 comments | 2 trackbacks