저자: 스타스 백만, 역 송종범
이 기사에서 필자는 mod_perl을 소개하고 아파치에서 mod_perl을 할 수 있는 것으로 잘 알려진 몇몇 사이트를 여러분께 소개하고 같이 테스트해 볼 것이다.
mod_perl이란 무엇인가?
mod_perl이란 Apache/Perl 통합 프로젝트의 핵심이며 이는 펄 프로그래밍 언어와 아파치 웹 서버의 모든 성능을 함께 가능하게 해주었다.
외양에서부터 아파치는 "모듈"을 첨가함으로써 확장할 수 있도록 디자인 되었다. 이 모듈로 여러분은http 요청 재작성, 특정 페이지의 제한, 데이터베이스 검색과 같은 것들을 할 수 있다. 모듈은 어려운 일이 될 수도 있겠지만 대개 C언어로 작성된다. 그러나 mod-perl은 이런 모든 것들을 잘 할 수 있게 해주며 때로는 그 이상도 가능하게 해준다(펄을 사용하면 C언어보다 훨씬 빨리 개발할 수 있음). 아파치는 인터넷에서 가장 인기있는 웹서버이고 mod_perl은 아파치 확장을 가능하게 해주는 가장 인기있는 모듈 중에 하나이다.
왜 mod_perl이 그토록 인기인가?
펄을 좋아하고 제일 좋아하는 웹 서버가 아파치라면 첫 눈에 mod_perl을 좋아하게 될 것이다. 일단 mod_perl을 시도하면 다시는 빠져나올 수 없다. mod_perl에 여러분이 필요로 하는 모든 것이 있다는 사실을 깨닫게 될 것이기 때문이다. 만일 아쉬운 게 있다면 말만 해라. 셋을 세기도 전에 누군가가 당신을 위해 필요사항을 만들어 놓을 것이다. 물론, 보답할 무엇인가는 남겨놓겠지만… 따지고 보면 자신을 위해 어떤 기여든 커뮤니티를 위해 할 것이다. 또한 이러한 하나하나의 행동은 거대한 mod_perl 커뮤니티에서 시간을 절약하게 하여주기 때문에 이를 사용하고자 하는 다른 사람들을 위해 아주 많은 것들을 만들 수 있다.
즉 다음과 같은 상황을 연상하면 된다. mod_perl은 그것을 사용하는 사용자를 강하게 하고 이는 차례로 mod_perl을 강하게 해준다. 이것을 다시 mod_perl을 사용하는 사용자를 강하게 하고 다시…… 이것은 학창시절 배웠던 핵 연쇄반응과 같이 간단하다:)
mod_perl을 가지고 아파치 모듈 전체를 펄에서 다시 작성할 수도 있다. 이는 하위 요청들 아래 동작하는 것들이나 인증과 로그인 핸들을 쓰는 것과 같은 보통의 CGI 프로그램에서는 수행하기 어렵거나 불가능한 것들을 쉽게 할 수 있게 해준다.
mod_perl을 사용함으로써 얻을 수 있는 장점은 성능과 속도이다. 웹 서버의 내부적 동작에 모든 접근을 하고http 요청 처리의 어느 단계도 간섭할 수 있다. 이것은 다양한 상태에 최적화된 처리를 할 수 있게 해준다. 예를 들면 파일이름 변환를 위한 URI, 인증 생성과 로깅에 대한 응답 등이다.
또한 시동과 구성 시간도 크게 줄어든다. 서버에 내장된 펄 번역기는 펄 코드를 실행해야 하는http 요청을 위해 외부의 번역기를 실행하는데 따르는 오버헤드를 덜어준다. 서버가 처음 시작될 때 모듈들과 스크립트들은 적재되고 오직 한 번만 컴파일되기 때문에 적어도 코드 캐싱은 중요하다. 그 후 서버의 남은 존속기간동안 스크립트들은 캐시에서 제공된다. 따라서 서버는 단지 미리 컴파일된 코드를 실행하기만 하면 된다. 많은 경우에서 보듯이 이는 컴파일된 C 프로그램만큼 빠르다.
mod_perl에서도 거의 발생하지는 않지만 런타임 오버헤드가 있기는 하다. 특히 mod_perl하에서는 다른 웹 서버 확장들이 종종 이루어지는 것처럼 요청마다 별도의 프로세서를 시작할 필요는 없다. CGI(Common Gateway Interface)와 같이 가장 널리 퍼진 확장 메커니즘은 전체가 요청 프로세싱의 응답 생성 상태를 다루는 펄 코드로 대체되고 있다. 이런 목적을 위해 mod_perl로 번들된 두 가지 일반 목적 모듈이 있다.
Apache::Registry은 투명하게 존재하는 펄 CGI 스크립트들을 실행할 수 있고,
Apache::PerlRun은 비슷한 일을 하지만 좀 더 확장된 어려운 스크립트들을 실행하게 해 준다.
mod_perl은
PerlsetVar 지시자와
섹션을 사용하여 아파치 서버와 핸들러를 펄로 구성하게 해준다. 이는 많은 가상 호스트들과 복잡한 구성으로 서버 관리를 아주 쉽게 해준다. 이제는 구성 지시자까지도 조정할 수 있다.
mod_perl이 얼마나 빠르고 안정적인가?
많은 사람들이 mod_perl이 과연 얼마만큼의 성능확장을 할 수 있느냐에 대한 질문을 많이 한다. 이에 대한 대답은 mod_perl을 무엇에 사용하고 있느냐에 전적으로 달렸다고 할 수 있다. 개발자들은 200퍼센트에서 2,000퍼센트까지 속도를 올렸다. 이것을 측정할 수 있는 가장 좋은 방법은 그것을 직접 시도하고 실제로 보는 것이다. (사실 확인을 위해 http://perl.apache.org/tidbits.html과 http://perl.apache.org/stories 참고!)
매일 시시각각, 전세계 수천개의 웹사이트들은 수 십 만개에 이르는 웹 페이지를 제공하기 위해 mod_perl을 사용하고 있다.. 아파치와 mod_perl은 이제까지 작성된 프로그램 중에서 최고의 테스트를 거친 프로그램의 일부이다. 물론 이것들은 지속적으로 개발되고 발전하고 있지만 여러분이 직접 개발의 "최첨단"에서 일할 필요는 없다. 자신의 사이트에 안정된 제품을 사용할 수 있고 이를 다른 사람이 테스트 하도록 내버려 두면 그만이다.
여기서 필자는 mod_perl로 운영되고 있는 유명한 몇몇 웹사이트들(방문자가 많아서 항상 바쁘고 잘 알려진 사이트)을 보여주려 한다. 백문이 불여일견이라는 말이 있다. 이 사이트들을 직접 방문하고 그 차이를 느껴보기 바란다. mod_perl 방식이 무엇인지 확실히 보여줄 것이다.
- ValueClick - http://www.valueclick.com/은 하루에 7,000만 이상의 요청을 대략 20대의 머신에서 처리한다. 각 응답은 동적이며 모든 종류의 계산, 저장, 로깅, 카운팅 등등으로 구성되어 잇다. 그들의 "애플리케이션" 프로그래밍은 모두 펄로 작동한다.
- Singles Heaven - http://singlesheaven.com/은 35,000명 이상의 멤버를 가지고 성장하고 있는 중매 사이트이다. 이 사이트는 mod_perl, DBI, Apache::DBI(이것은 DB 접속에 영속성을 줌), MySQL로 운영된다. 속도가 엄청나기 때문에 mod_perl로 채팅하는 것은 아주 즐겁다. 모든 페이지마다 동적인 확인을 하기 때문에 모든 페이지는 약 10개의 SQL 질의(새로운 이메일 주소 확인, 다양한 감시자를 비롯한 그 이상의 것들에 의해 감시되는 사용자들 같은 것들)로 만들어졌다. 그렇지만 실제로 이런 질의가 발생하는지는 느끼지 못한다. 그리고 속도는 "Hello World" 스크립트만큼 빠르다.
- Internet Movie Database(Ltd) - http://www.moviedatabase.com/은 매일 200백만 페이지를 제공한다. 모든 데이터베이스 검색은 아파치 내부에서 mod_perl을 통해 다루어진다. 각 요청 역시 여러 mod_perl 핸들러를 거치고 결과는 광고 배너를 삽입하고 사용된 호스트명에 의존한 사이트마다 다른 시각들을 제공하기 위해 mod perl SSI와 더불어 전송시 재배열된다.
- CMPNet - http://www.cmpnet.com는 기술 정보 네트워크로 매일 약 600,000 페이지를 제공한다.
- CitySearch.com - http://www.citysearch.com은 전세계 100군데가 넘는 도시 안내를 온라인으로 제공한다. Citysearch.com은 사람들이 하고싶은 바를 계획하고 바로 실행에 옮길 수 있게 도와준다. 예를 들어 이벤트 표를 사거나 온라인에서 호텔과 식당 예약과 같은 로컬 트랜잭션을 제공한다. 이 사이트의 트래픽은 한 달에 1억 페이지가 넘는다.
얼마나 많은 사이트들이 mod_perl을 사용할 수 있는 아파치 웹 서버를 운영하는가?
Netcraft(http://netcraft.com)에 의하면 2001년 8월 1,800만 호스트들이 무료 아파치 웹서버를 운영하고 있다고 한다. 이 수치는 전체 조사된 수치의 대략 60퍼센트 정도에 해당한다.
여기를 클릭하면 "인터넷 웹사이트에서 서버 점유율" 그래프를 볼 수 있다.
mod_perl은 어떤가? http://perl.apache.org/netcraft는 mod_perl을 운영하는 사이트가 2,823,060개의 호스트 네임을 가지고 있으며 283,180개의 고유 IP 주소를 가지고 있다고 발표하였다. 이 수치는 실제로는 과소평가된 것이라고 볼 수 있다. 왜냐하면 80, 81, 8080을 비롯한 몇몇 개의 잘 알려진 포트만 체크한 웹 서버를 운영한 호스트만 체크했기 때문이다. 잘 알려지지 않은 포트에서 서버를 운영하고 있다면 관리자가 Netcraft 데이터베이스에 수동으로 수치를 입력하기 전까지는 카운트되지 않기 때문이다. 아래 보이는 그림은 mod_perl 사용자의 성장률을 보여주는 그래프이다.
최신 수치를 보려면 http://perl.apache.org/netcraft/를 방문해보기 바란다.
앞으로의 길
차세대 최고의 웹서버인 아파치 2.0 출시 소식을 들은 사람들은 이 발표에 흥분했을 것이다. 이 새로운 웹 서버의 주요 특징은 스레드된 프로세서이다. 이것은 서버를 좀 더 계량화함은 물론 아주 환영받는 필터링 계층으로 만들어 준다.
이에 비해 펄 5.6의 발표에는 그다지 많이 흥분하지는 않았을 것이다. 이것의 새로운 사양은 거의 스레드에 대한 안정된 지원(이전 버전의 펄에서 지원은 했지만 매우 불확실했던) 정도였다.
mod_perl을 가지고 해야만 하는 일은 무엇인가? mod_perl 2.0은 이런 시점에 개발되고 있으며 새로운 아파치와 펄 사양으로부터 커다란 이익을 얻고 있다. 가장 중요한 발전은 줄어든 프로세스 사이즈이다. 파싱된 펄 조작 부호는 거의 완벽하게 같은 프로세서의 스레드 사이에서 공유된다.
이와 같은 우연의 일치가 믿겨지는가? 펄 5.6과 아파치 2.0은 2000년 3월 같은 주에 발표되었다. 필자 개인적으로는 이 우연의 일치가 아주 의심스럽게 보인다. 만일 아직 밝혀지지 않은 음모를 알고 있다면 필자에게도 알려주길 바란다.
물론, 우리 앞에는 많은 난관이 있다. 스레딩 사양으로부터 모든 애플리케이션들이 이익을 얻을 수 있기까지는 많은 시간이 소요될 것이다. 여기서 주목해야 할 사항은 CPAN에서 사용할 수 있는 대부분의 펄 모듈들이 스레드에 안전하지 않다는 사실에 있다. 그렇지만 절망하지 말아라. 스레드에 안전하지 않거나 안전한 스레드가 아닌 모듈을 사용하는 스레드를 펄 코드에서는 끌 수 있다.
지금 mod_perl을 사용하고 싶다. 그런데 어디서 얻을 수 있나?
mod_perl의 홈페이지는 http://perl.apaache.org이다. 이 사이트에서 최신 버전의 mod_perl 소프트웨어와 다양한 문서들은 물론이고 상업적 제품들, 무료 서드파티 모듈을 찾거나 성공 스토리를 읽을 수도 있다. 이 사이트를 통해 mod_perl에 대하여 좀 더 많은 것들을 배울 수 있을 것이다.
mod_perl 리스트를 정기적으로 보는 것도 중요하다. mod_perl에 대한 소식을 알고 싶거나, 새로운 사양이 개발되는지 여부 및 mod_perl에 영향을 미치거나 기여를 원하거나, 단순히 도움을 얻고자 할 때 그리고 정기적으로 이에 대한 정보를 이메일로 받아보고 싶을 때 빈 메일을 modperl-subscribe@apache.org로 보내기 바란다.
어떤 mod_perl 책들이나 문서화가 있는가?
Lincoln Stein과 Doug MacEachern이 쓴 『Writing Apache Modules with Perl and C』이 있다.
또한 mod_perl 홈페이지인 http://perl.apache.org에서 mod_perl 리스트를 찾아볼 수 있을 것이다.
mod_perl이 정말 좋다. 누가 이런 훌륭한 무료 제품을 작성했는지 알고 싶다.
이 질문에 대한 답변을 책임질 사람은 Doug MacEachern이다 :) 바로 그가 mod_perl을 mod_perl 커뮤니티에 주었던 사람으로 mod_perl 프로젝트의 리누즈로 인정받고 있다.
큰 커뮤니티에서는 항상 그렇듯이 늘 도와주기를 좋아하는 사람들이 있고 전세계로부터 mod_perl을 패치하거나 그것을 위하여 펄 모듈 전체를 개발하고, 서버를 디버그 하며 이를 발표하는 수 많은 개발자들이 있다. 필자는 이 커뮤니티에 기여하고 있는 개발자들의 목록이 너무 길어서 전부 다 포함되지 못할까 걱정이다. mod_perl 리스트에 가입해서 이런 사람들을 만나보고 싶다면 이런 시도를 후회를 하지 않을 것은 분명하다. 왜냐하면 mod_perl에 관하여 보다 많은 것을 배울 수 있기 때문일 것이다. 스스로 찾아보시길…
참여하기
만일 mod_perl을 사용하고 있거나 사용할 계획이라면 사용자들은 mod_perl 메일링 리스트에 가입할 것을 추천한다. 이 메일링 리스트에 가입하기 위해서는 빈 메일을 modperl-subscribe@apache.org로 보내야 한다.
만일 mod_perl 2.0 개발에 흥미가 있어서 우리와 같은 길을 가겠다면 환영하는 바이다. 충족시킬 필요가 있는 사양들이 아직도 있고 수 많은 시험이 이루어져야 한다. 따라서 똑똑한 개발자는 물론이고 초보라 할지라도 우리를 도울 수 있는 일들은 많다. 우리가 많은 도움을 받을수록 mod_perl 2.0은 더 빨리 제품화 되어 여러분의 품에 안길 것이다. 이러한 활동 또한 dev-subscribe@perl.apache.org에 메일을 보내 개발자 메일링 리스트에 가입하여 할 수도 있다.
만일 mod_perl을 들어 잘 알고 있는 사람이라면 수 많은 사람들의 도움으로 유지되는 크고 엄청난 mod_perl 가이드에 대하여 알 것이다(http://perl.apache.org/guide). 그러나 mod_perl 2.0에 약간의 변화가 있어 새로운 문서화 작업이 시작되고 있다. http://perl.apache.org 사이트의 업데이트 상황을 항상 체크하고 docs-dev-subscribe@perl.apache.org에 메일을 보내 최신 문서화 메일링을 받아볼 것을 추천하는 바이다.
참고