블로그 이미지
JEEN

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

Rss feed Tistory
IT/Perl 2008.06.26 12:44

[ Perl ] CPAN 모듈 만들기!! #1

사용자 삽입 이미지

 저도 슬슬 CPAN 모듈을 올려야하지 않을 까 하는 생각이 요즘 들어서 이래저래 찾아봐도 꺼리가 별로 보이지 않았습니다.

 Me2day API도 업로드 할 수 있지만.. 그대로 올리기는 왠지 좀 그렇고...
 Daum 이나 Naver API 도 있기는 하지만... 마땅히 하고 싶은 생각도 안들고...

 그래서 IRC 에서 amorette 님께서 한글 입력이 안된다는 이야기와 함께 LuzLuna 님께서 만들어라! 라는 이야기가 나와서 한번 손을 대 보았습니다.

 이른바 TDD DDD(DDuckbob-Driven Development) ... 떡밥주도개발 방식입니다.

 일단 CPAN에 이와 비슷한 모듈이 있는 가를 우선 확인해 보았습니다.

 Lingua::KO::(.+) 부분을 집중적으로 찾아봤지만.. 역시 없더군요.
 
 사실 예전에 PHPSCHOOL의 iamseeker 님께서 Java Script 도 구현해 놓은 게 있더군요. 그것을 참고로 해서 뚝딱 만들었습니다.

 CPAN 모듈을 만드는 것에 대한 한글 문서는 어디를 찾아봐도 나오지 않으니 perldoc(perlnewpod) 도 이번기회에 번역해버렸구요(perldoc-kr 플젝).

 뭐 대강 준비를 마쳤습니다.

 1. 모듈을 만들기 위한 스켈레톤을 생성합니다.

  : 이것은 h2xs 로 가능한데요. 사실 h2xs 는 C Header File 을 XS 모듈로 하기 위한 유틸리티인데요 Perl 모듈용 스켈레톤으로 쓰인다고 하네요.

사용자 삽입 이미지

 -A 옵션은 Autoloader 를 생략하고, -X 옵션은 XS를 생략합니다. 어제 shibuya.pm tech talk 에서 XS 에 대한 공포감이 있기도 했고... 사실 XS 를 사용할 필요가 없는 100% Perl Code 만으로 만들테니까요. 그리고 -n 옵션으로 모듈이름을 넣어줍니다.
 아.. -b 옵션은 이 모듈을 돌리기 위한 Perl Version 을 제한합니다. 그러니 이 때는 5.8.8 이상에서만 돌릴 수 있다고 제한하는 겁니다. 일단 이름은 MyTest::Module 로 지정했습니다.

사용자 삽입 이미지

 MyTest-Module 이라는 디렉토리에 가면 이와 같은 파일/디렉토리 구성이 보입니다.

 Changes 는 이 모듈의 해당 버젼에서 어떤 것이 바뀌었나 하는 Change Log 같은 것을 기술합니다.
 README 는 모듈 사용에 관한 당부나 주의사항, 설치방법등을 기술하구요.
 MANIFEST 는 배포할 파일들을 지정해 줍니다.
 Makefile.PL 을 이용해서는 Makefile 을 만들고. make test 를 통해서 테스트를 make install 을 통해서 설치를 할 수 있으며, make dist 를 통해서 배포파일을 지정해줄 수 있습니다.

 t/ 의 아래에는 Test 코드들을 놓구요.
 lib/ 아래에는 모듈을 구성하는 pm 파일들이 놓여집니다. 여기가 바로 코드를 넣을 부분이죠.

사용자 삽입 이미지

 lib/MyTest/Module.pm 을 열면 이와같은 코드들이 뼈대를 구성하고 있습니다.
 아까전에 -b 옵션으로 정해준 Perl version 에 관한 제약은 여기에 들어갑니다. (use perl 5.008008)
 그리고 기본적으로 Exporter 를 통해서 필요한 subroutine 들을 export 할 수도 있습니다.
사용자 삽입 이미지

 그리고 그 아래에는 이 모듈에 대한 설명이나 AUTHOR 정보, 라이센스 정보를 담는 POD 가 있습니다. 만약 POD에 대해 모르신다면 perldoc(perlpod) 를 참조하시면 됩니다(perldoc-kr, doc.perl.kr 에서 찾으실 수 있습니다).

  일단 코드는 간단하게 이렇게 넣어봤습니다.

our @EXPORT = qw(blah);

sub blah {
  length(shift);
}

  blah 에 적당한 인수를 넣어 호출하면 길이를 반환하는 예제입니다. 물론 아무짝에도 쓸모없습니다.
  그리고 @EXPORT 할 것에 blah 를 추가해줍니다.

사용자 삽입 이미지

  'perl Makefile.PL' 을 하면...
사용자 삽입 이미지
  Makefile 이라는 파일이 생기게 되구요.
  그리고 모듈의 test 를 실행합니다. 테스트 코드는 t/MyTest-Module.t 파일에 기본적으로 쓰여진 코드입니다.

사용자 삽입 이미지
  그리고 make install 을 통해서 Perl 모듈의 기본 저장소에 이 모듈이 설치됩니다.
  그러면 어디서든지 'use MyTest::Module' 을 통해서 이 모듈을 사용할 수 있게 됩니다.

사용자 삽입 이미지
  그리고 'make dist' 를 통해서 CPAN 업로드 등의 배포를 위한 tarball 파일이 만들어지게 됩니다. 이 파일을 CPAN이나 아니면 다른 사람에게 배포할 때 쓰면 되겠죠? (물론 SVN 같은 것을 사용하는 것이 요즘 추세이기는 합니다만...)
 
사용자 삽입 이미지
  그래서 이처럼 MyTest::Module 모듈을 부르고 blah 를 호출해서 결괄르 얻었습니다. 결과는 12가 나오네요.

 이런식으로 간단하게 CPAN 모듈을 만들고, 테스트하고, 배포할 수 있습니다.
어때요? 참 쉽죠?

 그렇지만 제대로  된 테스트 코드도 쓰지 않았고, h2xs 로 생성되는 스켈레톤은 기본적으로 낡은 방식의 Makefile.PL을 사용하고 있습니다(use ExtUtils::MakeMaker).

  이 부분에 대해서는 다음에 천천히 설명하도록 하겠습니다. :-)
신고
TOTAL 474,048 TODAY 2

티스토리 툴바