블로그 이미지
JEEN

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

Rss feed Tistory
IT/Perl 2008.06.17 06:30

[ Perl ] Catalyst 를 이용한 웹 서비스 개발 #2

사용자 삽입 이미지
 
 그러면 이제 자신이 원하는 페이지를 만들어 보도록 하겠습니다.

사용자 삽입 이미지

  ./script/oops_create.pl Controller Hello 로 Hello 라는 새로운 컨트롤러를 새로 생성하였습니다. 그리고 서버를 다시 시동하셔서(./script/oops_server.pl) 웹페이지를 확인해 봅니다.

사용자 삽입 이미지

  http://localhost:3000/hello 으로 접속해보면.. 'Matched Oops::Controller::Hello in Hello.' 라고 나옵니다. 이 말 그대로 Oops::Controller::Hello(프로젝트::컨트롤러::컨트롤) 에 매치했다는 것이겠죠. 그러면이렇게 해서 간단하게 페이지 생성을 할 수 있습니다. 이렇게 마치기 전에 Oops::Controller::Hello 가 어떻게 구성되는 지 알아볼까요? lib/Oops/Controller/Hello.pm 의 내용을 살펴봅니다.
package Oops::Controller::Hello;

use strict;
use warnings;
use base 'Catalyst::Controller';
                                                                                                                                                           
=head1 NAME                                                                                                                                                
                                                                                                                                                           
Oops::Controller::Hello - Catalyst Controller                                                                                                              
                                                                                                                                                           
=head1 DESCRIPTION                                                                                                                                         
                                                                                                                                                           
Catalyst Controller.                                                                                                                                       
                                                                                                                                                           
=head1 METHODS                                                                                                                                             
                                                                                                                                                           
=cut                                                                                                                                                       

                                                                                                                                                           
=head2 index                                                                                                                                               
                                                                                                                                                           
=cut                                                                                                                                                       

sub index : Private {
    my ( $self, $c ) = @_;

    $c->response->body('Matched Oops::Controller::Hello in Hello.');
}

 그러면 이와 같은 소스코드를 확인할 수 있으시겠으며.. 'Matched Oops...' 하는 부분은 바로 $c->reponse->body() 안의 문자열로 들어간 것임을 알 수 있습니다.  그렇다면 이 부분을 HTML로 적으면 된다는 것을 대충 짐작하셨을 겁니다.
 하지만 코드와 HTML을 섞어서 같이 쓰신다면... 처음에 허둥지둥 급하게 일을 할 때는 빨리 끝낼 수 있을 지 모르겠지만.. 장기적인 안목으로 봤을 때는 여간 불편한 게 아닙니다. 그리고 보기도 좋지 않죠. 그외 여러가지 제약이 될 수 있는 여러가지들이 있는 데... 이 것이 바로 템플릿의 등장이유가 됩니다.
 PHP의 대표적인 템플릿은 Smarty 라든가 Template_ 같은 것들처럼, Perl에는 Template Toolkit 이라는 강력한 템플릿이 존재합니다.
사용자 삽입 이미지
  이런 템플릿을 위한 View 를 생성하기 위해 './script/oops_create.pl view TT TT' 라고 입력합니다. TT 란 바로 Template Toolkit 을 뜻합니다. (처음의 TT는 View/TT.pm 이라는 것을 뜻하고, 두번째 TT는 Catalyst::View::TT 라는 모듈을 기반으로 한다는 것을 의미합니다)

 그리고는 ./root/hello.tt 라고 템플릿을 만듭니다. 예제로 이런 것을 만들어 보았습니다.
 Template Toolkit 은 기본적으로 [% ~ %] 을 템플릿 영역으로 사용합니다.
<html>
<head>
<title>[% title %]</title>
</head>
<body>
[% name1 %] ♥ [% name2 %]<br/>
그들은 왜 신림동으로 갔나?<br/>
</body>
</html>

 위에서 title, template, name1, name2 같은 것을 미리 정해놓았습니다.
 그럼 Controller 에서 해당 템플릿 변수에 값을 넣어주기만 하면 되는 것이죠.
 ./lib/Oops/Controller/Hello.pm 을 열어줍니다.
sub index : Private {
    my ( $self, $c ) = @_;

    $c->stash->{title} = 'PD수첩';
    $c->stash->{name1} = 'yuni';
    $c->stash->{name2} = 'saillinux';
  
    $c->stash->{template} = 'hello.tt';
}

 그리고 이와 $self->stash 로 하나하나 템플릿 변수를 지정해 줍니다. 여기서 $self->stash->{template} 는 해당 템플릿 파일과 매치를 하기때문에 위의 템플릿 변수를 넣어줄 템플릿을 지정해야 합니다. 위에서 'hello.tt'라는 템플릿을 만들었으니 'hello.tt'라고 넣어줘야 겠죠?
  $self->stash가 하는 일은 말씀 안해줘도 아시겠죠?
 아, 물론 Template 을 사용하게 되었으니.. $c->response->body()로 내용 넣어주던 짓은 이제 그만해도 됩니다. :-)
사용자 삽입 이미지
어떤가요? title 에는 PD수첩이.. name1에는 yuni 가 name2 에는 saillinux가 들어갔습니다.
 이런식으로 간단하게 Web Page 를 하나씩 추가해 나가시면 되겠죠?

 Template Toolkit 의 사용법은 이후에도 계속해서 알아가겠지만, 급하시면 아래를 참고하시면 되겠습니다.

 * 참고사이트
  - Template Toolkit
  - Catalyst

 다음에는 SQLite 를 이용한 간단히 Model 쪽을 살펴보겠습니다. :-)
신고
TOTAL 473,556 TODAY 15

티스토리 툴바