 |
|
루비 온 레일스 애플리케이션 초기 구조 만들기(XML 처리를 위한 준비)
자, 이제 재미있는 내용으로 넘어가 보자. 이 섹션에서 여러분은 레일스에 포함된 여러 종류의 생성 스크립트의 도움을 받을 것이다. 일단 XML 처리를 다루기 전에 먼저 레일스의 기초적인 내용을 설명하겠다.
레일스 애플리케이션 스텁 생성하기
이 튜토리얼에서 이루어지는 모든 작업은 Mac OS X 터미널에서 했다. 따라서 윈도우를 사용한다면 명령행 셸(cmd.exe)을 사용하여 따라가보도록 한다. 윈도우에서도 모든 명령이 똑같이 동작한다.
가장 먼저 해야 할 것은 Listing 1에 있는 명령을 실행하여 레일스 애플리케이션을 만드는 것이다.
Listing 1. 레일스 애플리케이션 스텁(stub)을 생성하는 명령
이 명령은 레일스 스크립트를 실행하여 xml_tutorial이라는 레일스 애플리케이션을 만드는 것이다. -f 옵션은 레일스의 버전을 현재 시스템에 설치된 버전으로 고정한다는 의미다. 이렇게 하면 현재 버전의 레일스 프레임워크 파일들을 ventor/plugins 디렉터리에 복사하고 사용하기 때문에, 후에 시스템에 다른 버전의 레일스를 설치했을 때 애플리케이션 실행시 생길 수 있는 문제를 줄일 수 있다.
스크립트가 실행되면 애플리케이션 구조가 생성된다. Listing 2에 나와있는 스크립트 출력 메시지를 보자.
Listing 2. 레일스 애플리케이션 생성 스크립트의 출력 메시지
monkey:~/Work/Rails_XML_Tutorial daniel$ rails xml_tutorial -f
create
create app/controllers
create app/helpers
create app/models
create app/views/layouts
...
...
rm -rf vendor/rails
mkdir -p vendor/rails
cd vendor/rails
mv activesupport-1.4.1 activesupport
mv activerecord-1.15.2 activerecord
mv actionpack-1.13.2 actionpack
mv actionmailer-1.3.2 actionmailer
mv actionwebservice-1.2.2 actionwebservice
cd -
froze
monkey:~/Work/Rails_XML_Tutorial daniel$
|
레일스의 '설정보다는 관례(convention over configuration)'를 여러분이 생성한 기본 애플리케이션 구조에서 확인해볼 수 있다. 레일스 애플리케이션에서는 파일들이 종류에 따라 해당하는 디렉터리에 위치한다. 컨트롤러, 헬퍼(helpers), 모델, 뷰 등 이 모든 것이 각각 자신들을 나타내는 디렉터리에 들어있기 때문에 파일들이 무엇이며 어떻게 사용하는지를 바로 알 수 있다. 전에 말했듯이, 여기서 레일스 애플리케이션 디렉터리 배치를 자세히 다루지는 않을 것이다. 참고자료를 보면 양질의 정보를 찾아볼 수 있다.
컨트롤러 만들기
예상했듯이 레일스는 특정 타입의 객체 스텁을 생성하는 스크립트를 제공한다. 레일스 스크립트로 생성할 수 있는 객체 스텁에는 컨트롤러, 모델, 메일러(mailers), 웹 서비스(Web Services) 등이 있다. 당장은 컨트롤러가 필요하므로 지금 만들어 보자. 먼저 레일스 애플리케이션 디렉터리로 이동한다(Listing 3).
Listing 3. 레일스 컨트롤러 만들기
monkey:~/Work/Rails_XML_Tutorial daniel$ cd xml_tutorial/
monkey:~/Work/Rails_XML_Tutorial/xml_tutorial daniel$ ruby script/generate controller main
exists app/controllers/
exists app/helpers/
create app/views/main
exists test/functional/
create app/controllers/main_controller.rb
create test/functional/main_controller_test.rb
create app/helpers/main_helper.rb
monkey:~/Work/Rails_XML_Tutorial/xml_tutorial daniel$
|
Listing 3은 루비 인터프리터를 호출하여 script 디렉터리에 있는 generate라고 불리는 파일을 실행하도록 하고 이 스크립트에 controller main이라는 인자들을 전달하는 명령을 보여준다. 레일스는 'main'이라고 불리는 컨트롤러를 생성하여 액션(actions)들을 사용할 수 있게 해준다. '설정보다는 관례'이라는 모토에 따라, 각각의 퍼블릭 메서드들은 하나하나가 액션으로 불리며 보통 관련된 뷰를 하나씩 가진다. 이들은 모두 URI 관례를 따라 접근할 수 있다.
지금 'main'이라는 컨트롤러가 하나 있는 상황에서 예를 들어보면, 만약 이 컨트롤러 안에 'index'라고 불리는 퍼블릭 메서드를 정의할 경우 http://localhost:3000/main/index를 통해 main 컨트롤러의 index 액션에 접근할 수 있다.
레일스는 이러한 라우팅 방식을 확장할 수 있는 다양한 종류의 멋진 방법들을 제공하지만, 이 튜토리얼에서는 이것만 알아도 충분하다. XML처럼 논의하기 흥미로운 것들이 더 많이 남아있다(역자 주: 여기서 말하는 라우팅 방식이란, 위에서 든 예와 같이 URI를 통해 특정 컨트롤러 액션, 혹은 객체에 접근하는 일종의 규칙을 뜻한다. config/routes.rb에서 설정할 수 있다).
레이아웃과 뷰 만들기
지금 여기서 화려한 뷰가 필요한 것은 아니므로 이 부분은 재빨리 훑고 넘어가자. 다운로드에 있는 코드의 몇몇 예제파일을 살펴보기 바란다.
레이아웃과 뷰의 차이를 설명하자면, 우선 레이아웃의 경우 페이지의 전체적인 배치를 뜻한다. 레이아웃은 애플리케이션 내에서 공통 요소로 계속 재사용된다(예: 네비게이션 바, 헤더, 풋터 등). 반면 뷰는 레이아웃 내에서 사용되도록 디자인된다.
다시 관례를 따라, layouts 디렉터리에 main.rhtml 파일을 만든다. 이 파일의 이름을 컨트롤러 이름과 동일하게 만들면 레일스가 컨트롤러에서 사용될 레이아웃이라는 것을 자동으로 알 수 있다. 그 다음에는 XML 문서를 업로드하고 파싱할 수 있도록 업로드 필드를 가진 기본 폼을 보여주는 index 뷰를 생성할 것이다(시간을 아끼기 위해, 다운로드에 있는 코드로부터 index.rhtml을 복사해 오자).
완성된 모습
그림 1에 나와있는 주요 디렉터리와 파일들의 배치 모습을 확인해보자.
그림 1. 주요 파일들과 일부 디렉터리 구조
레일스 애플리케이션의 최상위 디렉터리인 xml_tutorial 디렉터리가 있다. 그 다음엔 레일스에 내장된 generate 스크립트를 사용하여 생성한 main_controller.rb 파일이 있다. 그리고 main.rhtml 레이아웃 파일과, index.rhtml 뷰 파일을 만들었다. 뷰 파일은 main이라는 디렉터리 안에 있다. 이는 main 디렉터리 안에 있는 모든 뷰들이 main 컨트롤러에 속한다는 것을 레일스에 알려준다. 다시 설정보다는 관례, 꽤 훌륭하지 않은가. 이제 브라우저로 http://localhost:3000/main/index에 접속하면 레일스는 우리가 원하는 대로 다음과 같이 동작한다.
- main_controller.rb 로 간다.
- index 메서드를 실행한다.
- 사용자에게 보여줄 결과 화면에 layouts/main.rhtml 레이아웃을 사용한다.
- 사용자에게 전달할 레이아웃에 main/index.rhtml의 내용을 포함시킨다.
서버 시작하기
뷰들을 만들고 나면, 서버를 시작시킬 수 있다(여러분이 무엇을 설치했는지에 따라, 이는 WEBRick, Lighttpd, Mongrel 등이 될 수 있다. 여기서는 다루지 않는다). 서버를 시작하기 위해 명령행으로 돌아가서 다음 명령을 수행한다(Listing 4).
Listing 4. 레일스 애플리케이션 시작
monkey:~/Work/Rails_XML_Tutorial/xml_tutorial daniel$ ruby script/server
=> Booting lighttpd (use 'script/server webrick' to force WEBrick)
=> Rails application started on http://0.0.0.0:3000
=> Call with -d to detach
=> Ctrl-C to shutdown server (see config/lighttpd.conf for options)
|
보다시피, ruby script/server라는 명령을 실행했고 이제 서버가 실행될 것이다. 뭐가 보이게 되는지 그림 2로 살짝 엿보자.
그림 2. 사용자 인터페이스 화면
튜토리얼의 나머지 부분에 대해 예시를 주지 않는가? 계속해 보자.
|