정말 간만에 쓰는 포스팅이다 -_-;
최근 한동안 말려서 숙제고 시험공부고 예습복습이고 다 때려치고 삽질에 삽질을 거듭했던 Ruby on Rails에 대해 간단하게 포스팅해보려고 한다.
개인적으로 두 개의 사이트를 RoR로 만들어보았다.
이 때 정말 뼈저리게 느꼈던 것이... RoR에 대한 단편적인 정보나 사전적 정의가 실린 곳은 많지만, 실제로 처음 접하는 사람이 할 수 있는 정보가 실린 곳은 거의 전무했다. 그래서, 여기다가 쓸 RoR관련 글은 내가 실제로 만들어봤던 두 개의 홈페이지를 만들면서 느꼈던 것에 대해서 쓸 것 같다.
최근 한동안 말려서 숙제고 시험공부고 예습복습이고 다 때려치고 삽질에 삽질을 거듭했던 Ruby on Rails에 대해 간단하게 포스팅해보려고 한다.
개인적으로 두 개의 사이트를 RoR로 만들어보았다.
이 때 정말 뼈저리게 느꼈던 것이... RoR에 대한 단편적인 정보나 사전적 정의가 실린 곳은 많지만, 실제로 처음 접하는 사람이 할 수 있는 정보가 실린 곳은 거의 전무했다. 그래서, 여기다가 쓸 RoR관련 글은 내가 실제로 만들어봤던 두 개의 홈페이지를 만들면서 느꼈던 것에 대해서 쓸 것 같다.
- Ruby on Rails란?
사실, 이 파트에는 뭘 써도 도움이 되지 않는다. 가장 완벽하고 가장 정확한 정의는 여기저기를 다녀보면 쏟아져 나올 것이다 -_-;
그런 의미에서, 여기다가는 간단하게 몇 마디만 적는 것으로 하겠다.
일단 Ruby는 프로그래밍 언어이고, Rails는 홈페이지 프레임워크이다. 그리고 Rails는 DB에 레코드를 추가, 수정, 삭제, 조회하는 홈페이지를 만들 때 최적화되어 있는, 그리고 Model-View-Controller 구조를 가진 프레임워크이다. 실제로, 간단한 BBS를 만들 생각이라면 ”마치 Zeroboard 등과 같은 게시판 프로그램을 가지고 홈페이지를 만드는 듯한 기분으로” 만들 수도 있다. - Ruby on Rails의 준비
일단 루비에서 돌아가는 레일스라는 단어 그대로, Ruby와 Rails를 모두 설치해 줄 필요가 있다.
공식 홈페이지(Ruby: http://www.ruby-lang.org/ko/, Ruby on Rails: http://www.rubyonrails.org/)에서 다운받을 수도 있고, ubuntu와 같은 Debian 계열이라면 apt-get install ruby, apt-get install rails로 설치할 수 있을 것이다. 그리고 루비 쓸 때 자주 필요하게될 gem도 같이 깔면 좋을 것이다. - Ruby on Rails 시작
적당한 디렉토리로 이동한 뒤 rails 사이트-이름 을 수행하게 되면 rails 사이트가 생기게 된다. 그리고 무언가 알 수 없는 목록이 주룩주룩 지나가는데, 이것은 rails 사이트에 필수적인 골격 파일들을 생성하는 과정이다.
생성이 끝났으면 앞서 지정했던 사이트 이름과 동일한 이름의 디렉토리가 생겨 있다. 테스트를 위해서는 그 안에 들어 있는 script/server 를 실행하면 된다. 단, 이 경우에는 리스닝 소켓이 127.0.0.1에 바인드되는 것인지, 로컬에서는 접속이 가능하지만 외부에서는 접속이 불가능해 귀찮아진다. 그렇다고 아파치를 쓰기에는, 써 보면 알겠지만 정상적으로 서비스하기엔 너무 느리다.
그래서, 조금 이르지만 mongrel을 설치해준다. 우분투의 경우 apt-get install mongrel로 설치가 가능하다. 관리자 권한으로 사이트 디렉토리에서 다음과 같이 타이핑해준다.$ mongrel_rails start -e development -d -p 원하는-포트
일단은 개발버전으로 실행을 시켜준다. 이렇게 하면 상당히 빠른 속도로 돌아가는 rails를 볼 수 있다. 단지 단점은, 새로운 컨트롤러나 모델을 추가시켰을 경우 갱신이 되지 않는다는 문제가 있긴 하지만, 이건 서버를 재시작해줌으로써 해결이 가능하다.
이제 서버로 접속해 보면 다음과 같은 화면을 볼 수 있을 것이다. - 디렉토리 구조
site/- app/ - 이 아래에 실제 프로그램들이 들어간다.
- controllers/ - 액션 컨트롤러 객체들이 들어간다. (Controller에 해당)
- helpers/ - 액션 헬퍼 객체들이 들어간다. (View에 해당)
- models/ - 액티브 레코드 객체들이 들어간다. (Model에 해당)
- views/ - 액션 뷰의 스킨? 비슷한 파일들이 들어간다. (View에 해당)
- config/ - 이 아래에는 rails 어플리케이션의 설정들이 들어있다.
- database.yml - DB에 대한 설정들이 들어있다.
- routes.rb - rewrite rule 비슷한 것이 들어가 있다. 즉, request 받은 주소를 어떻게 분석해서 controller에게 넘겨줄지를 결정한다.
- db/ - migration과 현재 db scheme이 들어간다.
- migrate/ - migration들이 들어간다.
- scheme.rb - 아마도 migration을 통해 변경된 db scheme이 저장되는 듯하다.
- log/ - 각종 로그가 들어간다.
- public/ - 웹사이트의 root가 된다. 기본적으로 여기에 파일이 있으면 ActiveController는 호출되지 않는다. ActiveController를 통하지 않고 직접 파일을 내려받는다면 이쪽에 올려서 받게 하면 된다.
- script/ - 여러가지 스크립트가 들어있다.
- console - 콘솔 모드에서 rails 어플이 돌아간다. 쉽게 말해, 열심히 만들어놓은 액션 컨트롤러, 헬퍼, 액티브 레코드 등의 객체를 테스트해볼 수 있는 콘솔을 띄워준다.
- destroy - 생성시킨 controller, view, model, scaffold, migration 등을 제거할 수 있다.
- generate - controller, view, model, scaffold, migration 등을 생성할 수 있다.
- server - 테스트용 WEBrick 서버를 실행시킬 수 있다.
- MVC 소개
- ActionController
- 기본적으로 rails 어플리케이션에 속한 각각의 홈페이지는 이 ActionController와 연결이 되어 있다. 일정한 URL을 request하면 그 URL을 파싱하여 해당하는 ActionController의 action method를 호출한다. 보통은 다음과 같은 URL을 요청했을때
http://www.example.com:3000/aaa/bbb/n
rails는 app/controllers/aaa_controller.rb의 AaaController 클래스의 bbb method를 실행시킨다. 그리고 params 배열에 :id => n 쌍을 추가시켜준다. n이 생략된 경우는 이 쌍이 추가되지 않고 bbb가 생략된 경우 index인 것으로 한다. aaa까지도 생략하려면 routes.rb 파일을 수정해주면 된다. - ActionView
- action method를 수행시킨 다음에 app/views/aaa/bbb.html.erb (Rails 2.0.2 기준. 예전 버전은 bbb.rhtml 이었던 것 같음) 파일을 처리해서 클라이언트에 돌려준다. 이 부분이 ActionView와 관련이 있다.
- 이 녀석은 딱히 상속받는 객체는 없는 것 같다. 실제로도, helpers와 views에 있는 파일들이 관여하긴 하지만 ActionView 클래스를 직접 건드리지는 않는다.
- include를 통해 helpers에 있는 매칭되는 모듈을 삽입하는듯하다. 그 덕분에 views에 있는 html.erb 파일에는 로직을 하나도 넣을 필요가 없다. 애초에 그렇게 디자인 되어있기도 하고.
- erb 모듈을 이용해서 처리하는 듯 하지만 확인해보지 않았다. 아마도 확실할 것이다. 확장자가 그모양이니...
- ActiveRecord
- 굉장히 편리한 녀석이다.
- 상속받은 클래스의 이름의 복수형과 같은 이름의 테이블과 연관된다. 일단 모두 소문자로 되는 것으로 보아, 낙타등 표기법에서 소문자와 언더바로 바뀌는듯하다.
- 새로운 레코드를 만들 때는 레코드 객체를 생성한 뒤 save 메소드를 실행시키는 것으로 DB에 등록할 수 있다.
- 레코드를 조회할 때에는 find 메소드를 정적으로 불러주면 된다. :all를 패러미터로 넣으면 모든 레코드가 조회되고 :first를 넣게 되면 첫 번째 하나의 레코드만 조회되어 배열이 아닌 상태로 넘겨진다.
- 레코드를 업데이트 할 때에는 find나 new로 얻어진 레코드에 적절한 처리를 한 뒤 save를 호출하면 된다.
- 레코드 내부의 각 컬럼에 접근하고 싶으면 그 컬럼 이름의 멤버변수에 접근하듯이 해주면 된다.
- 각 레코드간 소유 관계를 설정해 줄 수 있다. has_one, has_many, belongs_to 이 세 가지로 처리가 가능하다.
'프로그래밍 > Ruby' 카테고리의 다른 글
| Ruby-GNOME2 0.18 One-Click Installer for Windows (0) | 2009/10/20 |
|---|---|
| rubyscript2exe 로 ruby-gnome2를 이용한 어플 패킹하기 (2) | 2009/02/02 |
| GMemRB 공개 (0) | 2009/02/01 |
| Ruby-GD2 in WIN32 (0) | 2008/12/23 |
| Ruby-GNOME2 (0) | 2008/12/09 |
| Ruby on Rails (0) | 2008/05/28 |
