Recommanded Free YOUTUBE Lecture: <% selectedImage[1] %>

Contents

인스톨

인스톨 환경

  • Ubuntu Linux 14.04.1
  • Ruby 1.9.1
  • Ruby gem module
    • gem 1.8.24
    • rake 0.9.2.2
    • sequel 3.40.0
    • monk 0.0.7
    • sinatra 1.3.2
    • haml 3.1.7
    • extensions 0.6.0
    • g++ : thin 컴파일을 위해서 필요
    • thin 1.5.0

sinatra 인스톨

ruby 1.9.x 이상인 걸 확인한다. 1.8.x에서는 몇 가지 에러가 발생한다. 처리하는게 어렵지는 않지만 귀찮다. 2014년 10월 현재 2.1.x 버전이 나온 상황이니, 1.9.x 이상 버전을 사용하는 걸 가정하고 진행한다.

#  ruby --version
ruby 1.9.3p194 (2012-04-20 revision 35410) [x86_64-linux]
# gem install sinatra
Fetching: rack-1.5.1.gem (100%)
Fetching: rack-protection-1.3.2.gem (100%)
Fetching: tilt-1.3.3.gem (100%)
Fetching: sinatra-1.3.4.gem (100%)
Successfully installed rack-1.5.1
Successfully installed rack-protection-1.3.2
Successfully installed tilt-1.3.3
Successfully installed sinatra-1.3.4
4 gems installed
Installing ri documentation for rack-1.5.1...
Installing ri documentation for rack-protection-1.3.2...
Installing ri documentation for tilt-1.3.3...
Installing ri documentation for sinatra-1.3.4...
Installing RDoc documentation for rack-1.5.1...
Installing RDoc documentation for rack-protection-1.3.2...
Installing RDoc documentation for tilt-1.3.3...
Installing RDoc documentation for sinatra-1.3.4...

Sinatra 설치 테스트

Hello World 앱을 만들어서 테스트 했다.
# cat hello.rb
require 'sinatra'

get '/hi' do
	"Hello World!";
end

# ruby hello.rb
[2014-10-23 02:43:09] INFO  WEBrick 1.3.1
[2014-10-23 02:43:09] INFO  ruby 2.1.2 (2014-05-08) [x86_64-linux-gnu]
== Sinatra/1.4.5 has taken the stage on 4567 for development with backup from WEBrick
[2014-10-23 02:43:09] INFO  WEBrick::HTTPServer#start: pid=11257 port=4567

curl로 테스트
# curl localhost:4567/hi
Hello World!

Sinatra 개발 환경 만들기

프로토타이핑 용도나 아주 간단한 앱을 개발할게 아니라면, 적당한 웹 서버를 선택해야 하고, 웹 애플리케이션 구조도 만들어야 한다. MVC 패턴을 지원할 거라면 상당한 고민을 해야 한다. 루비 레일즈 같은 경우를 봐도, 애플리케이션 구조와 모델을 만들기 위한 다양한 툴들을 제공한다. Sinatra는 그런거 없다.

그렇다고 맨땅에 헤딩할 수는 없는 노릇이라서(시간이 충분하다면 나름 의미가 있겠으나), 몇 개 툴들을 이용해서 Sinatra 개발 환경을 만들 것이다.

웹 서버

Thin 웹 서버 설치

Thin은 EventMachine을 기반으로 만들어진 웹서버다. 가장 큰 강점은 성능이라고 한다. Apache/NginX+passenger 조합 혹은 Mongrel 웹서버를 사용하는 방법이 있겠다. 내가 Thin을 선택한 이유는 설치하기 편해서다. 테스트 하는데, Apache+passenger 같은 복잡한 조합으로 구성하고 싶지는 않다.

gem으로 설치하면 된다.
# gem install thin

thin 사용 이유

