블로그 이미지
JEEN

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

Rss feed Tistory
IT/Perl 2008.09.01 11:31

[ Perl ] App::CLI 로 시작하는 커맨드라인 어플리케이션

  YAPC::Asia 2007, 2008 에서 여러차례 언급되었고, 현재 저희 회사에서도 Web Framework + CLI 로 사용하고 있는 App::CLI에 대해서 간단하게 적어보고자 합니다. 정말로 매뉴얼을 찾기 힘든 모듈이지만, 사용하기에는 너무 편리한 CLI Framework 인데요.

  보통 Perl 스크립트에서는 맛볼 수 없는 구성으로 쉽게 유지보수가 가능한 코드를 써나갈 수 있습니다. POD 를 이용해서 문서를 써나갈 수도 있구요. GetOption 모듈을 안에 담고 있어서, 여러가지 옵션을 스크립트에 간단하게 줄 수 있습니다.

  현재 저희 회사에서는 Webframework + CLI 라는 형태로... webframework 에서 가지는 설정값을 CLI 에서 그대로 사용가능하게 되어있어서, 별도의 DB 스키마 구성을 설정할 필요없이 커맨드라인 명령어를 통해서 정기적인 작업을 수행하도록 하고 있습니다.

  그럼 간단하게 App::CLI 에 대해서 얘기해보겠습니다.

  App::CLI 는 SVK 로 유명한 clkao 에 의해서 만들어진 모듈이며, 위에서 설명했다시피 CLI framework 라고도 불리는 모듈입니다. 그의 대표적인 SVK 가 이 App::CLI 를 기반으로 만들어졌다고 합니다.
  그리고 Best Practical 의 Jifty 에도 사용되고 있다고 하는군요. CPAN 모듈 페이지에서도 자세한 문서가 없기때문에 소스를 보는 게 가장 도움이 된다고 하는군요.

  그래서 소스를 보겠습니다.

 MyApp.pm
 package MyApp;
 use base 'App::CLI';
 1;


 MyApp/Hello.pm
 package MyApp::Hello;
 use base 'App::CLI::Command';

 sub options {
  ( 'name=s' => 'name' )
 }
 
 sub run {
  my ($self, @args) = @_;

  print "Hello, Are you ".($self->{name} || 'BlahBlah') ."?¥n";
 }
 1;

 app.pl
 use MyApp;
 MyApp->dispatch;

  가장 기본적인 구성입니다.
  MyApp.pm 이 이 커맨드라인 어플리케이션의 Root 가 되는 것이구요. MyApp::Hello 는 hello 라는 CLI 어플리케이션이 되는 것이죠. 그리고 그 hello 를 실행시키기 위해서 app.pl 이 있는 것입니다.

  그렇다면, 어떻게 실행시키느냐..

  perl app.pl

은 훼이크 입니다. 실행시킬 커맨드를 지정해줘야죠.

  perl app.pl hello

그렇다면 결과는?

  Hello, Are you BlahBlah?

가 됩니다. sub run{} 에서 지정한 액션이 실행되는 것입니다.
 그렇다면 이건 어떨까요?

  perl app.pl hello --name=Saillinux

이렇게 Option 을 던져줬습니다. 그러면 sub options {} 에서 name 옵션을 지정해놓았다면, 그 name 옵션을 sub run{} 에서 사용할 수 있습니다.
 
  $self->{name}

 이렇게 말이죠. 물론 ( 'name=s' => 'name' ) 이라는 것이 무엇을 의미하는 지 좀 더 자세히 알고 싶으시다면, GetOpt::Long 같은 모듈을 살펴보시길 권합니다.

 - Getopt::Long - Extended processing of command line options - search.cpan.org

  그럼 hello 말고 다른 커맨드를 추가하고 싶다면?
  생각하시는대로 MyApp::YourCommand 를 추가하시면 됩니다.
  그리고 MyApp::Hello 와 같은 구조로  만들어나가시면 되겠죠?

  그러면 hello 가 무엇을 하는 놈인지 알아야하지 않을까요? 간단하게 도움말을 써넣어보겠습니다.

  MyApp/Help.pm
package MyApp::Help;
use base 'App::CLI::Help'
1;

=head1 ACTION
perl app.pl help help

=head1 BLAH
blahblah
=head1 PLEASE
blahblah
=cut

 이런식으로 MyApp::Help 아래에 간단하게 POD 를 추가했습니다.

perl app.pl help help

 그리고 이런식으로 실행하면.. MyApp::Help 에 기재된 POD 를 해석해서 표시합니다.
 혹은 MyApp::Hello 에도 마찬가지로 적당한 설명을 POD 로 써넣어..

 perl app.pl help hello

 와 같은 명령으로 hello 의 도움말을 간단하게 불러올 수 있겠죠?
 이같이 스크립트안의 POD 를 불러와서 해석할때는 POD::Usage 같은 모듈을 참조하시면 됩니다.
