Author: aer0
Category: Seoul.pm
Package: Seoul.pm
Title: Perl 생태계 가이드

저자

@aer0 - Seoul.pm, #perl-kr의 정신적 지주, Perl에 대한 근원적이면서 깊은 부분까지 놓치지 않고 다루는 홈페이지 및 블로그를 운영하고 있다. aero라는 닉을 사용하기도 한다.

시작하며

23일 동안 열혈 서울 펄 몽거스를 위시한 많은 펄 몽거들이 푸짐한 선물 보따리를 풀어놓았습니다. 관심을 가지고 지켜보신 분들이라면 Perl의 새로운 모습을 느꼈으리라고 생각합니다. Perl은 과거 웹 프로그래밍이라면 CGI로 인식되던 시대에 잘나가던 시절이 있었습니다. 하지만 PHP의 등장으로 CGI로 웹을 만들던 사람들이 PHP로 넘어가게 되었고 그 후 Python, Ruby 같은 언어들이 인지도를 높혀가면서 Perl은 상대적으로 시야에서 멀어진 언어로 인식되어 왔던게 사실입니다. 그와 함께 훈련되지 않은 프로그래머들이 양산해놓은 많은 스파게티 CGI 코드들로 인해 유지보수가 힘들다는 근거 없는 루머에 시달리기도 했죠. 하지만 Perl은 유행과 시류에 휘둘리지 않고 조용히 안정성을 추구하며 함께 새로운 기술들을 받아들이면서 꾸준히 발전해 왔으며 2009년경 부터 이른바 Modern Perl이라는 움직임이 일어나 다시금 중흥기를 맞고 있습니다. 이 글은 그 동안 Perl이 변화한 모습을 설명할 것입니다. 또, Perl을 새롭게 접하고자 하거나 다른 언어 사용자의 입장에서 Perl을 접하고자 할 때 어떤 과정을 통해 Perl에 익숙해질 수 있는지 설명할 것입니다. 마지막으로, 원하는 바를 구현하려고 할 때 어떤 기술을 사용할 수 있는지 Perl 생태계에 대한 총체적인 가이드라인을 제시할 것입니다.

Perl을 어떻게 배울 것인가?

시중의 최신 한글 Perl 서적은 Learning Perl 5판 번역서인 거침없이 배우는 Perl입니다. 이 책으로 시작하는 것을 추천합니다. 책을 읽으면서 다음 내용도 같이 참고해서 살을 붙여나가세요.

Perl은 OOP(Object Oriented Programming), AOP(Aspect Orientied Programming), FP(Functional Programming) 같은 특정 패러다임을 추구하지 않고 유연한 구조로 멀티 패러다임을 추구하고 있으며(아래 링크 참조) Perl이 가지는 문법적 유연성으로 인해 어떤 방향으로든 쉽게 진화가 가능합니다. 이를 통해 고집스럽게 하위 호환성을 유지하면서도 새로운 모습으로 발전해나가는 힘이 되고 있습니다.

Perl 5 와 Perl 6는 어떻게 다른가?

Perl 5 와 Perl 6는 같은 가족이지만 다른 언어라고 생각하면 됩니다. 쉽게 말하면 C와 C++의 관계 쯤으로 생각할 수 있습니다. C++이 나오고 나서도 C는 여전히 함께 잘 쓰이고 있습니다. Perl 6는 현재 본격적인 개발에 사용되기에는 주변 환경이 완전히 갖추어진 상태가 아닙니다. 따라서 현재는 Perl 5가 Perl을 대표하며 그간의 버전업 과정에서 Perl 6의 좋은 특징들을 지속적으로 backport 해왔습니다. Perl 5와 Perl 6는 같은 가족으로서 철학과 문화를 공유하며 같이 발전해 나갈 것 입니다.

Perl 설치와 모듈 설치

다음 링크는 한눈에 알아볼 수 있는 Perl의 다운로드 페이지입니다.

Windows에서 Perl은 Strawberry PerlActiveState Perl이 있습니다. 사용 예는 다음을 링크를 참고하세요.

Solaris, FreeBSD, Mac OS X, Linux 등 UNIX류 OS에는 Perl이 기본으로 설치되어 있습니다. 하지만 다른 패키지들이 의존하고 있는 시스템의 기본 Perl은 건드리지 않고 최신 버전의 Perl이나 모듈을 나름대로 독립적인 환경에서 설치하여 쓰려면 다음 글을 참고합니다.