sinatra는 웹 서버 기능을 내장하고 있다. 그럼에도 불구 하고 thin을 사용하는 이유는 다음과 같다.
  1. 요청처리 : thin을 포함한 모든 종류의 웹서버는 HTTP 요청을 처리하기 위한 잘 정의된 전문화된 루틴을 가지고 있다. 멀티 스레드 혹은 event 기반의 입출력 모델을 이용해서 효과적으로 처리한다. 이런 요청처리는 전문적인 웹서버에 맡기는게 훨씬 효율적이다.
  2. 웹 서버는 요청의 효율적인 처리를 위해서 다음과 같은 다양한 기능들을 가지고 있다. 아래의 기능을 직접 구현하는건 (재미는 있을 수 있겠지만)낭비다.
    1. Keep-alive
    2. URL Rewrite
    3. Proxy
    4. Virtua server
    5. Load balancing
    6. Logging
    7. HTTP 인증
    8. SSL 처리
    9. Session 관리
    10. Cache 관리
    11. 기타 수많은 기능들을 활용할 수 있다.
Thin을 비롯한 다른 웹 프레임워크가 요청을 웹 서버에서 처리하게 하는 이유다.

Monk

Sinatra 기반 애플리케이션 개발을 위한 skeleton 구조를 만들어주는 툴이다. Monk를 실행하면, 웹 애플리케이션 구조를 자동으로 만드는데, 그 디렉토리 구성이 Ruby on Rails와 비슷하다. Rails를 경험해본 개발자는 아주 쉽게 적응할 수 있다. 반대로 monk 환경에 익숙한 개발자도 아주 쉽게 Ruby on Rails로 넘어갈 수 있다.

erb와 halm

view를 위한 template 라이브러리를 선택해야 한다. chef에서 템플릿을 만들기 위해서 ERB를 이용해서 더 익숙한데, 보다보니 HAML이라는 템플릿 엔진이 튀어나온다.

ERB는 루비의 표준 라이브러리의 일부라서, 루비버전과 관계없이 안정적으로 사용할 수 있다는 장점이 있다. HAML은 뭔가 더 좋다고 해서 설치해서 테스트를 했는데, 에러를 잔뜩 뱉으면서 돌아가지 않는다. 그래서 그냥 ERB 사용하기로 했다.

Monk로 애플리케이션을 만들면 템플릿으로 HAML을 사용하기 때문에 haml이 설치돼 있지 않으면 에러가 떨어진다. haml 부분을 주석처리 해도 되는데, 그냥 gem으로 설치해도 된다.
# gem install haml

sequel

Sinatra는 데이터베이스 제어를 위해서 sequel ORM 툴을 사용한다.
# gem install sequel

Monk를 이용한 애플리케이션 개발

monk를 설치한 다음 애플리케이션을 초기화 했다. 애플리케이션 이름은 TestApp로 했다.
# sudo gem install monk
# monk add riblits git://github.com/Phrogz/riblits.git
# mkdir TestApp 
# cd TestApp
# monk init -s riblits

하면 대략 아래와 같은 구조의 (예제를 포함한)스켈레톤 프로젝트가 만들어진다.
# tree
├── app.rb
├── config.ru
├── helpers
│   ├── init.rb
│   ├── nicebytes.rb
│   └── partials.rb
├── minify_resources.rb
├── models
│   ├── init.rb
│   └── user.rb
├── public
│   ├── css
│   │   └── common.css
│   └── js
│       └── manifest.txt
├── routes
│   ├── init.rb
│   └── main.rb
└── views
    ├── layout.haml
    └── main.haml
route와 view에 컴포넌트 별로 파일을 만들어서 개발하면, 개발자 별로 독립된 환경에서 개발할 수 있다.

애플리케이션은 다음과 같이 실행한다.
# thin -R config.ru start

예제로 sinatra 둘러보기

예제를 포함한 sinatra 애플리케이션을 만들려고 한다. 이 애플리케이션은 git-hub에 올려서 다운로드 가능하게 한다.
  • https : https://github.com/yundream/SinatraExampleCode.git
  • ssh : git@github.com:yundream/SinatraExampleCode.git
routes에서 부터, model, view 까지 직접 테스트 가능하도록 만들어서 배포한다. 테스트를 위해서 최소한 아래의 것들이 준비돼야 합니다.

히스토리

  • 작성일 :
  • 수정일 :
    • : model에서 에러나는 부분에 대한 설명 추가