SlideShare una empresa de Scribd logo
1 de 87
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}
            = ‘index.tx’;
$c->forward(‘Html’);
# Root.pm
sub end :RenderAction { }
    (https://metacpan.org/module/Catalyst::Manual::Actions)
$c->stash->{template} =
                    ‘index.tx’;
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”
감사합니다

Más contenido relacionado

La actualidad más candente

진짜기초 Node.js
진짜기초 Node.js진짜기초 Node.js
진짜기초 Node.jsWoo Jin Kim
 
백기선의 스프링 부트
백기선의 스프링 부트백기선의 스프링 부트
백기선의 스프링 부트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 developmentJi 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-hostGyuSeok Lee
 

La actualidad más candente (20)

Spring Boot 2
Spring Boot 2Spring Boot 2
Spring Boot 2
 
진짜기초 Node.js
진짜기초 Node.js진짜기초 Node.js
진짜기초 Node.js
 
백기선의 스프링 부트
백기선의 스프링 부트백기선의 스프링 부트
백기선의 스프링 부트
 
톰캣 #10-모니터링
톰캣 #10-모니터링톰캣 #10-모니터링
톰캣 #10-모니터링
 
Flux 예제 분석 2
Flux 예제 분석 2Flux 예제 분석 2
Flux 예제 분석 2
 
What is the meteor?
What is the meteor?What is the meteor?
What is the meteor?
 
RHQ를 활용한 Legacy system 모니터링
RHQ를 활용한 Legacy system 모니터링RHQ를 활용한 Legacy system 모니터링
RHQ를 활용한 Legacy system 모니터링
 
톰캣 #11-팁
톰캣 #11-팁톰캣 #11-팁
톰캣 #11-팁
 
rpm package 를 이용한 MySQL 설치자동화
rpm package 를 이용한 MySQL 설치자동화rpm package 를 이용한 MySQL 설치자동화
rpm package 를 이용한 MySQL 설치자동화
 
스프링군살없이세팅하기(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.)
 
React Redux React Native
React Redux React NativeReact Redux React Native
React Redux React Native
 
Share some development
Share some developmentShare some development
Share some development
 
One-day-codelab
One-day-codelabOne-day-codelab
One-day-codelab
 
Spring boot DI
Spring boot DISpring boot DI
Spring boot DI
 
Spring 웹 프로젝트 시작하기
Spring 웹 프로젝트 시작하기Spring 웹 프로젝트 시작하기
Spring 웹 프로젝트 시작하기
 
스프링 프레임워크 입문
스프링 프레임워크 입문스프링 프레임워크 입문
스프링 프레임워크 입문
 
React 튜토리얼 1차시
React 튜토리얼 1차시React 튜토리얼 1차시
React 튜토리얼 1차시
 
톰캣 운영 노하우
톰캣 운영 노하우톰캣 운영 노하우
톰캣 운영 노하우
 
톰캣 #07-host
톰캣 #07-host톰캣 #07-host
톰캣 #07-host
 
Eclipse web
Eclipse webEclipse web
Eclipse web
 

Similar a Catalyst Framework 살펴보기

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 LifeCylehojin lee
 
세션2_데보션테크데이_Decapod_v1.2.pdf
세션2_데보션테크데이_Decapod_v1.2.pdf세션2_데보션테크데이_Decapod_v1.2.pdf
세션2_데보션테크데이_Decapod_v1.2.pdfJaesuk 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 GCPDaegeun 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 MySQLI Goo Lee
 
Polymer따라잡기
Polymer따라잡기Polymer따라잡기
Polymer따라잡기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 CodeJavajigi Jaesung
 
Scala, Spring-Boot, JPA의 불편하면서도 즐거운 동거
Scala, Spring-Boot, JPA의 불편하면서도 즐거운 동거Scala, Spring-Boot, JPA의 불편하면서도 즐거운 동거
Scala, Spring-Boot, JPA의 불편하면서도 즐거운 동거Javajigi Jaesung
 
도구를 활용한 더 나은 웹 개발: Yeoman
도구를 활용한 더 나은 웹 개발: Yeoman도구를 활용한 더 나은 웹 개발: Yeoman
도구를 활용한 더 나은 웹 개발: YeomanJae Sung Park
 
Akka.NET 으로 만드는 온라인 게임 서버 (NDC2016)
Akka.NET 으로 만드는 온라인 게임 서버 (NDC2016)Akka.NET 으로 만드는 온라인 게임 서버 (NDC2016)
Akka.NET 으로 만드는 온라인 게임 서버 (NDC2016)Esun Kim
 

Similar a Catalyst Framework 살펴보기 (20)

okspring3x
okspring3xokspring3x
okspring3x
 
Front-end Development Process - 어디까지 개선할 수 있나
Front-end Development Process - 어디까지 개선할 수 있나Front-end Development Process - 어디까지 개선할 수 있나
Front-end Development Process - 어디까지 개선할 수 있나
 
Laravel 06.Request LifeCyle
Laravel 06.Request LifeCyleLaravel 06.Request LifeCyle
Laravel 06.Request LifeCyle
 
Springmvc
SpringmvcSpringmvc
Springmvc
 
세션2_데보션테크데이_Decapod_v1.2.pdf
세션2_데보션테크데이_Decapod_v1.2.pdf세션2_데보션테크데이_Decapod_v1.2.pdf
세션2_데보션테크데이_Decapod_v1.2.pdf
 
Spring boot 공작소(1-4장)
Spring boot 공작소(1-4장)Spring boot 공작소(1-4장)
Spring boot 공작소(1-4장)
 
Angular 2 rc5 조사
Angular 2 rc5 조사Angular 2 rc5 조사
Angular 2 rc5 조사
 
Kubernetes on GCP
Kubernetes on GCPKubernetes on GCP
Kubernetes on GCP
 
JCO 11th 클라우드 환경에서 Java EE 운영 환경 구축하기
JCO 11th 클라우드 환경에서 Java EE 운영 환경 구축하기JCO 11th 클라우드 환경에서 Java EE 운영 환경 구축하기
JCO 11th 클라우드 환경에서 Java EE 운영 환경 구축하기
 
Fluentd with MySQL
Fluentd with MySQLFluentd with MySQL
Fluentd with MySQL
 
Polymer따라잡기
Polymer따라잡기Polymer따라잡기
Polymer따라잡기
 
Node.js 기본
Node.js 기본Node.js 기본
Node.js 기본
 
[143] Modern C++ 무조건 써야 해?
[143] Modern C++ 무조건 써야 해?[143] Modern C++ 무조건 써야 해?
[143] Modern C++ 무조건 써야 해?
 
Scala for play
Scala for playScala for play
Scala for play
 
Spring boot-summary(part2-part3)
Spring boot-summary(part2-part3)Spring boot-summary(part2-part3)
Spring boot-summary(part2-part3)
 
Eclipse RAP
Eclipse RAPEclipse RAP
Eclipse RAP
 
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
 
Scala, Spring-Boot, JPA의 불편하면서도 즐거운 동거
Scala, Spring-Boot, JPA의 불편하면서도 즐거운 동거Scala, Spring-Boot, JPA의 불편하면서도 즐거운 동거
Scala, Spring-Boot, JPA의 불편하면서도 즐거운 동거
 
도구를 활용한 더 나은 웹 개발: Yeoman
도구를 활용한 더 나은 웹 개발: Yeoman도구를 활용한 더 나은 웹 개발: Yeoman
도구를 활용한 더 나은 웹 개발: Yeoman
 
Akka.NET 으로 만드는 온라인 게임 서버 (NDC2016)
Akka.NET 으로 만드는 온라인 게임 서버 (NDC2016)Akka.NET 으로 만드는 온라인 게임 서버 (NDC2016)
Akka.NET 으로 만드는 온라인 게임 서버 (NDC2016)
 

Catalyst Framework 살펴보기

Notas del editor

  1. \n
  2. \n
  3. \n
  4. \n
  5. \n
  6. \n
  7. \n
  8. \n
  9. \n
  10. \n
  11. \n
  12. \n
  13. \n
  14. \n
  15. \n
  16. \n
  17. \n
  18. \n
  19. \n
  20. \n
  21. \n
  22. \n
  23. \n
  24. \n
  25. \n
  26. \n
  27. \n
  28. \n
  29. \n
  30. \n
  31. \n
  32. \n
  33. \n
  34. \n
  35. \n
  36. \n
  37. \n
  38. \n
  39. \n
  40. \n
  41. \n
  42. \n
  43. \n
  44. \n
  45. \n
  46. \n
  47. \n
  48. \n
  49. \n
  50. \n
  51. \n
  52. \n
  53. \n
  54. \n
  55. \n
  56. \n
  57. \n
  58. \n
  59. \n
  60. \n
  61. \n
  62. \n
  63. \n
  64. \n
  65. \n
  66. \n
  67. \n
  68. \n
  69. \n
  70. \n
  71. \n
  72. \n
  73. \n
  74. \n
  75. \n
  76. \n
  77. \n
  78. \n
  79. \n
  80. \n
  81. \n
  82. \n
  83. \n
  84. \n
  85. \n
  86. \n
  87. \n