코딩 하기
모든 사람들이 좋아하는 요리법을 공유하는 온라인 요리책을 만들 것이다. 온라인 요리책은 다음과 같은 기능을 가지고 있다.
지금 만들 요리책 application은 아무 directory에나 만들어도 된다. 여기서는 c:\rails\cookbook에 만든다.
여기서 이 예제의 모든 파일을 다운로드 할 수 있다. cookbook/db/ directory에는 데이터베이스를 다시 생성할 수 있는 파일이 있다.
비어 있는 Rails Web Application 만들기
Rails는 runtime 웹 어플리케이션 프레임웍과 자동화 helper script의 집합이다. 요리책 어필리케이션을 시작하기 위해서, 첫번째로 전체 디렉토리와 파일을 만드는 helper script를 사용한다.
1. 명령창(Command Window)을 열고 요리책을 만들 디렉토리로 이동한다. 여기서는 c:\rails를 사용한다.
2. 다음 명령을 실행시킨다.
rails cookbook
역자 주 : rails cookbook을 실행 시켰을 때 “‘rails’은(는) 내부 또는 외부 명령, 실행할 수 있는 프로그램, 또는 배치 파일이 아닙니다.”라는 에러가 발생할 때는 아래의 순서로 조치하시면 됩니다.
1. “set path” 명령을 쳐서 path에 “c:/ruby/bin” 디렉토리가 추가 되어 있나 확인한다.
2.”c:/ruby/bin” 디렉토리가 없을 때는 “내컴퓨터→속성→고급→환경변수→시스템” path 환경변수에 디렉토리를 추가한다.
3. 명령창을 다시 띄워서 “rails cookbook”을 입력한다.
4. 그래도 안되는 경우 rebooting한다. 윈도우즈 버전에 따라서 reboot해야 환경 변수가 반영된다.
5. rebooting 후에도 안되면 “c:/ruby/bin” 폴더에 rails.cmd 파일이 있는지 확인한다. 1~4의 과정을 밟아 왔는데도 rails.cmd 파일이 있다면 역자도 그 원인을 모르겠다.
6. rails.cmd가 없다면 다행이다. rails.cmd가 없다는 것은 install이 잘못된 것이다. “gem uninstall rails” 명령어를 입력하면 uninstall된다. uninstall 후 “gem install rails” 입력해서 다시 설치한다.
7. 재설치 후 rails.cmd 파일이 있는지 확인한다. 이래도 rails.cmd 파일이 없는 경우에는 필시 Ruby 버전이 1.8.2-15 아니라 그 이하 버전이 설치되었기 때문이다. 으~ 어쩌라~ 역자가 앞의 post에서 반드시 1.8.2-15 설치하라고 얘기했음을 잘 안 본 것이다. 설치된 Ruby 버전을 삭제하고 1.8.2-15를 설치하도록!
이 명령어는 rails 폴더 아래에 cookbook이라는 하위 폴더를 만들고, 비어있는 application을 생성한다.
그림 6. 생성된 Rails application 폴더
새로 만든 application을 테스트 하기 위해서 web server를 실행해야 한다. Rails는 어떤 웹서버에서도 실행이 된다. 여기서는 내장되어 있는 WEBrick web server를 사용한다.
1. 명령창을 띄우고, 해당 application 폴더로 이동한다.
2. 아래의 명령을 실행한다.
ruby script\server
그림 7과 같이 web server가 실행되는 것을 확인할 수 있다.
웹 브라우저를 실행시키고 주소창에 http://127.0.0.1:3000/ 입력한다. 그림 8의 내용이 브라우저에 출력되면 일단은 성공.
그림 7. WEBrick web server 실행 상태
명령창이 열려 있는 한 웹 서버가 동작한다. 진행을 위해서 명령창을 그대로 두도록.
그림 8. Rails의 기본 페이지
Rails 어플리케이션의 디렉토리 구조
Rails는 개발자의 불필요한 작업과 결정 사항을 최소화하기 위해서 매우 노력했다. Rails의 helper 스크립트를 사용하면 그림 9.의 디렉토리 구조가 생성된다. 설정 파일이 필요 없음을 명심 해라!
그림 9. Rails 어플리케이션의 디렉토리 구조
c:\rails\cookbook\app 하위 폴더에서 파일을 만들거나 수정한다. 각 폴더마다 어떻게 사용되는 간략히 살펴 보자
Controllers와 URLs
곧, 요리책 데이터베이스와 Application을 만들 것이다. 그 전에 controller와 URL이 어떻에 mapping되서 작동하는지 알아 보자.
Controller는 사용자로부터 요청을 처리한다. URL의 요청은 controller 클래스와 클래스 안의 함수와 연결되어 있다. 그런데 어떻게 작동하지?
일단 웹서버가 작동하는 명령창은 가만히 두고, 새로운 명령창을 실행 시키자. application 폴더의 controllers 폴더를 열어 보면 그림 10과 같은 두 개의 파일이 존재하는 것을 확인할 수 있다.
그림 10. 요리책의 controller 폴더(역자 주 : 번역하는 시점에 Rails 최신 버전은 rails (0.14.3)이다. 따라서 그림의 abstract_application.rb 파일은 application.rb 파일로 이름이 바뀌었다.)
controller 클래스를 만들기 위해서는 helper script를 사용해야 한다. 명령창에 아래 명령을 실행 시키자.
ruby script\generate controller MyTest
역자 주 : 위의 명령어는 c:\rails\cookbook 폴더에서 실행해야 한다.
이 명령은 my_test_controller.rb 이름의 파일이 생성된다. 이 파일은 MyTestController 클래스의 skeleton이다.
앞에서 만들어진 파일을 오른쪽 마우스 버튼을 클릭하면, 그림 11과 같은 편집기가 출력된다.
그림 11. MyTestController 수정하기
존재 하지 않는 페이지를 입력해 보자. 예를 들어 http://127.0.0.1:3000/garbage/ 입력해 보자. 아래의 그림과 같은 메시지를 확인할 수 있다.
그림 12. 존재하지 않는 controller를 브라우징 할 때(역자 주 : rails (0.14.3) 버전에서는 다른 메시지가 출력된다.)
방금 만든 controller를 입력해 보자. http://127.0.0.1:3000/MyTest/ 입력해 보자. 아래의 그림과 같은 메시지를 확인할 수 있다.
그림 13. 새로 만든 controller를 브라우징 할 때
URL의 MyTest 부분이 새로 만든 controller와 연결된다. 그림 13의 메시지를 확인해 보면 index라는 액션을 찾지 못한다는 뜻인거 같다.
자~ index라는 액션을 추가해 보자. 그림 14와 같다.
그림 14. MyTestController의 index 함수
웹 브라우저를 refresh해 보자. 그럼 그림 15와 같은 내용이 출력될 것이다.
그림 15. index 함수의 결과
http://127.0.0.1:3000/MyTest/index를 입력해도 그림 15와 같은 동일한 결과를 얻을 수 있다.
새로운 dilbert라는 새로운 함수를 추가해 보자. 그림 16과 같다.
그림 16. dilbert 함수
웹 브라우저에 http://127.0.0.1:3000/MyTest/dilbert를 입력해 보자. 그림 17의 결과를 얻을 수 있다.
그림 17. dilbert 함수의 결과
요리책 데이터베이스 만들기
요리책에 사용할 데이터베이스를 만들고, Rails에 데이터베이스 연결을 설정해야 한다.(Rails에서 사용하는 유일한 설정 부분이다.)
1. MySQL-Front를 실행하자. MySQL 서버에 root 계정(비밀번호 없음)으로 로그인하자. 그림 18과 동일한 화면을 확인할 수 있다.
그림 18. MySQL-Front(역자 주 : MySQL-Front의 버전에 따라서 그림이 다소 다름.)
2. 두 개의 데이터베이스가 있는 것을 확인할 수 있다. (mysql, test) cookbook에 사용할 새로운 데이터베이스를 만든다. 메뉴 Database>New>Database… 를 선택하면 그림 19의 신규 데이터베이스 생성 창이 생성된다.
그림 19. 신규 데이터베이스 생성
OK버튼을 클릭하면, 신규 데이터베이스가 생성된다.
3. 데이터베이스 연결 설정을 해주어야 한다. c:\rails\cookbook\config\database.yml 파일을 열고, 그림 20과 같은 설정을 입력하자.
그림 20. database.yml에 DB 설정(역자 주 : Rails 버전에 따라서 세부적인 설정내용이 차이날 수 있음. 대세에는 지장이 없음.)
Rails는 development, test, production 모드를 다르게 설정할 수 있지만, 여기서는 모두 동일하게 설정한다. 신규 데이터베이스를 반영하기 위해서는 기존 웹서버를 종료하고, 다시 시작해야 한다