Ruby on Rails」입문
by Paul Adams  05 Sep 2005 (JP)


Page 1 : Ruby의 매력
--------------------------------------------------------------------------------
폴·아담스는 웹 멍키에 정착하고 있어 ,PHP나DNS에SOAP같은 약어계 기술이라면 무엇이든지 잘 하는 있고의 터무니 없고 냉정 침착한 쿨 사나이.

로즈메리의 향기나 감도는 거품 목욕탕같은 것에(이) 잠겨 느긋하게 쉬면서 , 특주의 새빨간 노트 PC로 이 튜토리얼을 읽거나 하고 있다 , 거기의 너. 혹시 , 이런 식으로 생각하지 않겠어? 「인터프리터형의 프로그램 언어는 , 이제 와서 필요없어. 「Perl」이나 「PHP」은 어떻게든 사용할 수 있고 , 「Python」이래 조금은 할 수 있다. 거기에 「UNIX」의 셸 스크립트도 있다. 이제(벌써) 충분할 것이다에. 어째서 그리고 「Ruby」이 화제가 되고 있어?」(은)는. 무엇을 숨기자 , 나도 그렇게 생각하고 있었어.

Ruby(은)는 , 일본이90연대에 낳은 최고 걸작의 하나. 무엇보다 , 미국에서 각광을 받게 된 것은 , 바로 최근의 일이지만. Ruby(은)는 , 순수한 객체 지향의 언어. 정수나 캐릭터 라인이라고 한 것에까지 고유의 메소드나 프롭퍼티가 있어 , 예를 들어print "Webmonkey".reverse하면 , 「yeknombeW」이라고 표시시킬 수가 있다. 그리고 , 실로 상쾌한 언어로 , 유연하고 직감적인 문법은 읽기 쉽고 , 게다가 쓰기 쉽다. Perl(이)나C의 경험자에게는 , 아주 쾌적할 것이다. 게다가 ,Ruby는 습득이나 활용이 간단할 뿐(만큼)이 아니고 , 그 과정이 즐거워. 독특한 입문 사이트 「Why's (Poignant) Guide to Ruby」따위를 사용하면(자) , 소설가스타니스와후·렘(Stanislaw Lem)과 화가에드워드·리어의 합작일까하고 의심해버릴 같은 , 기상 천외한 모험 이야기에 마음을 빼앗기고 있는 동안에 , 어느새인가Ruby를 습득할 수 있어버린다. 하는 김에 ,Ruby에 대한 애정까지 기르는 것까지 할 수 있어버리는 다. 웹 멍키의 편집부도 , 이 사이트의 작자에게 기사를 써 주면 어떨까?



「Ruby on Rails」입문
by Paul Adams  05 Sep 2005 (JP)


Page 2 : Rails의 매력
--------------------------------------------------------------------------------
Ruby에 주목이 모여 있는 배경에는 , 「Rails」의 존재가 있다. Rails(은)는 ,Ruby을 사용해 웹·어플리케이션을 만들기 위한 체제. Ruby(와)과Rails를 조합한 「Ruby on Rails」은 , 「베이스 캠프」(Basecamp)나 「백 팩」(Backpack)이라고 한 , 주목도의 높은 사이트에서도 사용되고 있다. 그런Rails것 매력을 봐 가자.

우선 ,Rails은 ,Ruby이라고 웹을 붙이기 위한 단순한 접착제가 아니다. 원래 ,Rails를 사용하지 않아도 ,Ruby그리고 웹 어플리케이션을 작성하는 것은 가능하다. 「아파치」(Apache)를 설정해 ,Ruby의 스크립트를CGI경유로 호출하면 된다. Rails(은)는 말하자면 , 프로그래밍을 위한 공구상자같은 것. 데이타베이스에 연동한 사이트전용으로 , 사이트의 뼈대나 잘 사용하는 기능무슨코드를 풍부하게 제공해 준다. 즉 ,Rails을 사용하면 , 데이타베이스 연동 사이트를 구축하기 전에 필요한 준비작업을 큰폭으로 단축할 수 있다. 그리고 그 뼈대에 따라 , 빈틈없이 한 , 착실한 코드를 쓰는 것이 요구되어 결과적으로 사이트 제작이 꽤 간단이 된다. 말해 보면 , 제대로 조직 선 회사에서 일하는 것 같은 것일까. 어디에 누가 있어 , 무엇을 하고 있는지 파악하기까지 다소 시간이 걸리지만 , 일단 나누어 버리면 , 나머지는 세들로 한 관리면의 문제에 하나 하나 번거롭게 해지는 것이 없다고 끓어라.