- Pod::Usage, pod2usage() - print a usage message from embedded pod documentation - search.cpan.org
  제가 App::CLI 에 대해서 아는 부분은 여기까지네요.
실제 이것을 사용해서, 관리하는 사이트의 RSS Feed 를 작성하거나, 정기적인 일괄작업을 수행한다거나 하고 있습니다.
언젠가 기회가 되신다면 한번쯤 써보시는 것도 좋을 듯 합니다. +_+
신고
IT/Tips 2008.07.11 09:07

[ 버젼관리 ] SVK - 로컬에서 맘껏 커밋때리기

 올해 초(2008. 2. 22)부터 perldoc 의 번역을 계속 해오고 있습니다.
 구글코드에서 저장소 하나 받아가지고 거기에다가 열심히 커밋을 하고 있구요.
 현재 리비젼이 300번을 돌파하는 기염을 토하고 있습니다(Ownership 가진 제가 이런 말해도 될런지..;;).

 번역은 주로 지하철을 타고 오고가는 출퇴근 시간에 하고 있습니다. 한번 타면 20분 정도 운좋으면 앉아서 열심히 키보드 두드릴 수 있죠. emacs 에서 열심히 두드리고, 회사에서 인터넷 선 꼽자마자 일단은 커밋을 하고는 합니다.

 여기서 제가 든 생각이...

  "인터넷 안들어와도 로컬에서 작업하고 커밋할 수는 없을까?"

 그래서 눈을 뜬 것이 SVK 였습니다.
 (사실 집의 서버에 SVK 를 깔려다가 삑사리 맞아서 그냥 놔두고 있고, 사실 항상 인터넷 선이 꼽힌 서버에게 SVK 의 필요성은 그리 없었습니다.)

 Mac 용 SVK 패키지를 제공해주기 때문에 간단하게 인스톨할 수 있었습니다.

 그리고 구글의 저장소를 제 MacBook 에 미러링하고...
 
svk mirror http://perldoc-kr.googlecode.com/perldoc-kr/trunk //mirror/perldoc-kr/trunk
svk sync


 그 미러링한 것을 브랜치만들어서...
svk cp //mirror/perldoc-kr/trunk //mirror/perldoc-kr/branches/local/
svk checkout //mirror/perldoc-kr/branches/local perldoc-kr


 그 브랜치에서 작업하고, 작업한 것은 인터넷이 안들어와도 차곡차곡 커밋되게 된다는 것입니다.
 svk ci blahblah

 대량 커밋도 순식간에 슥삭 끝나곤 하니까 참 좋더군요(어차피 로컬 미러에 대고 하니까요...)

 그렇게 차곡차곡 쌓인 분량을 또 한번에 밀어넣는 재미도 쏠쏠하더군요.
 svk push --verbatim

 거기에 브랜치에서 저장소의 최근 리비젼도 그대로 받아올 수 있으니...
svk pull


 안그래도 올 9월에 한국에 갈텐데... 그때가 아마 회사가 바쁠 시점이라 일을 들고 갈 듯 싶어서...
 집에 인터넷이 끊겼는데 어쩜 좋지... 하는 마당에 이런 수단이 생겨서 기쁩니다(기쁜 일인지 모르겠지만;;).

 SVK 를 만든 C.L.Kao 도 지난 YAPC::Asia 2008 에서 봤었고, 그때 했던
 "Your Freesoft will be running at our company" 라고 했던 약속도 지키게 되는 것이죠.
 (사실은 슬라이드에 대고 했지만..;;)

사용자 삽입 이미지
( 근데 svk 로 커밋했을 때-- 사실은 svk push--는 저렇게 별표가 쳐지는데... 왜 그럴까요?)
신고
IT/Perl 2008.05.18 13:41

YAPC::Asia 2008 이야기 #2

Conference Dinner Party에 대한 이야기입니다.
사용자 삽입 이미지PENTAX Corporation | PENTAX K100D Super | 1/45sec

사진이 맥주밖에 없지만... 스시랑 이것저것 많이 있었습니다.


일단 저로써는 회사사람이외에 다른 일본 Perl Hackers 들과 안면을 튼 적이 없기 때문에...

쩝.. 마땅히 소개고 뭐고 할 게 없어서 상당히 죄송했습니다.

그래서 영어를 하시는 saillinux님을 밀고 당기면서 해외 구루들과의 접촉을 시도해나가게 되었습니다.

일단 Jose Castro 에게 부딪혀서 keedi님께서 왜 Korea.pm 의 등록이 늦는가에 대한 이야기를 물어봤더랬습니다.

