블로그 이미지
JEEN

서울에 사는 꽃청년의 IT찌질모험기

Rss feed Tistory
IT/Perl 2010.01.04 13:06

[ Perl ] Catalyst + Plack + Apache

  최근에야 듣보 Web App Framework 에서 Catalyst 로 완전히 옮기게 되었습니다. 개발속도는 안 써봐서 그런지, 좀 느린 감은 있었지만, 기존에 해오던 대로 쓰니까 크게 차이는 없어서 무난히 개발을 할 수 있었습니다. 
  예전에는 FastCGI 띄우고, Apache 에서 mod_fastcgi  붙여서 서버 띄우곤 했는데, 최근에 Server::Starter 가 Plack 에 붙어줘서(Plack::Server::Standalone::Prefork::Server::Starter) mod_proxy 를 써서 Apache 에 접붙이기를 하고 있습니다. 

 왜 Server::Starter 냐? 
  기존의 웹 어플에서는 코드 수정이 이뤄질때마다 서버를 다시 띄워야 되며, 이때의 작은 downtime 이 발생하게 되지만, Server::Starter 를 사용하면  downtime 없이 웹 어플의 재기동이 가능하게 된다는 것입니다. 

  대충 이런 형식입니다. 

  |Apache|  -----  |Plack(::Server::Standalone::Prefork::Server::Starter)| --- |Catalyst|

  우선 사전준비로써,
  Apache 가 있고, mod_proxy 를 사용가능하며, 

  CPAN 모듈로는 
  PSGI 
  Plack 
  Server::Starter 
  Plack::Server::Standalone::Prefork::Server::Starter 
  등이 필요합니다. 
   그리고 물론 WebApp 도 있어야 되겠죠? 여기에서는 Catalyst 를 사용합니다.  Catalyst에서 Plack 엔진을 사용하려면 Catalyst::Engine::PSGI 가 있어야 합니다. 
 
  모든 준비가 끝났다면 우선 Plack 용 .psgi 스크립트를 작성합니다.
 * app.psgi
use Plack::Builder;
use Zzoo::Web;
Zzoo::Web->setup_engine('PSGI');
my $app = sub { Zzoo::Web->new->run(@_) };
builder { 
   enable "Auth::Basic", authenticator => sub {
      my ($user, $pass) = @_;
      return $user eq 'pass' && $pass eq 'word';
   };
   $app;
};
  Auth::Basic 은 접속시 기본인증을 거치게 해줍니다. 

  Plack::Builder 를 통해서 여러가지 MiddleWare 를 사용할 수 있는데, Auth::Basic 이 그 대표적인 예 중 하나입니다. 
  이런 Middleware 는 Plack::Middleware::* 라는 네임스페이스를 가지며 이외에도 다양하고 유용한 미들웨어들이 존재합니다. 

  Apache 설정은 아래와 같습니다. 
 /etc/apache2/site-available/blahblah.blah.blah
<VirtualHost *:80>
   ServerAdmin  who@am.i
   ServerName    your.server.com
   <Location />
      Order allow, deny
      Allow from all
      ProxyPass http://localhost:5000/
   </Location>
</VirtualHost>

  Server::Stater 스크립트를 통해서 Plack을 기동합니다.
  
$ start_server --port=5000 -- plackup -s Standalone::Prefork::Server::Starter --max-workers 3 -a app.psgi  

  그리고는 해당 서버에 접속해서 동작을 확인합니다.  
  --max-workers 옵션으로 서버 기동시의 Prefork 되는 워커(프로세스)의 갯수를 지정할 수 있습니다.
  -s 옵션으로 Plack Server 를 지정합니다. Plack::Server::* 의 네임스페이스를 가지는 모듈이 이에 해당합니다. 
  -a 옵션으로 psgi 스크립트를 지정합니다. 
  그외 여러가지 옵션이 있지만 여기에서는 생략하겠습니다. 

  이렇게 기동한 프로세스는 
$ killall -HUP start_server
  을 통해서 앞에서 말한 downtime 이 없는 서버재기동이 가능하게 됩니다. 

  여러모로 설명을 생략해버렸지만, Plack 에 대해서는 차후에 천천히 처음부터 차근차근 소개해볼까 합니다.

  참고자료
신고

'IT > Perl' 카테고리의 다른 글

[ Perl ] Twitter Steam + IRC = Twit2IRC  (2) 2010.01.04
[ Perl ] Catalyst + Plack + Apache  (0) 2010.01.04
[ Perl ] Cafe Crawler  (0) 2010.01.03
Rakudo Perl 6 development release #24 ("Seoul")  (1) 2009.12.18
TOTAL 462,304 TODAY 1

티스토리 툴바