Rails(은)는 , 소프트웨어 설계 모델의1개인 「모델·뷰·콘트롤러(Model-View-Controller)」(MVC)스타일의 아키텍쳐를 채용하고 있다. MVC그럼 , 데이타베이스의 데이터나 정보를 표현한 「모델」이라고 , 유저·인터페이스의 「뷰」, 그리고 기능 논리의 「콘트롤러」의3개가 , 명확하게 나뉘고 있다. 이 아키텍쳐의 이점에 관해서는 ,여러 가지 논의가 있다. 하지만 , 확실하고 있는 것은 , 어수선하고 있어 이식이 어렵고 , 공유도 할 수 없는 것 같은 어플리케이션을 만들려고 해도 , 상당히 노력하지 않는 한 그렇게 흉내내고는 할 수 없다는 것이다.

게다가 ,Rails는 뭐니뭐니해도 간단하다. 웹상이 도달하는 곳에 , 그 증언이 발견될 것. 「Ruby on Rails은 보는 것도 처음이었는데 , 그 날 동안에 모바일용의 소셜l 네트워크 기능을 갖춘 옥션 사이트를 만들어 버렸다. 소요 시간은6시간. Ajax대응의 태스크 관리 프로그램을 만들고 있는 여가에야!」(은)는 상태다.

Rails의 메리트가 어디에 있을까는 차치하고 , 최근은 「레이르즈데이」(Rails Day)같은 이벤트도 있어 , 더욱 더 분위기를 살리고 있다. 이 이벤트는 , 개발자들이 수백명의 규모로 모여 ,24시간 내구의 웹 어플리케이션 개발을 했다. 이렇게 되면(자) , 함께 붐을 타 버리자가 아닌가!
 



Ruby on Rails」입문
by Paul Adams  05 Sep 2005 (JP)


Page 3 : Ruby and Rails의 인스톨
--------------------------------------------------------------------------------
기존의 웹 서버의 구성에Rails를 짜넣으려면,CGI나 「FastCGI」을 경유해 「아파치」(Apache)상에서Rails를 달리게 하면 좋다. 그리고 ,Rails에는 웹 서버·소프트웨어의 「WEBrick」이 부속되어 있어 , 이것도 편리하게 여긴다. WEBrick(은)는Ruby으로 기술한 것으로 , 디폴트에서는 포토3000차례 경유로 브라우저로부터 액세스 할 수 있다. 이것은 ,Ruby on Rails(길기 때문에 지금부터RoR라고 쓰기로 하자)어플리케이션을 , 개발 머신상에서 테스트하는데 편리하다.

스스로 웹 서버를 관리하고 있는 스마트한 사람은 , 우선Ruby을 , 그리고 다음에Rails를 인스톨해 주었으면 한다. 「MySQL」이나 「PostgreSQL」을 이용한 데이타베이스도 필요하게 되므로 , 잊지 마세요. MySQL의 인스톨에 대해서는 , 「PHP/MySQL튜토리얼 --레슨1」을 참고에 부디. 그리고 ,Rails환경을 정돈하기 위한 자세한 설명이 ,공식 페이지의 인스톨 안내에 써 있으니까 , 읽어 보면 좋다. 더 이상은 바랄 수 없다고 정도 친절하고 자상함 정중하게 , 플랫폼별의 설명이 실리고 있다. 자기 부담의 서버가 아니고 , 호스팅 서비스를 사용하고 있는 경우 , 렌탈 서버의 세계에서는 ,Perl이나PHP(정도)만큼Rails은 일반적이지 않아서 , 각각 개별의 대응이 필요하게 될 것이다. 서비스업자에게Rails를 인스톨 하도록(듯이) 부탁하는 것도 좋아. 스스로Rails를 인스톨 해 , 생기는 문제에 스스로 대처해 나가는 것도 좋아. 그러한 귀찮음은 차치하고 우선 소지의 「윈도우즈」(Windows)기로Rails를 만져 보고 싶다고 하는 사람에게는 , 소프트웨어 개발의 베테랑으로 , 새로운 기술에도 항상 눈을 번뜩거릴 수 있고 있는 카트·힙브스씨가철저하게 설명해 주고 있으니 참고로 해 보면 좋겠다. 처음은 부속의 웹 서버로부터 시작해 , 나중에 실제로 사용하는 아파치 서버용으로 설정 다시 해도 괜찮을 것이다.