아무래도 나라이름이 Perl Mongers 이름이 되면 좀 안좋은 듯 해서 다른 명칭이 없냐는 이야기가 나온 듯 한데...
사용자 삽입 이미지PENTAX Corporation | PENTAX K100D Super | 1/60sec

Jose Castro


기존의 Seoul.pm 이 wordpress blog 페이지로 쓰이고 있고, 별다른 엔트리도 없기에 이것을 어떻게 하는 듯한 이야기가 나온 듯 합니다. 아무튼 3주이상의 확인작업이 필요하다는 군요.

그다음은 Ingy Dot Net인데... CLKao씨가 Ingy 맥주가 없다면서 따라달라고 했더랬습니다. 그래서 제가 따라줬죠. (It's my honor sir! 라고 했었는데 피식 웃더군요) 그리고 자연스레 사진찍고 이것저것 얘기를 나누고 했더랬습니다.

사용자 삽입 이미지PENTAX Corporation | PENTAX K100D Super | 1/90sec

그다음은 자연스레 CLKao와 긴 이야기가 계속 되었습니다. 반갑게 인사하고 여러얘기를 나누며, 명함 교환을 하였죠. Audrey Tang에 대한 이야기도 잠깐 있었습니다. aero님께서 무척 궁금해 하시는 부분이라서...(최근에 Audrey Tang이 연애질한다는 이야기때문에, 여자는 OSS의 적이다! 라는 얘기까지 있었었죠.)

그리고 자연히 Jesse Vincent에게 붙어서 이야기를 계속했습니다. 이때 Audrey Tang에 대한 좀 더 자세한 이야기를 듣게 되었습니다. 바빠서 못나왔다고 하더군요. 그리고 그녀는 매우 대단하다면서 Jesse 가 매우 극찬을 아끼지 않았습니다. 그리고 이때 Prophet의 Patch도 하지 않은 저와 keedi님은 Jesse로부터 T-Shirt를 받게 되었습니다. ( 2008/05/17 - [IT/Perl] - YAPC::Asia 2008 득템 목록... 에서 확인 하실 수 있습니다)

 그런다음의 타겟을 물색하던중에, 한국분을 발견하게 되었습니다. Jeff Kim씨의 부인되시는 분이셨는데, 작년에 Amazon의 EC2에 대한 세션이 있었는데.. 제가 작년의 Amazon S3에 대한 세션을 잘 들었다고 했는데.. EC2라고 정정해주더군요. 상당히 뻘쭘했었습니다;;
 NY.pm 에 계시고, 현재 미국에서 Perl은 어떤지에 대한 이야기도 들을 수 있었습니다. "안보이게 많이 쓰고 있다"는 이야기를 들었습니다. 그리고 한국은 어떤가에 대해서는 모두들 쓴웃음을 지을 수 밖에 없었지만요.

 그리고 한때 PerlMania와 hanIRC를 들썩이게 했던 purewish님과도 여기에서 직접 만날 수 있었습니다. 모두들 궁금해했었거든요.

 그리고 오스트리아 비엔나 대학 교수와도 간단한 이야기. Beginng Perl 등의 저자인 Simon Cozens와도 얘기할 기회를 얻었습니다.

 그리고 miyagawa씨와 한국 Perl에 대한이야기와,  Perl Mania에 대해 알고 있다는 이야기, Korea.pm이 안되면 Perl 쓰는 회사 많은 지명을 쓰면 어떠냐는 이야기와... 이런저런 이야기를 함께 하게 되었습니다. 중간에 TAKESAKO씨와의 얘기에서 "Yappo가 던져준 한글 번역은 전부 니가 해준거냐?"라는 것에서 약간은 반가움을 느끼게 되었습니다. (그런 것을 보고 있었을 줄이야!)
 그리고 한일 양국의 사람들끼리 같이 사진도 찍었습니다. :-)

 물론 Yappo와도 함께...
 
사용자 삽입 이미지PENTAX Corporation | PENTAX K100D Super | 1/60sec

Moooooooooose~


 이 날의 포즈는 김치도 치즈도 아닌 Mooooooooose~ 였습니다. :-)

____________________________________
2008/05/18 - [IT/Perl] - YAPC::Asia 2008 이야기 #1
2008/05/17 - [IT/Perl] - YAPC::Asia 2008 득템 목록...
신고

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

YAPC::Asia 2008 이야기 #3  (2) 2008.05.18
YAPC::Asia 2008 이야기 #2  (0) 2008.05.18
YAPC::Asia 2008 이야기 #1  (0) 2008.05.18
YAPC::Asia 2008 득템 목록...  (2) 2008.05.17
TOTAL 466,867 TODAY 41

티스토리 툴바