셋째 날: 좋은 모듈을 고르는 좋은 방법

저자

@JEEN_LEE - 세작, 사쿠라, 쁘락치, github:jeen

시작하며

CPAN Testers Statistics에서 확인할 수 있는 것처럼 현재 CPAN 에 등록된 모듈은 3만여개에 가깝습니다. 많은 모듈이 있다는 것은 좋은 것입니다. 하지만 모든 모듈이 다 좋은 것은 아닙니다. A라는 일을 하기위한 모듈이 수십여개인 경우 도대체 무엇을 골라야 할지 난감하기 마련입니다. 그럼 우리는 어떻게 좋은 모듈을 골라야 할까요?

좋은 모듈이란?

그러면 좋은 모듈이란 도대체 무엇일까요?

제가 생각하는 몇가지를 나열해봤습니다만, 이 모든 것들을 충족시켜주는 것들은 손에 꼽을 정도가 아닐까요? 아니, 뭐 더 많을 수도 있구요. 좋은 모듈이라는 것은 결국은 개인 경험에 따른 주관이 개입하기 마련입니다. 그럼 100% 제 주관에 근거한 좋은 모듈을 찾는 방법을 알아보도록 하겠습니다.

1. Top 100 ++ Leaderboard @ MetaCPAN

주관을 뒤로하고 객관적인 지표가 될 수 있는 것은 바로 다른 사람들의 어떤 모듈에 대한 평가입니다. 현재 CPAN 에서 가장 높은 평가를 받고 있는 모듈은 그럼 무엇일까요? 2013년 12월 3일을 기준으로 다음과 같습니다.

  1. Mojolicious (170++)
  2. Moose (168++)
  3. perl (153++)
  4. DBIx-Class (143++)
  5. App-cpanminus (142++)
  6. DBI (129++)
  7. Plack (127++)
  8. Moo (118++)
  9. App-perlbrew (107++)
  10. DateTime (103++)

Top 100중 10위까지의 결과입니다. 1위는 요즘 인기를 누리고 있고, 저 역시 절찬리에 애용하고 있는 Mojolicious 입니다. 2위는 Meta Object Protocol 구현체인 Moose, 3위는 두 말할 것도 없는 Perl, 4위는 대표적인 ORM인 DBIx::Class입니다.

적어도 다른 사람들이 높게 평가하는 모듈을 사용하면 큰 지장은 없습니다.

2. MetaCPAN

MetaCPAN 홈페이지에는 몇 가지 참고할 만한 사항들이 있습니다.

Moo - MetaCPAN 그림 1. Moo - MetaCPAN (원본)

그림 1의 화면은 MetaCPAN의 Moo 모듈의 페이지입니다. 여기서 다음 항목을 살펴볼까요.

이전에 언급한 대로 ++ 수는 참고할만한 가장 일반적인 수치입니다.

최근 릴리즈 날짜 또한 좋은 선택기준이 됩니다. 가장 최근까지 이 모듈이 유지보수되고 있다는 것을 의미해주죠.

Bugs 또한 살펴봐야 할 부분입니다. 경우에 따라서는 실행환경에 의존되는 내용이 주를 이루는 경우가 있어, 관련 내용도 유심히 살펴볼 필요가 있습니다.

Reviews의 경우는 굉장히 주관적인 평이 주를 이루기 때문에 이 내용들 또한 잘 살펴봐야 됩니다.

Repository는 GitHub 같은 공개된 소스 저장소를 통해 모듈이 잘 관리되고 있는지를 확인할 수 있습니다. GitHub 같은 저장소 링크가 있다면 필요한 기능이나 패치를 직접 구현한 후 Pull Request를 손쉽게 보낼 수 있겠죠.

Test Results도 매우 중요합니다. 테스트 케이스가 많다면 어느 정도의 신뢰성을 보장해주기 마련입니다. 더불어 모듈의 SYNOPSIS를 봐도 이해하기 어려운 모듈의 사용법은 테스트 코드를 예제 삼아 사용법을 확인할 수 있습니다.