RoR(을)를 사용한다

방법은 어떻게 저것 , 일단RoR을 시스템에 인스톨 하면(자) , 나머지는 매우 간단하다. 시험삼아 기본적인 어플리케이션을 짜기로 하자. 북마크 관리 프로그램은 어떨까? 여기에서는 촉감의 부분을 해 볼 뿐(만큼)이니까 , 실제로 풀 기능 장비의 북마크 관리 프로그램을 짜고 싶은 것 같아 는 사람은 , 나쁘지만 타처를 맞으면 좋겠다. 나가 할 수 있는 것은 낚시를 가르치는 것만으로 , 낚시한 물고기를 훌륭한 요리로 짓는 것은 자네들의 일이 된다.

스톱 시계의 준비는 좋겠어? 사이트를 시작하는데 얼마나 시간이 걸릴까 재어 보기로 하자.



「Ruby on Rails」입문
by Paul Adams  05 Sep 2005 (JP)


Page 4 : 데이타베이스의 셋업
--------------------------------------------------------------------------------
우선 ,MySQL의 데이타베이스를 만들자. 이 데이타베이스를 사용해 ,Rails가 북마크를 보존하게 된다. 그런데 ,Rails는 데이타베이스에 관해서 조금 시끄럽다. 대부분의 경우 , 테이블의 프라이머리 키가 , 컬럼명 「id」으로 자동 인크리먼트(increment) 속성의 정수치를 격납하는 필드이며 , 게다가 테이블의 이름은 복수형 , 즉 「s」으로 끝나는 이름으로 하는 (분)편이 , 적당하다. 여기에서는 , 테이블의 이름을 「bookmarks」이라고 하자. Rails그리고 , 기르고 있는 거위를 정리하고 싶다고 사람에게는 공교롭게도님. 이 테이블에는 , 북마크의 것URL과 이름 , 거기에 북마크의 내용 설명을 거두고 싶다. 그러면 ,MySQL의 커멘드 라인·인터페이스를 사용해 데이타베이스를 작성하자.

mysql> CREATE DATABASE bookmarker;

그리고 그 중에 테이블을 작성해 내용을 설정한다.

mysql> USE bookmarker;
mysql> CREATE TABLE bookmarks (
-> id SMALLINT (5) NOT NULL auto_increment,
-> url VARCHAR (255),
-> name VARCHAR (100),
-> description VARCHAR (255),
-> PRIMARY KEY (id)
-> );

물론 , 비주얼·인터페이스를 사용할 수 있는 환경을 가지고 있다면 , 마우스를 사용해 , 좀 더 근사한 방식으로MySQL를 관리해도 상관없어.
 



「Ruby on Rails」입문
by Paul Adams  05 Sep 2005 (JP)


Page 5 : 어플리케이션의 작성
--------------------------------------------------------------------------------
그러면 마술을 시작하기로 하자. 어떤Rails어플리케이션을 만든다고 해도 , 데이타베이스의 준비를 할 수 있으면(자) , 시작으로 기본으로 되는 체제를 작성하지 않으면 안 된다. 새로운 디렉토리를 만들어 거기로 이동해 , 커멘드 라인에 마법의 말을 입력하자.

rails Bookmarker

그러자(면) ,Rails이 자동적으로 「Bookmarker」이라고 하는 이름의 디렉토리를 만들어 준다. 이 안에는 , 우리들이 지금 작성 도중 의 어플리케이션을 구성하는11의 서브 디렉토리가 들어가 있다. 조금 멈춰 서 ,Rails어플리케이션안이 어떻게 되어 있을까 들여다 보기로 하자.

$ ls Bookmarker
CHANGELOG README Rakefile app/ components/ config/ db/ doc/ lib/ log/ public/ script/ test/ vendor/

디렉토리public는 , 이 어플리케이션의 겉(표)의 얼굴이다. 즉 , 어플리케이션을 구성하는 디렉토리 중(안)에서 , 웹 서버가 액세스 하는 것은 여기만으로 된다. 이 디렉토리에는 , 브라우저와 어플리케이션이 사이를 주선하는 스크립트 외에 , 화상이나JavaScript,CSS의 파일을 치우기 위한 디렉토리도 들어가 있다.

