이명헌 경영 스쿨
[언어] 펄을 배우는 이유
캐멀북에 실린 펄 추천 글 번역
이명헌 [ 2000-10-14 ]

Camel펄은 텍스트, 파일, 프로세스를 아주 쉽게 다루게 해주는 언어입니다. 기존에 C 언어나 쉘(shell) 프로그래밍을 통해 (상당히 어렵게) 해결해 냈던 많은 일들이 펄을 사용함으로써 훨씬 간소하면서도 쉬운 방식으로 이루어지게 되었죠.

최초 펄은 data reduction language로 쓰일 목적으로 만들어 졌는데요, 여러 종류의 파일을 다양한 방식으로 검색하거나 큰 크기의 텍스트를 효율적으로 검색, 또는 다이내믹 데이타를 만들어 내기 위한 명령어를 가동한다거나 그렇게 모은 데이타를 바탕으로 포매팅된 레포트를 손쉽게 만들어 낼 목적으로 기획된 것이었습니다. 그리고 펄은 그 목적을 훌륭하게 달성해 주었죠. - 패턴 매칭(pattern matching)이라든지, 텍스트를 다루는 것에 있어서 그런 목적을 위해 씌여진 C 프로그램보다 훨씬 월등한 결과를 드물쟎게 보여 주었던 것입니다.

하지만 펄이 개발되어 가면서 텍스트는 물론이고 파일을 쉽게 다룰수 있게 해주는 언어로도 성장해 갔는데요. 파일 내용과는 별도로 파일 그 자체를 다루게 해 준다든지, 파일의 위치를 이동한다든지, 이름을 바꾼다든지, 퍼미션(permission)을 바꾼다든지 등의 작업이 펄을 통해 아주 쉽게 가능해지게 된 것입니다.

또한 펄은 프로세스를 다루는 데에도 매우 편리한 언어로도 자리잡습니다. 프로세스를 만들거나 죽이는 것, 프로세스 사이의 데이타 흐름을 조절하는 것, 입력을 전처리(preprocess)하거나 출력을 후처리(postprocess)하는 것, 그리고 프로세스에 문제가 생긴 경우 정리하는 기능 등이 펄을 통해 쉽게 가능했던 것입니다.

펄은 네트워킹 언어로도 명성을 얻습니다. 그건 소켓(socket)을 통해서 다른 머쉰에 있는 다른 프로세스와 커뮤니케이션을 하는 것이 펄을 통해 가능했기 때문입니다.

물론 이런 것들은 C 언어나 다른 쉘 프로그래밍을 통해서도 가능합니다. 하지만 그렇게 억지로 만들어 낸 솔루션은 만들기가 어려웠을 뿐만 아니라 난잡스러워지기 쉬웠습니다. C 언어로는 쉘로 쉽게 할 수 있는 일을 하기가 까다로왔고, 역으로 쉘은 또 C 언어로 쉽게 되는 작업을 하기가 어려웠기 때문입니다. 펄은 바로 이 양자간의 틈을(상당히 큰 간격이었죠.) 훌륭하게 메꾸며 양쪽 언어에서 가능한 모든 작업들을 한 장소에서 쉽게 할 수 있는 길을 터 줍니다. 결국 펄은 쉘 프로그래밍과 C 프로그래밍의 가교 역할을 한 것입니다.

다른 한 편으로, 펄을 공부함으로써 C 언어를 배우는 데도 많은 실제적인 도움을 받을 수 있는 게 사실입니다. C 언어를 배우는 것 자체가 목적이더라도 그렇습니다. 그리고 C 언어를 잘 알고 있는 사람이라면 펄을 배우는 것은 더욱 쉬운 일이 될 겁니다. 두 언어는 매우 비슷한 구조를 갖고 있기 때문입니다. 그리고 펄은, 쉘을 통해 실행할 수 있는 많은 유닉스 유틸리티와 공통점이 많았기 때문에, 펄과 유닉스를 함께 공부하는 것은 서로서로 많은 도움을 주게 됩니다.

어떤 프로그래밍 언어가 새로운 사고 방식을 가르쳐 주지 않는다면 그 언어는 배울 가치가 없다는 얘기가 있습니다. 아마도 그 규칙의 유일한 예외가 펄이 아닐까 합니다. 왜냐하면 펄은 유닉스의 여러 파트로부터 그 바탕을 이루는 철학을 차용해 오면서 개발되어 왔기 때문입니다. 펄을 좋아하는 사람에게 펄은, Practical extraction report language일 것입니다. 하지만 펄을 사랑하는 사람에게는, Pathologically eclectic rubbish lister입니다. 그리고 어떤 일을 하는 데는 오직 한 가지 방법밖에 없다고 믿고 있는 미니멀리스트들이 볼 때 펄은 한심스러울 정도로 동어반복적이고 다른 것들로부터 베껴온 것처럼 보일 것입니다. 하지만 어쨌든, 유닉스 툴박스 기저에 깔려있는 '미니멀리즘 철학'(minimalistic)을 심각하게 위반하는 것을 통해 펄은 유닉스 상에서 중소 규모의 작업을 처리하는 대표적인 툴로 떠 올랐으며, 결국 유닉스 툴박스와 아주 잘 어울리는 형태로 존재하게 되었습니다. 펄은 많은 새로운 툴을 창조해 낼 수 있는 작업대로서 자리매김하게 된 것입니다.

