ݺߣ

ݺߣShare a Scribd company logo
Catalyst Framework
     살펴보기
     by 김진(@corund)
누구에게?

   웹 개발자들에게
 (사용언어를 막론한)
무엇을?


Catalyst Framework의
        댶강을
Catalyst Framework?
Perl MVC Web
   Framework
http://www.catalystframework.org/
2004.10 Maypole
Framework의 Fork로
       싵
• 2005.4 Catalyst 5
• 2006.7 Catalyst 5.7
• 2009.3 Catalyst 5.8
• 2011.8 Catalyst 5.9
• 최근 릴리즈(5.90016) 2012.8
오래되었고, 복잡하다
 는 인식. 하지만...
충분히 성숙되었고
잘 관리되고 있는 프
   레임워크
즉,

비동기 웹이 아닌 전통적인
웹 애플리케이션 개발이라면
   가장 실용적인 선택

     이라고 저는 생각합니다 ......
그러면 어떻게?
1. Catalyst를 설치하고
2. 튜터리얼을
             따라해본 후,
(https://metacpan.org/module/Catalyst::Manual::Tutorial)
3. 프로젝트를 만들어
레퍼런스를 보며 삽질
     하면......
4. 끝ㅋ!
    The End!
......이면 얼마나 좋겠
      습니까만......
그래서


전체적인 모양을 한번
   봐보자
먼저

범용 웹 애플리케이션
프레임워크가 갖춰야
    할 것들
1. 웹 요청 디스패치
2. 웹 입출력
3. 기타 등등......
기타 등등?
기타 등등에는



    3.1 뷰 템플릿
3.2 모델(Model) - 데이
 터 저장소 접근 또는
       ORM
3.3 세션 관리
3.4 인증 & 권한
3.5 설정 관리
3.6 로깅
3.7 테스팅
3.8 플러그인 or
확장 매커니즘
3.9 각종 유틸리티
그리고


3.10 정말로 기타 등등
그래서
      알아볼 것들

• 웹 요청 디스패칭
• 웹 입출력
• 뷰 템플릿
• 유틸리티
• 모델, 세션, 인증&권한 ...... 등등
그런데



먼저 알아야 할 것들
1. Perl 기본 문법
• 거침없이 배우는 펄
• 참조(Reference)와 복잡한 자료구조
• 패키지와 모듈
• Learn Perl in about 2 hours and 30
  minutes(http://qntm.org/files/perl/perl.html)
2. Moose
               Moose::Manual
(https://metacpan.org/module/Moose::Manual)
3. CPAN 사용법
         How to Use CPAN, Actually?
(http://advent.perl.kr/2011/2011-12-13.html)
우선

 Catalyst 설치
그냥


cpanm Task::Catalyst
1. 요청 디스패치

• URL 라우팅
• 내부 플로우 컨트롤
• 전후 실행
1.1 URL 라우팅
Controller에 라우팅
   정보를 포함
메서드 Attribute 이용
                      Perl의 Attribute
(http://aero.sarang.net/blog/2008/10/perl-attribute-1.html)
Controller 별 네임스
      페이스
package MyApp::Controller::First;
....
BEGIN { extends ‘Catalyst::Controller’; }
....
# /first
sub index :Path :Args(0) {
     my ($self, $c) = @_;
     ....
}

# /first/list
sub list :Path(‘list’) :Args(0) {
    my ($self, $c) = @_;
    ....
}
package MyApp::Controller::First::Second;
....

# /first/second
sub index :Path :Args(0) {
    my ($self, $c) = @_;
    ....
}

# /first/second/list
sub list :Path(‘list’) :Args(0) {
    my ($self, $c) = @_;
package MyApp::Controller::First::Second;
....
__PACKAGE__->config->{namespace} = ‘second’;
....

# /second
sub index :Path :Args(0) {
    my ($self, $c) = @_
    ....
}

# /second/list
sub list :Path(‘list’) :Args(0) {
    ....
package MyApp::Controller::First;
....
# /first/page/*
sub page :Path(‘page’) :Args(1) {
     my ($self, $c, $id) = @_;
     ....
}

# /first/view
sub view :Local :Args(0) {
...
• :Path (:Local, :Global)
• :Regex, :LocalRegex
• :Args(n)
• :Chained (:PathPart, :CaptureArgs)
• :Private
•   https://metacpan.org/module/Catalyst::Manual::Intro#Actions
1.2 내부 플로우
    컨트롤
$c->forward
     vs
$c->detach
from Catalyst Wiki
(http://wiki.catalystframework.org/wiki/)
$c->visit
   vs
 $c->go
from Catalyst Wiki
(http://wiki.catalystframework.org/wiki/)
플로우 간 데이터전
  달: $c->stash
1.3 전후 실행(or 특수
      액션)
begin, auto, end
(https://metacpan.org/module/Catalyst::Manual::Intro#Built-in-special-actions)
•   Controller::First { begin, auto, list, end }
    First::begin
    First::auto
    First::list
    First::end

•   Controller::First::Second { begin, auto, list, end }
    Second::begin
    First::auto
    Second::auto
    Second::list
    Second::end

•   Controller::First::Second2 { auto, list }
    First::begin
    First::auto
    Second2:auto
    Second2::list
    First::end
from Catalyst Wiki
2. 웹 입출력

• $c->request: Catalyst::Request
  (https://metacpan.org/module/Catalyst::Request)

• $c->response: Catalyst::Response
  (https://metacpan.org/module/Catalyst::Response)

• UTF-8 입출력
2.3 UTF-8 입출력
Catalyst::Plugin::Unicode::Encoding
     을 추가하면 끝!
# MyApp.pm
package MyApp;
use Moose;
....
use Catalyst::Runtime 5.80;

use Catalyst qw/
    -Debug
    Unicode::Encoding
    ConfigLoader
    Static::Simple
/;

extends ‘Catalyst’;
....
뷰템플릿, 데이터저장
 소는 case by case
3. 뷰 템플릿
Template Toolkit
Catalyst::View::TT
(http://www.template-toolkit.org/)
Xslate
Catalyst::View::Xslate
      (http://xslate.org/)
myapp_create.pl view
     Html Xslate
-> MyApp::View::Xslate
$c->stash->{template}
            = ‘iԻ.ٳ’;
$c->forward(‘Html’);
# Root.pm
sub end :RenderAction { }
    (https://metacpan.org/module/Catalyst::Manual::Actions)
$c->stash->{template} =
                    ‘iԻ.ٳ’;
4. 유틸리티
Catalyst::Helper
• ./script/myapp_create.pl
• ./script/myapp_server.pl
• ./myapp.psgi
myapp_create.pl (model | controller |
              view) Name Module [Args]
                   <->
Catalyst::Helper::(Model | View)::Module
5. 기타 등등
5.1 모델
DBIx::Class
(Catalyst::Model::DBIC::
        Schema)
일반 클래스
(Catalyst::Model::Adapt
           or)
5.2 세션

•   Catalyst::Plugin::Session

•   Catalyst::Plugin::Session::State::Cookie

•   Catalyst::Plugin::Session::Store::*

•   $c->session
5.3 인증 & 권한

•   Catalyst::Plugin::Authentication

•   Catalyst::Authentication::Store::*

•   Catalyst::Plugin::Authorization::*

•   $c->user, $c->user_exists, $c->authenticate
......;
결(結)
Catalyst is a web framework
written in Perl and inspired by
             Perl
      From K. Diment and M. S. Trout, “The Definitive Guide to Catalyst”
감사니다

More Related Content

What's hot (20)

Spring Boot 2
Spring Boot 2Spring Boot 2
Spring Boot 2
경륜 이
진짜기초 Node.js
진짜기초 Node.js진짜기초 Node.js
진짜기초 Node.js
Woo Jin Kim
백기선의 스프링 부트
백기선의 스프링 부트백기선의 스프링 부트
백기선의 스프링 부트
Keesun Baik
톰캣 #10-모니터링
톰캣 #10-모니터링톰캣 #10-모니터링
톰캣 #10-모니터링
GyuSeok Lee
Flux 예제 분석 2
Flux 예제 분석 2Flux 예제 분석 2
Flux 예제 분석 2
Peter YoungSik Yun
What is the meteor?
What is the meteor?What is the meteor?
What is the meteor?
Peter YoungSik Yun
RHQ를 활용한 Legacy system 모니터링
RHQ를 활용한 Legacy system 모니터링RHQ를 활용한 Legacy system 모니터링
RHQ를 활용한 Legacy system 모니터링
YUSOO KIM
톰캣 #11-팁
톰캣 #11-팁톰캣 #11-팁
톰캣 #11-팁
GyuSeok Lee
rpm package 를 이용한 MySQL 설치자동화
rpm package 를 이용한 MySQL 설치자동화rpm package 를 이용한 MySQL 설치자동화
rpm package 를 이용한 MySQL 설치자동화
I Goo Lee
스프링군살없이세팅하기(The way to setting the Spring framework for web.)
스프링군살없이세팅하기(The way to setting the Spring framework for web.)스프링군살없이세팅하기(The way to setting the Spring framework for web.)
스프링군살없이세팅하기(The way to setting the Spring framework for web.)
EunChul Shin
React Redux React Native
React Redux React NativeReact Redux React Native
React Redux React Native
Leonardo YongUk Kim
Share some development
Share some developmentShare some development
Share some development
Ji Heon Kim
One-day-codelab
One-day-codelabOne-day-codelab
One-day-codelab
WebFrameworks
Spring boot DI
Spring boot DISpring boot DI
Spring boot DI
Hyosang Hong
Spring 웹 프로젝트 싵하기
Spring 웹 프로젝트 싵하기Spring 웹 프로젝트 싵하기
Spring 웹 프로젝트 싵하기
jiseob kim
스프링 프레임워크 입문
스프링 프레임워크 입문스프링 프레임워크 입문
스프링 프레임워크 입문
Keesun Baik
React 튜토리얼 1차시
React 튜토리얼 1차시React 튜토리얼 1차시
React 튜토리얼 1차시
태현 김
톰캣 운영 노하우
톰캣 운영 노하우톰캣 운영 노하우
톰캣 운영 노하우
jieunsys
톰캣 #07-host
톰캣 #07-host톰캣 #07-host
톰캣 #07-host
GyuSeok Lee
백기선의 스프링 부트
백기선의 스프링 부트백기선의 스프링 부트
백기선의 스프링 부트
Keesun Baik
톰캣 #10-모니터링
톰캣 #10-모니터링톰캣 #10-모니터링
톰캣 #10-모니터링
GyuSeok Lee
RHQ를 활용한 Legacy system 모니터링
RHQ를 활용한 Legacy system 모니터링RHQ를 활용한 Legacy system 모니터링
RHQ를 활용한 Legacy system 모니터링
YUSOO KIM
톰캣 #11-팁
톰캣 #11-팁톰캣 #11-팁
톰캣 #11-팁
GyuSeok Lee
rpm package 를 이용한 MySQL 설치자동화
rpm package 를 이용한 MySQL 설치자동화rpm package 를 이용한 MySQL 설치자동화
rpm package 를 이용한 MySQL 설치자동화
I Goo Lee
스프링군살없이세팅하기(The way to setting the Spring framework for web.)
스프링군살없이세팅하기(The way to setting the Spring framework for web.)스프링군살없이세팅하기(The way to setting the Spring framework for web.)
스프링군살없이세팅하기(The way to setting the Spring framework for web.)
EunChul Shin
Share some development
Share some developmentShare some development
Share some development
Ji Heon Kim
Spring 웹 프로젝트 싵하기
Spring 웹 프로젝트 싵하기Spring 웹 프로젝트 싵하기
Spring 웹 프로젝트 싵하기
jiseob kim
스프링 프레임워크 입문
스프링 프레임워크 입문스프링 프레임워크 입문
스프링 프레임워크 입문
Keesun Baik
React 튜토리얼 1차시
React 튜토리얼 1차시React 튜토리얼 1차시
React 튜토리얼 1차시
태현 김
톰캣 운영 노하우
톰캣 운영 노하우톰캣 운영 노하우
톰캣 운영 노하우
jieunsys
톰캣 #07-host
톰캣 #07-host톰캣 #07-host
톰캣 #07-host
GyuSeok Lee

Similar to Catalyst Framework 살펴보기 (20)

okspring3x
okspring3xokspring3x
okspring3x
Kenu, GwangNam Heo
Front-end Development Process - 어디까지 개선할 수 있나
Front-end Development Process - 어디까지 개선할 수 있나Front-end Development Process - 어디까지 개선할 수 있나
Front-end Development Process - 어디까지 개선할 수 있나
JeongHun Byeon
Laravel 06.Request LifeCyle
Laravel 06.Request LifeCyleLaravel 06.Request LifeCyle
Laravel 06.Request LifeCyle
hojin lee
Springmvc
SpringmvcSpringmvc
Springmvc
HyungKuIm
ᅦᅧᆫ2ᅦᅩᅧᆫᄐƦᄏƳƦᄋƵ_ٱ𳦲ǻ屹1.2.
ᅦᅧᆫ2ᅦᅩᅧᆫᄐƦᄏƳƦᄋƵ_ٱ𳦲ǻ屹1.2.ᅦᅧᆫ2ᅦᅩᅧᆫᄐƦᄏƳƦᄋƵ_ٱ𳦲ǻ屹1.2.
ᅦᅧᆫ2ᅦᅩᅧᆫᄐƦᄏƳƦᄋƵ_ٱ𳦲ǻ屹1.2.
Jaesuk Ahn
Spring boot 공작소(1-4장)
Spring boot 공작소(1-4장)Spring boot 공작소(1-4장)
Spring boot 공작소(1-4장)
Choonghyun Yang
Angular 2 rc5 조사
Angular 2 rc5 조사Angular 2 rc5 조사
Angular 2 rc5 조사
Rjs Ryu
Kubernetes on GCP
Kubernetes on GCPKubernetes on GCP
Kubernetes on GCP
Daegeun Kim
JCO 11th 클라우드 환경에서 Java EE 운영 환경 구축하기
JCO 11th 클라우드 환경에서 Java EE 운영 환경 구축하기JCO 11th 클라우드 환경에서 Java EE 운영 환경 구축하기
JCO 11th 클라우드 환경에서 Java EE 운영 환경 구축하기
Ted Won
Fluentd with MySQL
Fluentd with MySQLFluentd with MySQL
Fluentd with MySQL
I Goo Lee
Golang Project Guide from A to Z: From Feature Development to Enterprise Appl...
Golang Project Guide from A to Z: From Feature Development to Enterprise Appl...Golang Project Guide from A to Z: From Feature Development to Enterprise Appl...
Golang Project Guide from A to Z: From Feature Development to Enterprise Appl...
Kyuhyun Byun
ʴDZ⳾ᅡᅡᅡᆸᄀƵ
ʴDZ⳾ᅡᅡᅡᆸᄀƵʴDZ⳾ᅡᅡᅡᆸᄀƵ
ʴDZ⳾ᅡᅡᅡᆸᄀƵ
Han Jung Hyun
Node.js 기본
Node.js 기본Node.js 기본
Node.js 기본
Han Jung Hyun
[143] Modern C++ 무조건 써야 해?
[143] Modern C++ 무조건 써야 해?[143] Modern C++ 무조건 써야 해?
[143] Modern C++ 무조건 써야 해?
NAVER D2
Spring boot-summary(part2-part3)
Spring boot-summary(part2-part3)Spring boot-summary(part2-part3)
Spring boot-summary(part2-part3)
Jaesup Kwak
Java Virtual Machine, Call stack, Java Byte Code
Java Virtual Machine, Call stack, Java Byte CodeJava Virtual Machine, Call stack, Java Byte Code
Java Virtual Machine, Call stack, Java Byte Code
Javajigi Jaesung
Scala, Spring-Boot, JPA의 불편하면서도 즐거운 동거
Scala, Spring-Boot, JPA의 불편하면서도 즐거운 동거Scala, Spring-Boot, JPA의 불편하면서도 즐거운 동거
Scala, Spring-Boot, JPA의 불편하면서도 즐거운 동거
Javajigi Jaesung
도구를 활용한 더 나은 웹 개발: Yeoman
도구를 활용한 더 나은 웹 개발: Yeoman도구를 활용한 더 나은 웹 개발: Yeoman
도구를 활용한 더 나은 웹 개발: Yeoman
Jae Sung Park
Front-end Development Process - 어디까지 개선할 수 있나
Front-end Development Process - 어디까지 개선할 수 있나Front-end Development Process - 어디까지 개선할 수 있나
Front-end Development Process - 어디까지 개선할 수 있나
JeongHun Byeon
Laravel 06.Request LifeCyle
Laravel 06.Request LifeCyleLaravel 06.Request LifeCyle
Laravel 06.Request LifeCyle
hojin lee
ᅦᅧᆫ2ᅦᅩᅧᆫᄐƦᄏƳƦᄋƵ_ٱ𳦲ǻ屹1.2.
ᅦᅧᆫ2ᅦᅩᅧᆫᄐƦᄏƳƦᄋƵ_ٱ𳦲ǻ屹1.2.ᅦᅧᆫ2ᅦᅩᅧᆫᄐƦᄏƳƦᄋƵ_ٱ𳦲ǻ屹1.2.
ᅦᅧᆫ2ᅦᅩᅧᆫᄐƦᄏƳƦᄋƵ_ٱ𳦲ǻ屹1.2.
Jaesuk Ahn
Spring boot 공작소(1-4장)
Spring boot 공작소(1-4장)Spring boot 공작소(1-4장)
Spring boot 공작소(1-4장)
Choonghyun Yang
Angular 2 rc5 조사
Angular 2 rc5 조사Angular 2 rc5 조사
Angular 2 rc5 조사
Rjs Ryu
JCO 11th 클라우드 환경에서 Java EE 운영 환경 구축하기
JCO 11th 클라우드 환경에서 Java EE 운영 환경 구축하기JCO 11th 클라우드 환경에서 Java EE 운영 환경 구축하기
JCO 11th 클라우드 환경에서 Java EE 운영 환경 구축하기
Ted Won
Fluentd with MySQL
Fluentd with MySQLFluentd with MySQL
Fluentd with MySQL
I Goo Lee
Golang Project Guide from A to Z: From Feature Development to Enterprise Appl...
Golang Project Guide from A to Z: From Feature Development to Enterprise Appl...Golang Project Guide from A to Z: From Feature Development to Enterprise Appl...
Golang Project Guide from A to Z: From Feature Development to Enterprise Appl...
Kyuhyun Byun
[143] Modern C++ 무조건 써야 해?
[143] Modern C++ 무조건 써야 해?[143] Modern C++ 무조건 써야 해?
[143] Modern C++ 무조건 써야 해?
NAVER D2
Spring boot-summary(part2-part3)
Spring boot-summary(part2-part3)Spring boot-summary(part2-part3)
Spring boot-summary(part2-part3)
Jaesup Kwak
Java Virtual Machine, Call stack, Java Byte Code
Java Virtual Machine, Call stack, Java Byte CodeJava Virtual Machine, Call stack, Java Byte Code
Java Virtual Machine, Call stack, Java Byte Code
Javajigi Jaesung
Scala, Spring-Boot, JPA의 불편하면서도 즐거운 동거
Scala, Spring-Boot, JPA의 불편하면서도 즐거운 동거Scala, Spring-Boot, JPA의 불편하면서도 즐거운 동거
Scala, Spring-Boot, JPA의 불편하면서도 즐거운 동거
Javajigi Jaesung
도구를 활용한 더 나은 웹 개발: Yeoman
도구를 활용한 더 나은 웹 개발: Yeoman도구를 활용한 더 나은 웹 개발: Yeoman
도구를 활용한 더 나은 웹 개발: Yeoman
Jae Sung Park

Catalyst Framework 살펴보기

Editor's Notes