디렉토리app에는 , 어플리케이션의 본체가 되는 부분이 막히고 있다. 조금전에 설명한 , 몇개의 요소도 이 안이다. 모델이라든가 뷰라든가는 이야기는 기억하고 있어?

ls Bookmarker/app
apis/ controllers/ helpers/ models/ views/

그리고 , 여기의controllers디렉토리에는 , 작성중의 어플리케이션을 움직이는Ruby의 코드가 , 한층 더models디렉토리에는 데이타베이스의 기술이 각각 들어가 있다. 그리고 디렉토리views안에 있는 것은 , 「.rhtml」의 확장자(extension)를 가진 템플릿 파일이다. 이 템플릿 파일은 , 각각의 메소드가 출력하는HTML파일의 기술을 제어한다. 어플리케이션이 가지는 메소드1개에 대해 , 대응하는 템플릿은 각각1개다.

그리고는이라고 하면(자) , 디렉토리log에는 로그 파일이 , 그리고 디렉토리doc에는 문서가 들어간다. 디렉토리script에 들어가 있는 것은 ,Rails을 이용할 경우에 이용하는 편리한 실행 가능 스크립트로 , 디렉토리config에는 설정 정보가 들어간다. 자 조속히 , 그 설정으로 옮기자.

「config/database.yml」파일은 「YAML」형식의 파일로 ,Rails에 데이타베이스의 정보를 전하기 위한 것이다. 이 파일을 텍스트 편집 프로그램으로 열려 , 전의 페이지로 설정한 데이타베이스를 읽어들이도록(듯이) 써 바꾸자.

development:
adapter: mysql
database: bookmarker
host: localhost
username: root
password: s3cr3t

다음에Rails부속의 툴의1개를 사용해 , 어플리케이션의 교통편을 생성한다.

$ ruby ./Bookmarker/script/generate scaffold Bookmark

모델은 머리 글자가 대문자이지만 , 콘트롤러는 그렇지 않다. 그렇지만 , 이유는 (듣)묻지 않고 보내라. 자신은 머리 글자가 소문자의 , 독창적인 원조 얼터너티브 밴드 「fIREHOSE」을 지렛대로 해 , 시너지(synergy)효과를 기대할 수 있는 엔터프라이즈·솔루션을 제공하는 어플리케이션을 만든다고 사람은 , 뭐 자기책임으로 해 보았으면 좋겠다.

이것으로 콘트롤러와 모델 , 거기에 몇개의 뷰가 생겼다. 다음에 ,Rails내장의 웹 서버WEBrick를 기동해 보자. 3000차례 포토 경유로 , 방금 「완성된(, 정말로! )」사이트를 체크할 수 있다. 만약을 위해 말하지만 ,WEBrick와의 사이에 파이어 월을 두지 않게.

$ ruby ./Bookmarker/script/server

소지의 브라우저로 「http://your.host.name:3000/bookmarks」에 액세스 해 보자. 「your.host.name」의 부분은 자신의 환경에 맞추고 써 바꾸자. 그것과 「bookmarks」은 의 가콘트롤러의 이름이니까. 그런데 그런데 그렇다면 , 어머 불가사의! 북마크 관리 프로그램이 움직이고 있는이 아닌가. 단1행 박은 것만으로 짜서 이루어진 교통편이었지만 , 벌써 북마크를 작성하거나 삭제 , 편집하는 기능이 갖춰지고 있다. 네 , 여기서 스톱 시계를 멈추자! 간단하다고 이야기를 납득할 수 있었는지? 그리고는 이것을 커스터마이즈 할 뿐이다.




「Ruby on Rails」입문
by Paul Adams  05 Sep 2005 (JP)


Page 6 : 어플리케이션의 커스터마이즈
--------------------------------------------------------------------------------
작성한 어플리케이션에는 북마크의 작성 , 편집 , 삭제등이라고 하는 기능이 갖춰지고 있어 , 그 기능은 모두 ,Ruby의 메소드로서app/controllers/bookmarks_controller.rb로 정의하고 있다. 결과는 ,models디렉토리에 있는.rhtml의 확장자(extension)를 가진 템플릿에 따라 표시한다. 이러한 파일을 커스터마이즈 해 나가면 , 표시 , 편집 , 삭제라고 하는 기본적인 기능 밖에 가지지 않는 데이타베이스의 프론트엔드를 , 태스크 관리 프로그램의 「Ta-da List」같은 것으로 해 갈 수가 있다. 이것이야말로 ,Rails어플리케이션 개발의 핵심이라고 해도 괜찮을 것이다. 여기에서는 우선 , 클릭하면(자) 대상URL으로 점프 하는 링크를 , 각 북마크에 추가하기로 하자. 그러기 위해서는 ,views디렉토리중에서list.rhtml를 찾아내 , 이것으로 변경을 더한다.