요즘은 여러 PaaS(Platform as a Service) Cloud 서비스에서 Perl을 지원하고 있습니다.

Perl의 성능은 어떤가?

Perl의 성능은 여타 스크립트 언어들에 비해 속도와 메모리 효율성에 있어 우위에 있다고 알려져 있습니다. 현대적 어플리케이션의 대부분의 작업은 문자열(데이터)을 다루는 것이며, 다음은 각 언어들이 얼마나 그것을 빠르게 처리하고 메모리를 효율적으로 다루는가에 초점을 맞춘 벤치마크 자료입니다. 결과를 보면 Perl이 C, C++, PHP, Python, Ruby 등을 제치고 1등의 성능을 보여주고 있음을 볼 수 있습니다.

벤치마크 결과에 이견이 있을 수는 있지만 별다른 테크닉을 사용하지 않고 평이한 문법을 그대로 사용한 상태에서 빠르고 효율적인 모습을 보여주었다고 하면 그 만큼 더 가치를 발하는 것이겠지요.

Perl 관련 싸이트는?

Perl 언어관련

CPAN 모듈 관련

CPAN은 라이브러리의 재사용성이 실제로 현실에 적용되도록 해준 선구자적인 모듈 저장소입니다. CPAN의 모듈수는 10만개를 넘는 수준으로 타의 추종을 불허하며 PHP의 PEAR, R의 CRAN, Ruby의 rubygems, Python의 Pypi, Node.js의 npm 등의 모듈 저장소들이 CPAN의 모델을 따라 만들어 졌습니다.

Perl 관련 커뮤니티 싸이트

외국:

한국:

Perl 뉴스 및 정보 싸이트

다음은 Perl의 최신 소식을 가장 빠르게 받아볼 수 있는 싸이트입니다. 관심있다는 사이트의 RSS를 구독하면 도움이 될 것입니다.

Perl 관련 프레임웍 및 기술

웹 관련 프레임웍

웹기술은 주로 C나 Perl로 하던 CGI에서 PHP같은 언어자체가 템플릿요소를 포함한 유행을 거쳐 요즘은 다시 웹서버/캐시레이어/프락시/미들웨어/웹어플리케이션 등의 레이어가 세분화된 프레임웍 기반의 개발이 대세가 되고 있습니다. Perl은 이런 시대적 흐름에 맞춘 각종 웹 관련 프레임웍을 갖추고 있습니다.

비동기/네트웍/동시성 프레임웍

Perl의 Thread는 Python, Ruby와 다르게 GIL(Global Interpreter Lock)이 없어 multi-core CPU 환경에서 모든 core를 사용할 수 있습니다. AnyEvent, POE 등 비동기 이벤트 기반 프레임워크나 Coro와 같은 Coroutine도 지원합니다. 이외에도 fork 기반의 다양한 병렬 처리 모듈이 준비되어 있습니다. AnyEvent 모듈을 만든 Marc Lehmann이 AnyEvent에 쓰기위해 만든 libev는 우수한 성능이 입증되어 Python의 Twisted, Ruby의 EventMachine, Node.js에서도 기반 라이브러리로 가져다 쓰고 있습니다.

참고 글:

GUI 및 그래픽

과학 및 수치계산

시스템관리 및 자동화

Perl은 Linux/UNIX류 운영체제라면 어디에나 기본적으로 설치되어 있고 그 외 다양한 OS에도 포팅되어 있으며 하위 호환성을 잘 지키며 안정적이고 텍스트 처리에 뛰어나다는 장점 때문에 시스템 관리에 주류 언어로 사용되어 왔습니다. CPAN에는 SSH, Telnet, FTP, SNMP 등 각종 시스템 관리에 필요한 모듈과 툴이 넘쳐납니다.

단일파일 배포 및 패키징

정리하며

Perl의 세계는 위에서 다 언급하지 못할 정도로 방대합니다. 그 모든 것을 알려드리기에는 이 글로서는 역부족인 것 같네요. 더 궁금하신 것들이 있으면 주위의 Perl 몽거들에게 도움을 청하면 친절하게 알려줄 것입니다. 혹시 아나요, 내년 Perl 달력에서는 여러분의 글이 실리게 될지... :)

아무쪼록 이 글이 부족하나마 Perl 여행을 떠나시려는 분들께 도움이 되었으면 합니다.

Merry Christmas!! ;-)