저자 Richard Monson-Haefel
Rails는 매우 쉽고 편리한 프레임워크 이지만, 다른 테크놀로지와 마찬가지로 마스터하는데 시간이 필요합니다.
게시일: 2006년 4월
이미 Ruby on Rails에 대한 소식을 들으셨을 줄 압니다. Rails는 웹 개발자 커뮤니티, 특히 J2EE/PHP 개발자들 사이에서 센세이션을 불러일으키고 있는 새로운 애플리케이션 프레임워크입니다.Rails 는 상당한 잠재력을 가진 애플리케이션 플랫폼으로, 불과 2년 사이에 J2EE/PHP 프로그래머들 사이에서 큰 반향을 불러 일으키는데 성공하였습니다. Rails가 제공하는 장점을 고려한다면 이러한 반응이 결코 놀랄 일은 아닙니다. 특히, Rails는 누구나 인정할 만큼 엄격한 모델-뷰-컨트롤러(model-view-controller) 아키텍처를 사용하고 있으며, 이 때문에 J2EE 개발자들 사이에서 높은 인기를 얻고 있습니다. 또 다른 한편으로, Rails를 이용한 기본적인 시스템의 개발이 매우 쉽고 간단하다는 점에서 PHP 개발자들 사이에서 인기를 누리고 있습니다.
하지만, 데이터베이스 관점에서 보았을 때 Rails는 몇 가지 심각한 제약 사항을 안고 있습니다. Rails는 데이터베이스 레이아웃과 애플리케이션 요구사항에 대해 지나칠 정도로 많은 가정을 수행합니다. 한 예로, Rails는 모든 테이블이 단일 비조합형(non-compound) 프라이머리 키를 사용한다고 가정합니다. 따라서 조합형 프라이머리 키는 지원이 불가능합니다! 또 Rails는 2 단계 커밋을 지원하지 않으며, 단이 데이터베이스 백엔드에서만 사용이 가능하도록 설계되어 있습니다.
본 문서는 Rails를 과대평가하거나 평가절하하지 않고, 단순히 테크놀로지에 대한 개요를 제공하기 위한 목적에서 작성되었습니다. 본 문서는 Rails에 대한 찬사와 비난을 모두 포함하고 있습니다. (Rails 옹호자의 입장에서) Rails에 대한 필자의 비판이 지나치다고 생각되는 부분도 있을 수 있습니다. 하지만 J2EE, ASP.NET, PHP 등 어떤 환경에서든 웹 애플리케이션 프레임워크의 적용은 까다로운 작업일 수 밖에 없습니다. 장기적으로 볼 때 다른 웹 애플리케이션 개발 플랫폼보다 Rails가 높은 생산성을 제공하는 것으로 판명될 수도 있겠지만, 그 비결을 터득하기까지는 어느 정도 시간이 필요합니다.
Ruby란 무엇인가? Rails란 무엇인가?
Ruby 는 Perl, Python, Smalltalk와 여러 가지 측면에서 유사성을 갖는 다이내믹 프로그래밍 언어입니다. Java와 PHP 프로그래머들은 Ruby를 비교적 쉽게 터득하고 Ruby의 강력한 옹호 계층을 형성하고 있습니다. 또 마이크로소프트 세계에서 잘 알려진 돈 박스(Don Box)와 같은 이 역시 이 언어의 매력에 빠져들고 있습니다.
Ruby 는 새로운 기술이 아닙니다. Ruby는 1993년 고안되었으며, 따라서 1995년 최초로 공개된 Java, PHP보다 오랜 역사를 갖고 있습니다. 따라서 Ruby는 성숙도 면에서 뛰어남에도 불구하고 다른 언어에 비해 높은 인기를 누리지 못했습니다. 이러한 이유로, Ruby의 주변 환경은 Java, PHP, Perl 만큼 풍요롭지 못하며, Ruby에 관련한 프레임워크, 라이브러리, 전문 서적, 웹 사이트, 블로그 등의 리소스도 드문 편입니다.
하지만 최근 들어 David Heinemeier Hanson이 (Ruby의 역사상 가장 인기 있는 애플리케이션이 되어 버린) Rails 프레임워크를 공개한 이후로, Ruby 커뮤니티의 마케팅 파워는 급상승하기 시작했습니다. Rails는 Ruby 프로그래밍 언어를 웹 개발을 위해 특화된 도메인 단위의 언어로 확장할 수 있게 합니다. 또 ActiveRecord와 같은 익스텐션을 이용하여 Ruby를 오브젝트-관계형 퍼시스턴스에 적용하는 것도 가능합니다. Rails이 조합형 프라이머리 키와 2단계 커밋을 지원하지 않는다는 문제를 제외했을 때, Ruby의 도입에 가장 큰 걸림돌이 되는 것은 아마도 새로운 언어를 배워야 한다는 부담일 것입니다. 새로운 언어를 배운다는 것은 매우 흥미롭기도 하지만 또 한편으로 무척 어려운 일이기도 합니다.
하 지만 여러분의 경력을 개발하는 것이 주된 관심사라면, 필자로서는 Ruby보다 적절한 언어를 추천하기 어렵습니다. Ruby는 상업적 이해관계에 휘둘리지 않은 채로 개발자 커뮤니티에서 지난 10 년간 축적된 성과를 함축하고 있는 언어입니다. 그 결과로 Ruby는 매우 다루기 즐거운 언어가 되었을 뿐 아니라 많은 경우 Java, C, Microsoft .NET 언어보다 수십 배 뛰어난 생산성을 제공합니다. (예외적인 경우로 IronPython을 생각할 수 있습니다. IronPython은 Python을 Microsoft .NET 환경에 포팅한 다이내믹 언어로, Ruby와 마찬가지로 뛰어난 생산성을 제공합니다.)
Rails는 어떻게 활용되는가?
Rails 는 관계형 데이터베이스 백엔드를 사용하는 다이내믹 웹 사이트의 생성을 위해 설계된 플랫폼입니다. Rails는 Ruby 프로그래밍 언어에 키워드를 추가하여 웹 애플리케이션의 설정을 용이하게 합니다. 또 Rails는 기존 데이터베이스 스키마로부터 (다소 거칠지만) 완결된 형태의 웹 애플리케이션을 자동으로 생성하는 기능을 제공하도록 설계되었습니다. 이 기능은 Ruby의 가장 뛰어난 장점이자 동시에 아킬레스 건이기도 합니다. Rails는 데이터베이스 스키마의 명명법(naming convention)에 대해 가정을 수행합니다. 이 가정이 올바르다면, 단 하나의 커맨드만으로도 기본적인 웹 사이트를 성공적으로 생성할 수 있습니다. 하지만 이를 위해 추가적인 설정이 필요할 수도 있고, 경우에 따라서는 아예 불가능할 수도 있습니다. 물론 데이터베이스에 대한 Rails의 가정을 무효화할 수도 있지만, 가정되는 내용이 적어질 수록 플랫폼의 생산성 또한 저하됩니다. Rails가 신규 데이터베이스를 포함하는 애플리케이션을 새로이 개발하는 경우에 특히 유용한 이유가 여기에 있습니다. 아쉽게도, Rails는 레거시 시스템에 관련해서는 훌륭한 솔루션이 되기 어렵습니다.
Rails를 이용하여 신규 애플리케이션을 개발하는 과정을 예로 들어, 그 효과를 확인해 보기로 합시다. 이미 오라클 데이터베이스가 설치되어 있는 환경이라면, 불과 15 분 만에 전체 웹 애플리케이션을 생성할 수 있습니다. 아래에서는 Ruby on Rails를 사용하여 제품 카탈로그를 생성하는 방법을 예시하고 있습니다.
예제: 간단한 제품 카탈로그의 생성
작 년, 필자는 1946년 이후 발매된 HG 코믹 북을 수집하면서, 구입 또는 판매된 만화책 정보를 업데이트하기 위한 간단한 Ruby on Rails 데이터베이스 애플리케이션을 작성하였습니다. 이 애플리케이션은 개인적인 용도로만 사용되는 것이었으므로 그 구조를 매우 간단하게 가져갈 수 있었습니다. 본 문서에서 예시되는 애플리케이션은, 필자가 집에서 사용 중인 Ruby on Rails 애플리케이션의 간소화된 버전입니다.
Rails과 오라클 데이터베이스는 다양한 플랫폼을 지원하지만, 예제에서는 (오라클 애플리케이션 개발자들이 가장 즐겨 사용하는 운영체제의 하나인) Windows XP 환경에 초점을 맞추고 있습니다. 본 예제는 매우 단순한 형태를 취하며, 프로그래밍 언어의 “Hello World” 예제와 비슷한 수준으로 생각하실 수 있습니다. 본 예제는 Ruby에 대한 간단한 “맛보기” 용도로 제공되며, 따라서 Rails가 포함하는 전체 기능과는 무관합니다.
본 예제를 실행하는 과정에서 문제가 발생했다면, 그 원인은 다음 세 가지 중 하나일 것입니다. 먼저 잘못된 코드를 다운로드했거나, 데이터베이스에 대한 연결이 올바르게 설정되어 있지 않거나, Windows XP 운영체제가 문제가 될 가능성이 있습니다. 본 예제를 개발하는 과정에서, 필자는 버전 및 데이터베이스 설정에 관련한 여러 가지 문제들을 경험했습니다. 필자의 친구인 Michael Carlland의 도움 덕분에 최대한 단순화된 형태의 실행 가능한 예제를 구현할 수 있었습니다.
하지만 실제로 Ruby on Rails와 오라클 환경을 연동하는 것은 그리 간단한 작업이 아닙니다. 때로는 이러한 과정이 무척 까다롭게 느껴질 수도 있습니다. 본 문서의 지시사항을 그대로 따른다면 문제를 겪을 일이 없을 것입니다. 하지만, 본 예제의 지시사항에서 조금이라도 벗어나는 경우 몇 가지 문제가 발생할 것을 각오해야 합니다. Rails는 매우 뛰어난 생산성을 제공하는 플랫폼이지만, 기본적으로 커맨드 라인 개발 환경만을 구현하고 있으므로 최신 통합 개발 환경에서 일반적으로 기대되는 “자동화” 기능을 제공하지 않습니다. 여러분이 DIY 타입의 개발자가 아니라면, 필자는 현 시점에서 여러분에게 Rails를 추천하지 않겠습니다.
1 단계: 오라클 데이터베이스의 셋업
먼 저 오라클 데이터베이스 인스턴스가 설치된 환경에 새로운 테이블을 추가해야 합니다. 이 과정에서 본 문서에서 사용된 것과 동일한 명명법을 사용하도록 주의해야 합니다. 그렇지 않은 경우 Rails가 제공하는 자동 코드 생성 기능이 제대로 동작하지 않을 것입니다. 새로 생성되는 테이블의 구조가 아래와 같습니다:
CREATE TABLE comics ( id NUMBER(10) NOT NULL, title VARCHAR2(60), issue NUMBER(4), publisher VARCHAR2(60), PRIMARY KEY (id) ); CREATE SEQUENCE comics_seq;테이블을 생성하고 데이터를 추가하기 위한 SQL 스크립트는 이곳에 서 확인하실 수 있습니다. 예제와 동일하게 애플리케이션을 구성하기 위해서라도 이 스크립트를 이용하는 것을 권장 드립니다. 가장 간단한 방법은 아래와 같이 SQL*Plus를 실행하는 것입니다. (여기에서는 오라클 데이터베이스가 이미 설치되어 있고, 여러분이 그 사용 방법을 숙지하고 있음을 가정합니다.)
SQL*Plus를 이용하여 아래와 같이 DBA 권한을 가진 사용자를 생성합니다.
SQL> GRANT dba TO ruby IDENTIFIED BY ruby; SQL> ALTER USER ruby DEFAULT TABLESPACE users TEMPORARY TABLESPACE temp; SQL> EXITSQL 파일을 사용하여 COMICS 애플리케이션 테이블을 생성하고 샘플 데이터를 일부 입력합니다.
C:\> sqlplus ruby/ruby@rails @comics.sql이 미 눈치채셨겠지만, COMICS 테이블의 이름은 복수형으로 명명되었습니다. 일반적으로 테이블이 단수형의 이름(예: COMIC)을 갖는 것을 감안한다면 이러한 표기법은 문제가 될 소지가 있습니다. 하지만 Rails는 복수형의 테이블 이름을 사용하는 접근법을 취합니다. Rails 설정에서 옵션의 변경이 가능하긴 하지만, 그 보다는 그냥 복수형의 이름을 사용하는 것이 좀 더 간단합니다.
2 단계: Ruby, RubyGems, Rails, Rails Oracle 라이브러리의 설치
Windows XP 환경에서 Rails를 사용하기 위해 반드시 설치해 주어야 하는 소프트웨어가 RubyGems 설치 패키지와 Rails 1.0(최근 1.1이 발표되었지만 본 문서에서는 1.0 버전을 기준으로 합니다), 그리고 Rails Oracle 데이터베이스 라이브러리입니다. Gems 패키지 인스톨러와 함께 Ruby를 다운로드하고 설치하려면, 아래와 같이 작업합니다.
- http://rubyinstaller.rubyforge.org/에 접속합니다.
- “One-Click Ruby Installer”를 다운로드합니다.
- 설치 방법을 참조합니다.
C:\> gems install rails -v 1.0.0 --remote이 제 Ruby, RubyGems, Rails가 설치되었습니다. 다음으로 Rail 애플리케이션과 오라클 데이터베이스 서버의 연동을 위한 코드 라이브러리를 설치할 차례입니다. Oracle Rails 라이브러리를 다운로드/설치하려면 http://rubyforge.org/projects/ruby-oci8에 접속한 후, C 드라이브에 ruby-oci8-0.1.13-mswin.r을 다운로드하고, 커맨드 창에서 아래와 같이 명령을 실행합니다.
C:\> ruby ruby-oci8-0.1.13-mswin.rb모든 작업이 순조롭게 진행되었다면, 이제 Ruby, Rails, Rails-Oracle 연결을 위한 라이브러리의 설치가 완료되었을 것입니다. 이제 Ruby on Rails 웹 애플리케이션을 처음으로 생성할 준비를 마쳤습니다.
3 단계: 웹 애플리케이션의 생성
새로운 Rails 애플리케이션을 생성하기 전에, 먼저 새로운 Rails 프로젝트를 아래와 같이 생성합니다.
Rails 커맨드라인 애플리케이션을 이용하여 새로운 프로젝트를 생성합니다 (새로운 디렉토리는 자동으로 생성됩니다).
C:\> rails comics_catalog위에서 생성된 디렉토리로 이동합니다.
C:\> cd comics_catalog C:\comics_catalog>이제 새로운 Rails 프로젝트 디렉토리가 생성되었습니다. 다음으로 Rails 애플리케이션이 Rails-Oracle 커넥션 라이브러리를 사용하도록 설정해 줄 차례입니다.
프로젝트 디렉토리 내의 config 디렉토리에는 database.yml이라는 이름의 파일이 존재합니다. 텍스트 편집기를 이용하여 database.yml을 수정합니다. 수정 이전의 상태는 아래와 같습니다:
development: adapter: mysql database: rails_development host: localhost username: root password: # Warning: The database defined as 'test' will be erased and # re-generated from your development database when you run 'rake'. # Do not set this db to the same as development or production. test: adapter: mysql database: rails_test host: localhost username: root password: production: adapter: mysql database: rails_production host: localhost username: root password: |
development: adapter: oci username: ruby password: ruby host: RAILSRails에서 웹 애플리케이션을 생성하는 방법에는 여러 가지가 있지만, 가장 간단한 것은 Rails 1.0.0에서 추가된 커맨드라인 기능을 이용하는 것입니다. 아래와 같이 하나의 커맨드 만으로 전체 애플리케이션을 생성할 수 있습니다.
C:\comics_catalog> ruby script/generate scaffold Comic이 제 어떻게 되었을까요? Rails의 코드 생성기는 COMICS 테이블에 접근하기 위한 모델, 뷰, 컨트롤러 Ruby 코드를 생성하였습니다. 이 경우 애플리케이션 생성에 관련한 모든 작업은 Rails scaffold 명령을 통해 자동으로 수행되었습니다. 데이터베이스 테이블에 변경 사항이 발생한 경우에는 scaffold 명령을 다시 한 번 실행해 주어야 합니다 (그렇지 않은 경우 애플리케이션이 정상적으로 동작하지 않을 수도 있습니다.
이제 웹 애플리케이션이 생성되었으므로, Ruby 웹 서버 WEBRick을 시작합니다.
C:\comics_catalog> ruby script/server웹 서버를 재시작하지 않고도 애플리케이션의 Ruby 코드 또는 COMICS 테이블을 언제든 변경할 수 있습니다. 하지만 데이터베이스 설정 파일(예: database.yml)을 변경한 경우에는 서버를 재시작해야 합니다.
이제 여러분이 즐겨 사용하는 웹 브라우저를 통해 Rails Comic Catalog 애플리케이션에 액세스할 수 있습니다. 아래 URL로 접속합니다.
http://localhost:3000/comics/list
그림 1과 같이 카탈로그에 포함된 만화책 리스트가 표시될 것입니다.
그림 1: 제품 카탈로그 리스트
Listing 뷰와 별도로 Details 뷰가 존재합니다. 각 레코드 옆의 “Show” 링크를 클릭하면 해당 레코드에 대한 자세한 데이터가 출력됩니다. 그림 2는 Details 페이지의 예를 보여주고 있습니다.
그림 2: Details 페이지
그림 3: Editing 뷰
Rails 마스터하기
지 금까지 Product Catalog 예제를 통해 Rails를 이용하여 간단한 애플리케이션을 생성하는 방법을 예시하였습니다. 이 애플리케이션은 인벤토리 추적 이외에는 별다른 기능이 포함되어 있지 않습니다. Rails를 이용하여 훨씬 더 복잡한 웹 애플리케이션을 개발할 수도 있지만, 이를 위해서는 좀더 세부적인 코딩이 필요합니다. Rails는 매우 다루기 쉬운 프레임워크이지만, 다른 테크놀로지와 마찬가지로 마스터하기까지 어느 정도의 시간이 요구됩니다. 현 시점에서 필자는 신기술에 대한 관심이 높은 개발자 또는 신규 애플리케이션 개발 작업을 시작하는 개발 팀에 Rails를 추천합니다. 이 두 가지에 해당되지 않는다면, Rails에 관련한 툴이 충분히 성숙할 때까지 Rails를 사용하지 않는 쪽을 권장하겠습니다.
Rails 은 제대로 마스터하려면 전문서를 참고해야 합니다. 올해 들어 Rails를 주제로 한 여러 권의 책이 출판되었지만 그 중에서도 내용이 특히 좋은 책으로 David Heninmier Hanson과 Dave Thomas가 공동 집필한 <Agile Web Programming with Ruby on Rails (Pragmatic Bookshelf, 2005)>를 추천합니다. Hanson은 Rails를 최초로 개발한 당사자이며, Thomas는 <Programming Ruby: The Pragmatic Programmers' Guide (Pragmatic Bookshelf; 2nd edition, 2004)>의 저자이기도 합니다.
댓글 없음:
댓글 쓰기