Ruby의.rhtml템플릿은 , 「매입형Ruby」으로 써 있다. 즉 ,<%=태그나<%태그를 사용해 ,Ruby의 코드를HTML문서에 묻고 있어. Ruby의 출력을 브라우저에 표시하는 경우에는<%=태그를 사용해 ,Ruby의 메소드를 실행하는 것만으로 굳이 표시하고 싶지 않은 경우에는<%태그를 사용한다. 거기서list.rhtml를 보면(자) , 다음과 같이 되어 있다.

<td><%= link_to 'Show', :action => 'show', :id => bookmark %></td>
<td><%= link_to 'Edit', :action => 'edit', :id => bookmark %></td>

상기의 코드는 , 데이타베이스의 테이블에 거둘 수 있었던 북마크 마다 실행한다. 그 때 ,Ruby의 「link_to」메소드를 사용해 , 각 북마크에 대해 ,show메소드와edit메소드를 호출하는 링크 태그를2개 생성한다. 북마크 대상의 페이지에 점프 하는 링크도 , 각각의 북마크 마다 표시하도록 , 여기에 코드를 추가하자.

<td><%= link_to 'Open', bookmark["url"] %></td>

이만큼으로 , 북마크의 각URL치를 타겟으로 한 링크를 만들어 준다. 텍스트 표시는 「Open」이 된다.

이번에 이 튜토리얼은 최종회이지만 , 안녕 하기 전에 좀 더 복잡한 예도 봐 두자. 북마크 관리 프로그램은 , 유저 자신이URL를 입력하게 되어 있다. 그러니까 , 링크로서 처리하기 전에는 ,URL이 「http://」으로 시작되어 있을까 정도의 체크가 , 적어도 필요하다. Rails(은)는 많이 있는 편리 기능의1개로서URL를 체크하는 구조를 갖추고 있다. models/bookmark.rb위에서 , 클래스 정의에 다음의 메소드 호출을 추가해 보면 좋겠다.

validates_format_of :url, :with => /^http\:\/\//, :message => "needs to begin with 'http'."

이렇게 해 두면 , 북마크 작성시에 , 메소드가 정규 표현과 대조해URL의 표기를 체크해 준다. URL하지만 「http://」으로 시작되지 않은 경우에는 , 약간의 에러 메세지를 표시한다. 「validates_format_of」메소드에 관해서는 ,Rails의 사이트에설명이 있는으로부터 참고에 부디.

이제 슬슬 마감 시간이 될 것 같다. 그리고는 , 각자 이 어플리케이션을 자꾸자꾸 닦아 가면 좋다. 거의 독학으로 완성되기 때문에 ,Ruby에 대한 공부도 계속하기를 원하는데. public/stylesheets/scaffold.css에 스타일 시트를 추가하는 것도 좋아 , 콘트롤러에 새로운 기능을 추가하는 것도 좋아. 데이타베이스·모델을 개량하거나Ajax의 북마크 렛을 채용하거나라고 기분이 향하는 대로 여러가지 해 나가면 좋지 않을까.

마지막 통계. Rails에는 , 기능을 기념하여 송신 버튼에 자동적으로 이름을 날리거나 하는 돌보기가 좋음이 있다. 한편의 것Ruby은 , 기분에 필요없는 메소드는 무엇으로 저것 고쳐 써 가능하다고 말하는 유연성을 가지고 있다. 이2개는 완전 무적의 콤비다. 거기에Ruby는 처리가 직관적이니까 , 어플리케이션의 교통편이 되는 기초의 작성 단계로부터 완성까지 , 즐기면서 단시간에 할 수 있다. 만약Rails을 , 프로젝트의 방식에 이치이치 트집을 잡는 난폭한 형도 생각하고 있다면 , 그것은 아마 ,Rails라고 너의 양쪽 모두가 , 좀 더 어른이 되지 않으면이라는 것(일)이 아닐까.


 


http://j2k.naver.com/j2k_frame.php/korean/hotwired.goo.ne.jp/webmonkey/2005/36/index4a_page6.html

신고
Posted by The.민군


티스토리 툴바