License펄 라이센스를 따르는 경우가 대부분이지만 경우에 따라 독자적인 라이센스를 제시하고 있는 경우가 있으니 항상 확인하는 것이 좋습니다.

3. CPAN 의존성

Top 100 Leaderboard에서 확인할 수 있는 좋은 모듈 또한 의존 모듈을 가집니다. 그런 좋은 모듈의 의존모듈은 기본적인 안정성을 보장하기 때문에 이 의존 관계에 자주 등장하는 모듈이라면 이 또한 분명 좋은 모듈이라고 할 수 있을 것입니다.

Moo - MetaCPAN 그림 2. CPAN 의존성 - Moo (원본)

거꾸로 역 의존성(reverse dependency)을 확인해볼 수 있습니다. 이 모듈을 얼마나 많은 모듈이 사용하고 있냐?라는 것이 하나의 지표가 되겠죠? Moo 역 의존성 링크에서 볼 수 있듯이, 수백개가 넘는 모듈이 Moo를 기반으로 만들어졌습니다. 대개 중추적인 기능을 하는 모듈은 이 역 의존성 페이지를 통해 확인할 수 있습니다. Moo와 같은 OOP 구현체 또는 각종 파서, 각종 클라이언트, 로거 등의 범용적인 모듈을 역 의존성 페이지를 이용해 확인하면 좋습니다.

4. Task::BeLike::.+

Task::BeLike:: 이름 공간으로 시작하는 모듈은 나름 스스로 잘나간다고 생각하는 CPAN Author마다 하나씩 가지고 있는 모듈입니다. 이런 모듈은 어떤 일들을 처리하기 위해서 어떤 모듈들을 사용하는 지에 대해서 나열합니다. 저자별로 수십가지 Task::BeLike:: 모듈이 있으니 나름 이름있는 CPAN Author의 Task::BeLike:: 페이지를 확인해보세요.

5. Module::Advisor

모듈을 사용하다 보면 이 모듈을 쓰면 문제가 생기지는 않을까?하고 종종 걱정하기도 합니다.

혹시나 어떤 문제가 있지는 않을까? 이것보다 더 좋은 것이 있지는 않을까?

그럴때는 Module::Advisor를 사용해보세요. Module::Advisor를 사용하면 모듈의 특정 버젼이 가진 보안 이슈, 퍼포먼스 이슈, 버그를 확인할 수 있으며 코드안에서 특정 모듈을 사용할 경우 그것보다 더 나은 선택지가 있는지를 알려줍니다.

6. 다른 사람에게 물어보기

프리노드 IRC 서버의 #perl-kr 채널에는 당장 무엇을 하려할때 가장 적합한 모듈이 무엇인지 알려줄 수 있는 사람들이 있습니다. IRC 에 들어오셔서 사람들과 호흡해보세요. :-)

스택오버플로우 역시나 큰 도움이 됩니다. 적절한 키워드를 사용해서 스택오버플로우를 탐험해보세요.

정리하며

좋다라는 것은 극히 주관적인 감정의 표현입니다. 다른 사람들에게는 소중하고 아름다운 모듈이라도 내가 쓰기에 좋지 아니한 경우라면 어쩔 수가 없는 노릇입니다. 특히 HTTP 클라이언트 구현체가 그렇습니다. 정말로 많은 사람들이 저마다의 모듈을 내보이니, 두 손 두 발 다 써도 셀 수 없을 지경입니다. 그 중에 몇몇 모듈은 저마다의 목적에 맞게 널리 사용되고 있습니다. 대표적으로 LWP::UserAgent, HTTP::Tiny, Furl, Mojo::UserAgent, LWP::Simple 등이 있습니다. 결국은 꾸준하게 사용하면 좋은 것을 찾아내고 그러면서 더 좋은 것을 선택하게 되지 않을까요?

blog comments powered by Disqus