블로그 이미지
JEEN

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

Rss feed Tistory
IT/Perl 2010.08.14 09:52

요즘 작업중인 프로젝트의 Catalyst 구성에 대해서



 대부분의 로직은 Catalyst::Model::MultiAdaptor 를 사용해서 전부 MyApp::API 의 네임스페이스 아래에 정의해서 코드의 재사용성을 높이고,
  백그라운드에서 움직이는 몇가지 스크립트는 관리의 편의를 위해서 MooseX::App::Cmd 를 사용했습니다. MyApp::CLI::Command::[commands] 의 네임스페이스로 정의하며, pod 를 적어놓음으로써 간단하게 매뉴얼을 만들 수 있고, GetOpt 등으로 여러가지 옵션에 대한 다양한 처리를 구현할 수 있습니다.

   ORM 으로는 DBIx::Class 를 사용합니다. 테이블의 INSERT,UPDATE 시에 created_on/updated_on 의 자동갱신을 설정해줄 수 있는 DBIx::Class::TimeStamp 와 함께, SQL 쿼리의 직접적인 조건식 대상이 되지 않는 데이터이며 데이터 구성이 다소 변칙적이며, 괜히 테이블을 여러개 찍어내지 않기 위해서 몇 개의 테이블에는 YAML 로 Serialize해줍니다. (DBIx::Class::InflateColumn::Serializer) 
  또한 파일 업로드 시에 DBIx::Class::InflateColumn::FS 같은 것도 함께 사용하고 있습니다. 

  작업도중에는 Catalyst::Plugin::FormValidator::Simple 으로인해서 알수없는 난관을 만난 적이 있어서, FormValidator::Simple 을 별도의 Validator 라는 모델안에 정의해서 각종 폼 이벤트에 대한 유효성 체크를 실사했습니다. 

  또한 몇가지 중요한 시스템 사용 포인트(예를들어 유저등록, 상품 등록, 상품 구매)에 대해서는 별도로 로깅을 하도록 하였고, 이때 Catalyst::Log::Log4perl 을 붙여서 사용하고 있습니다. 시스템 도입이후에 당분간은 -Stats 로 상황을 보며 디버그 요소와 퍼포먼스가 떨어지는 부분을 파악하기 쉬워졌습니다. 

  그 이외 Controller, Model, View 에서 사용하는 각종 config 에 대해서는 myapp_config.yaml 에서 모두 묶어서 관리를 하도록 하였습니다. 

  Mail 발송에 대해서는 웹페이지 상에서 보내는 메일을 전제로 우선 Catalyst::View::Email 을 사용했지만, CLI 에서 메일작업을 해줄 필요가 있어서 MyApp::Mail 을 별도로 정의, Email::Sender 를 사용하고 있습니다.

  기본 Template 으로는 Tempate Toolkit 을 사용하고 있으며, 다량의 메일 템플릿(메일바다 이름과 이메일, 날짜가 매번 바뀌거나)을 보낼 때의 속도 문제로 Text::XSlate 를 시범적으로 사용하고 있습니다.

  서비스를 띄울 때는 Starman 으로 5000 포트로 띄우고, 워커는 시스템 사용 규모에 맞게 설정합니다. (그냥 단순 관리화면임으로 워커는 3개 정도만 띄워놨습니다) Apache 에서 ProxyPass 로 설정해서 서비스 도메인에 붙여넣습니다.

  몇가지 중요한 걸 빼먹은 것 같기도 하지만... 나중에 시간이 난다면 다른 시범구성에 대해서도 말해보고자 합니다.
신고
TOTAL 473,535 TODAY 143

티스토리 툴바