|
레일스가 2.3 버전으로 업데이트되면서 이제 레일스도 Rack 기반에서 작동한다(참고: Rack 속에 들어간 레일스). Rack은 웹서버와 루비 웹 애플리케이션(프레임워크) 간의 최소한의 표준 인터페이스다. 따라서 Rack 표준에 따라 설계된 웹서버 또는 웹 프레임워크는 자유롭게 호환된다. Rack을 기반으로 하면 여러 가지 이점이 생기게 되는데, 그 중 하나가 소위 "미들웨어(middleware)" 라고 하는 것을 쓸 수 있게 된다는 것이다. 여기서 "미들웨어"란 웹서버와 웹 애플리케이션 중간에 위치하면서 HTTP의 요청/응답을 변형/제어할 수 있게 해주는 일련의 구성요소/모듈을 의미한다. 게다가 레일스 2.3에서는 메탈(Metal)이라고 부르는 일종의 Rack 미들웨어 래퍼(wrapper)도 제공한다. 메탈(즉, 미들웨어)을 사용할 수 있는 영역은 여럿 있지만, 특히 성능이 중요한 부분에서 사용하면 좋은 효과를 낼 수가 있는 것이, 레일스의 전체 라이프사이클을 타지 않아도 되기 때문이다.
그런데 많은 루비 웹 프레임워크들이 Rack 기반으로 동작함에 따라 이제 여러 프레임워크를 하나의 애플리케이션에서 섞어서 쓰는 일도 쉬워졌다. 예를 들어, 간단하면서도 성능이 좋은 루비 웹 프레임워크인 Sinatra 역시 Rack 기반으로 동작하는 관계로, 이제 레일스 애플리케이션에서 Sinatra를 Rack 미들웨어로 사용하는 것도 어렵지 않다.
첫번째 방법은 레일스 2.3에 새로 추가된 Metal 을 이용하는 것이다. 레일스 메탈은 Rack 미들웨어의 기능을 이용하여 레일스 애플리케이션에서 좀 더 빠른 액션을 만들 수 있게 해준다. 다음과 같이 레일스 rake middleware 명령을 해 보면 레일스 애플리케이션에 장착된 미들웨어들을 확인해 볼 수 있으며, 이 중 Metal도 들어 있음을 알 수 있다.(참고로 레일스 Metal 애플리케이션들은 Rails::Rack::Metal 미들웨어에 의해 실행된다)
그러므로 레일스 애플리케이션의 app/metals 디렉터리에 다음과 같이 Sinatra 코드를 둘 수 있다.
두번째 방법은 Metal을 태우지 않고 직접 구현하는 방법이다. 참고로 메탈 애플리케이션은 메탈 체인(chain)을 타야 하기 때문에 HTTP 404 코드를 반환할 수 없으며, 따라서 Rack 미들웨어를 직접 구현할 일도 생길 수 있다. Sinatra 애플리케이션의 코드는 위의 예제 소스와 동일하지만, 이번에는 app/metals 가 아닌 다른 적당한 디렉터리에 두면 된다.
이제 Sinatra 애플리케이션이 레일스의 미들웨어로서 장착된다. 확인하려면 rake middleware 명령을 주면 된다. 레일스와 Rack에 대한 더 자세한 내용은 여기를 참조하면 좋을 것이다.(또는 여기) 이 글은 스프링노트에서 작성되었습니다. # by thinkr | 2009/04/09 13:09 | 트랙백(1)
|
카테고리
최근 등록된 덧글
요런 http://choboweb..
by 몰아저씨 at 11/13 음 제 경우 지금 메모리.. by 서울비 at 10/25 새 버전이신가 보네요,.. by 연안부두 at 10/22 CPU 사용량이 엄청나군.. by 오스카 at 10/22 드롭박스 깔고 팬이 자주.. by 백일몽 at 10/22 다른 개발자분이 작업하.. by GreatDG at 10/22 최소 3대는 해봐야겠더.. by 펭도 at 10/21 browsershots 같은 .. by thinkr at 10/21 예전에 그런 서비스를 .. by 몰아저씨 at 10/21 예. 물론 그 방법도 있.. by thinkr at 10/21 최근 등록된 트랙백
라지엘의 느낌
by laziel's me2DAY 우리는 언제나 창작과 .. by 시답잖은 지식과 개똥철학 월아, 알고리즘 by Read & Lead 우엉의 생각 by oldtype's me2DAY 졸음을 깨우기 위해 재미.. by jack in the box 이젠 업그레이드인가.. ra.. by Always Renewal 제로안의 생각 by zeroan's me2DAY 아샬의 생각 by ahastudio's me2DAY 구글사이트 접속차단 by P-camp & 대안언어축제.. 펭도의 생각 by pengdo's me2DAY 라이프로그
태그
| |||