펄은 여러 가지 측면에서 단순한 언어입니다. 데이타 타입이나 구조를 배우기 쉽고 사용하기도 용이하게 만들어져 있습니다. 잘 작성된 펄 코드는 가볍게 읽어보는 것만으로도 그 기능을 쉽게 파악할 수 있을 정도입니다. 펄 프로그램을 컴파일하는 것은 특별한 요술 주문 같은 것을 몰라도 가능합니다. 그냥 보통의 쉘 스크립트처럼 펄 프로그램을 실행시킬 수 있기 때문입니다. 심지어 펄에 대한 모든 것을 모르고서도 얼마든지 유용한 프로그램을 만들 수 있는 것이 바로 펄입니다.

여러 가지 측면에서 단순하면서도 한 편으로 펄은 매우 풍부한 언어이기도 합니다. 배울려고만 한다면 많은 배울거리가 있습니다. 펄로 할 수 있는 모든 것을 다 배우려면 상당한 시간을 들여야 합니다만, 더 까다로운 기능이 필요한 순간에 펄의 풍부한 기능을 사용할 수 있다는 것은 즐거운 일입니다.

위에서 펄이 C나 쉘 프로그래밍으로부터 많은 기능들을 빌어왔다고 했습니다. 다른 한편으로 펄은 sed나 awk의 strict supercase를 갖고 있기도 합니다. 사실, 펄에는 오래된 sed , awk 프로그램을 변환할 수 있는 번역기(translator)가 있기도 합니다. 그걸 사용해서 이들 프로그램들을 펄 스크립트로 전환할 수도 있습니다. 이미 잘 알고 있는 기능들이 펄에서는 어떻게 쓰이는지 쉽게 살펴볼 수 있습니다.

이외에도 많은 사람들이 펄을 좋아하는 다른 이유들이 있습니다. 많은 유닉스 유틸리티는 문서화되지 않은 사실상의 한계가 있는 경우가 많습니다. 예를 들어, 유닉스 유틸리티들은 매우 긴 라인을 제대로 처리하지 못 한다거나 바이너리 데이타를 먹이면 에러를 일으키는 등의 문제점이 있습니다. 이러한 유닉스 유틸리티들의 한계는 그것이 C 언어로 씌여졌다는 점에서 비롯된 경우가 상당히 많습니다. 펄은 그런 한계를 갖고 있지 않습니다. 줄이나 배열을 원하는 대로 늘릴 수 있을 뿐만 아니라, 서브루틴의 리커젼(recursion) 역시 원하는 대로 깊게 들어갈 수 있습니다. 변수 이름 길이 역시 아무 제한이 없습니다. 바이너리 데이타가 문제를 일으키지도 않습니다. 해쉬로 만든 해쉬 테이블은 성능에 지장을 주지 않는 한 무한히 확장할 수 있습니다. 그리고 그런 것들을 DBM 파일이라고 하는 데이타베이스 파일에 저장할 수도 있습니다.

또는 더 안전한 프로그램을 만들기 위해 펄을 배우려 할 수도 있습니다. 데이타 흐름 추적 미케니즘을 통해, 펄은 어떤 데이타가 안전하지 않은 소스로부터 왔는지를 알 수 있고, 그로부터 위험한 작업이 수행되는 것을 차단합니다. 시스템 관리자라면 펄의 이런 특징을 아주 고맙게 생각할 것입니다.

펄이 매우 빠른 시간 내에 프로그램을 완성할 수 있다는 것에 끌릴 수도 있습니다. 펄은 인터프리티드 스크립트 언어이기 때문에, 프로그램에 문제가 생기는 경우 즉각 반응을 보입니다. 펄에는 펄의 문법을 이해하는(펄로 씌여졌기 때문에) 기본으로 장착된 symbolic debugger가 있습니다.

사람들은 보통 펄을 "시스템 관리자 언어"라고들 합니다. 시스템 관리자들이 주로 펄에 대해서 많은 얘기를 하기 때문일 것입니다. 하지만 우리가 보기에 펄은 훨씬 더 넓은 분야에서 매력적으로 쓰일 수 있는 언어입니다.

프로그래머가 갖춰야 할 세 가지 덕목

  • 게으름(Laziness)
    일반적인 에너지 낭비를 줄이고자 노력하게 만드는 덕목입니다. 다른 사람이 유용하게 사용할 수 있는 "노동-감소 프로그램"을 만들고, 그 프로그램에 관한 수많은 질문에 일일이 답변하지 않게 하기 위해 프로그램에 관한 문서를 만드는 덕목입니다. 그러므로 프로그래머가 갖춰야 할 첫 번째 덕목이라고 할 수 있습니다.
  • 조급함(Impatience)
    컴퓨터가 게으르게 행동할 때 느끼는 분노를 얘기합니다. 어떤 프로그램이 단지 당신의 필요에 대해 반응을 하는 것이 아니라 필요를 '예측'할 수 있게 만들려는 덕목입니다. 최소한 그렇게 보이게라도 합니다. 그러므로 프로그래머가 갖춰야 할 두 번째 덕목이라고 할 수 있습니다.
  • 오만함(Hubris)
    과도한 자긍심. 이것은 다른 사람이 불평하지 못 할 프로그램을 만들고 유지하게 하는 덕목입니다. 그러므로 프로그래머가 갖춰야 할 세 번째 덕목이라고 할 수 있습니다.
지금 계신 곳은: TECH > [언어] 펄을 배우는 이유