주의: [CPAN 모듈 작성 #1 - Module::Starter로 시작하기]의 가장 최근 판은 이곳에서 확인할 수 있습니다.
시작하며
대부분 처음에는 간단한 문제를 해결하기 위해 가벼운 스크립트를 작성하곤 합니다.
하지만 이내 기능을 추가하기 시작하면서 크기는 금방 방대해져 버립니다.
게다가 여러분이 작성한 스크립트의 팬이 나타난다면,
아마도 여러분은 기대에 부응하기 위해
기꺼이 오류를 고치고 새로운 기능을 추가하기 시작할 것입니다.
여러분의 프로그램은 점점 커지고 있으며, 사용자들은 늘어가고,
이제는 새로운 릴리스 버전을 알려주는 것만해도 쉬운 일이 아닙니다.
이쯤되면 규모의 문제지만 흔히 말하는 소프트웨어 개발 주기를 가지고 있는 셈입니다.
작성한 스크립트를 모듈로 분리하고, CPAN 에서 요구하는 형식에 맞는
자동화 빌드와 문서 및 테스트 집합까지 포함해서 배포까지 고려한 온전한 펄 모듈을 작성한다면
여러분의 작업은 일원화되고, 사용화 친화적인 여러분의 프로그램에 팬들은 기뻐할 것입니다.
관련 연구
준비물
펄(Perl) 모듈을 작성하는 일은 여느 언어에서 그러하듯이 어렵지 않습니다.
하지만 새로운 모듈의 문서화를 위해 디렉터리 구조를 고려하고, 라이센스를 명시하고,
README 파일을 생성하고, 설치를 고려한 Makefile 작성 및 테스트 집합까지 포함하는 일은
비단 펄에서 뿐만이 아니라 어떤 언어를 사용한다 할지라도 번거로운 일임에는 틀림없습니다.
다행히 CPAN에는 이런 반복적이고, 유사한 작업을 자동으로 해주는,
즉, CPAN 모듈을 작성하기 위한 뼈대 구조(mock-up, skeleton)를 생성해주는 편리한 자동화 모듈이 많습니다.
Module::Starter 역시 그런 자동화 모듈 중 하나로 노련한 펄 해커인 Andy Lester가 작성한 모듈입니다.
- Module::Starter – a simple starter kit for any module
Module::Starter
Module::Starter 모듈은 명령행에서 실행할 수 있는 스크립트도 포함하고 있기 때문에
이 모듈을 설치하고 나면 module-starter 프로그램을 실행할 수 있습니다.
스크립트의 자세한 사용법은 다음 명령을 통해서 확인할 수 있습니다:
$ module-starter --help
--help 명령에서 확인할 수 있는 몇 가지 선택 사항을 소개합니다:
--module=module 모듈 이름 (필수, 반복 가능)
--distro=name 배포시 이름, 모듈 이름을 여러개 명시할 경우 첫 번째 항목으로 사용 (선택 사항)
--dir=dirname 새로운 모듈을 위한 디렉터리 구조 생성할 위치
(선택 사항, 명시하지 않을 경우 현재 디렉터리 사용)
--builder=module 'ExtUtils::MakeMaker' 나 'Module::Build', 'Module::Install'
중 하나를 고를 수 있음 (명시하지 않을 경우 'ExtUtils::MakeMaker'를 사용)
--eumm --builder=ExtUtils::MakeMaker 와 동일
--mb --builder=Module::Build 와 동일
--mi --builder=Module::Install 와 동일
--author=name 저자 이름 (필수)
--email=email 저자 전자우편 주소 (필수)
--license=type 배포한 모듈의 라이센스
(기본은 perl과 같은 라이센스)
--verbose 작업 중 진행 메시지를 출력
--force 필요하다면 동일한 이름의 파일이 존재할 경우 덮어씀
--help 도움말
Log::Simple::Color 모듈 작성
Log::Simple::Color 모듈을 예로 들어
이 모듈을 CPAN에 올릴 수 있도록 적합한 형태로 바꾸기 위해 명령줄에서 다음 명령을 실행합니다:
module-starter \
--module=Log::Simple::Color \
--author="Keedi Kim - 김도형" \
--email=keedi@perl.kr \
--builder=Module::Install \
--verbose
명령을 실행하면 --module에 명시한 이름을 기준으로 Log-Simple-Color 디렉터리를 생성하고
하부에 소스 코드 작성을 위한 lib와 테스트 코드를 위한 t, 자동 빌드를 위한 Makefile.PL 또는
Build.PL 등의 필수 파일들을 자동으로 만들어줍니다:
$ module-starter \
> --module=Log::Simple::Color \
> --author="Keedi Kim - 김도형" \
> --email=keedi@perl.kr \
> --builder=Module::Install \
> --verbose
Created Log-Simple-Color
Created Log-Simple-Color/lib/Log/Simple
Created Log-Simple-Color/lib/Log/Simple/Color.pm
Created Log-Simple-Color/t
Created Log-Simple-Color/t/perlcritic.t
Created Log-Simple-Color/t/pod-coverage.t
Created Log-Simple-Color/t/00.load.t
Created Log-Simple-Color/t/pod.t
Created Log-Simple-Color/.cvsignore
Builders 'Module::Install' and 'ExtUtils::MakeMaker' are mutually exclusive. Using 'ExtUtils::MakeMaker'. at /usr/local/share/perl/5.8.8/Module/Starter/Simple.pm line 827
Created Log-Simple-Color/Makefile.PL
Created Log-Simple-Color/Build.PL
Created Log-Simple-Color/Changes
Created Log-Simple-Color/README
Created Log-Simple-Color/MANIFEST
Created starter directories and files
$
여기까지 작업이 끝나면 Log-Simple-Color/lib/Log/Simple/Color.pm 파일에
이전에 작성한 모듈의 실제 코드를 붙여 넣으면 CPAN에 업로드하기 위한 모듈 작성의
첫 단계를 완료하게 됩니다.
정리하며
CPAN 저장소는 업로드하려는 모듈이 문서를 제대로 가지고 있는지, 자동화 빌드가 가능한지,
테스트 집합을 가지고 있는지, 또한 테스트에 통과하는지를 모두 자동으로 점검 후 이러한
기본적인 요소를 모두 충족한 경우에만 모듈을 받아들이고 CPAN을 통해 출판해줍니다.
이런 자연스러운 CPAN의 최소한의 강제를 통해 CPAN 모듈은 대부분 비교적 훌륭한 문서를 내장하고 있으며,
또한 cpan 프로그램을 통해 자동으로 설치할 수 있고, 설치시 테스트를 통해 문제점을 쉽게 발견할 수 있습니다.
비록 일련의 과정이 개발자에게 조금 번거로울 수는 있지만 사용자 친화적임에는 틀림없을 것입니다.
Module::Starter와 같은 모듈을 이용하면 이것 마저 단 한줄의 명령으로 해결할 수 있습니다.
다음 글에서는 Module::Starter가 생성한 파일을 토대로 Log::Simple::Color에 맞도록
수정해서 더욱 완전한 모듈 패키지를 완성해보도록 합니다.
관련 글

This work, unless otherwise expressly stated, is licensed under a Creative Commons Attribution-Noncommercial-No Derivative Works 2.0 Korea License.