mod_perl 2 시작하기

등록일:2007-07-12 00:14:56
by 이채광


 

제목

mod_perl 2 시작하기

 


문서의 방향

어떤 조합으로 아파치, 펄, mod_perl을 설치하고 운영하느냐는 여러분 자신에게 달려 있다. 이 문서에서는 아파치와 펄의 최신 버전을 기준으로, mod_perl 설치법에 대해 설명한다.

이 문서는 mod_perl 2.0를 다룬다. mod_perl 2.0은 아파치 2.0에 맞추어 개발되었다. 아파치 1.3에 맞추어진 것과는 호환되지 않는다. 앞으로, 이 문서에서는 mod_perl 2.0을 mod_perl로 표기할 것이며 이전의 mod_perl 1.0과 구별이 필요할 때는 mod_perl 2.0으로 표기할 것이다.

mod_perl을 사용자 계정으로 설치함으로써 많은 테스트를 할 수 있도록 하였다. 루트 권한으로 설치해야 할 때에도 도움이 될 것이다.

유닉스(FreeBSD 5.3 stabe)에서 lcg 사용자(홈디렉토리 /home/lcg)를 예로 들었다.

 


소개

아파치와 펄은 매우 역동적인 오픈 프로젝트이다. 두 덩치들을 조화시키는 일이 mod_perl의 역할이다. 현재(2005.01.04), mod_perl은 이 두 덩치뿐 아니라 mod_perl 관련 모듈의 버전에도 예민하다. 즉, mod_perl도 현재 빠르게 변하는 중이다.

mod_perl은 다른 모듈(예를 들면, mod_php)처럼 단순히 웹 사이트의 컨텐츠만을 다루지 않는다. 아파치 설정 지시자를 제공하고 서버(아파치)의 각 단계에 접근할 수 있으며 아파치 2에 추가된 필터 기능도 사용할 수 있게 해 준다.

웹 페이지에 펄을 임베드 시키는 Mason. 이것의 기반도 mod_perl이다.

 


mod_perl 설치에 필요한 준비물

  •  
  • 펄 : 아파치 2.0는 기존의 프로세스 방식(prefork)에 쓰레드 방식(worker)이 추가되었다. 아파치의 프로세스 방식을 사용하려면 펄 5.6.1 이상이 필요하며, 아파치의 쓰레드 방식을 사용하려면 펄 5.8.1 이상이 권장된다. 현재 펄의 최신 버전은 5.8.5이며 펄 공식 사이트(http://www.perl.com)에 가면 다운로드 받을 수 있다.
  •  
  • 아파치 2.0 : mod_perl을 동적 모듈(DSO: Dynamic Shared Object)로 설치하려면 아파치 2.0.47 이상이 필요하며, 정적 모듈로 설치하려면 아파치 2.0.51이상이 필요하다. 현재 아파치의 최신 버전은 2.0.52이며 아파치 공식 사이트(httpd://httpd.apache.org)에서 다운로드할 수 있다.
  •  
  • mod_perl : 공식 사이트(http://perl.apache.org)에 가면 다운로드 할 수 있다. mod_perl 2.0을 선택하면 된다. 현재, 아파치의 쓰레드는 아파치 내부에서도 문제가 되고 있기 때문에 개인적으로 프로세스 방식을 권한다. 주의! mod_perl 2.0은 아직 베타 버전임을 명심해야 한다.

앞서 말했듯이, 현재 아파치와 펄은 빠르게 변하고 있다. 때문에 mod_perl도 빠르게 변하고 있다. 여러분이 만약 처음으로 mod_perl을 접한다면 최근 버전에서 시작하고자 할 것이다. 소스를 이용해 아파치와 펄을 설치할 수 있다면 버전 제약에 유연하게 대처하기 쉬울 것이다.

 


펄 설치

펄마니아 문서 ``CPAN 모듈 시작하기''를 참고하기 바란다.

 


아파치 2 설치

다음과 같이 기본 설치를 한다. 여기서, --prefix는 최소한의 설정이다. 아파치 배포본은 기본적으로 /usr/local/apache2에 모든 파일들을 설치하기 때문에 루트가 아니면 곤란하다. 위의 설치로 /home/lcg/apache2 디렉토리 안에 아파치의 모든 것이 설치된다. 시스템에 루트 권한으로 설치할 때는 각 운영체제마다의 정책이 있으니 이를 참고해서 설치하는게 좋다. FreeBSD의 경우(포트 설치시) /usr/local 디렉토리 안의 여러 디렉토리에 나뉘어 설치된다. configure.layout 파일을 보면, 아쉽게도 아파치는 FreeBSD 레이아웃을 제공하지 않는다!

$ tar xvfz ./httpd-5.0.52.tar.gz

$ cd httpd-5.0.52

$ ./configure --prefix=$HOME/apache2

$ make

$ make install

httpd.conf 설정 파일을 적당히 수정한 후에 브라우저로 확인한다. 루트가 아니기 때문에, 포트는 1024 이상으로 해야한다. 이제 아파치가 제대로 설치되었는지 확인해야 한다. 이는 여러분에게 넘기도록 하겠다. 시스템에 펄이 설치되어 있다면 아파치 설치시 자동으로 apxs라는 것이 설치될 것이다. 이는 개발자들에게 매우 유용한 툴이다. 보다 상세한 설명은 man 페이지를 참고 하라. 만약 펄이 없다면... 시스템에 펄을 설치하던가 아니면 펄이 있는 시스템으로 옮기도록 하라!

마지막으로 다음처럼 apxs를 확인한다.

$ cd 

$ cd apache2/bin

$ head -n 1 ./apxs

#!/usr/bin/perl -w

$

시스템에서 제공하는 펄(/usr/bin/perl)을 사용하고 있다. 만약 본인의 계정에 설치한 펄을 사용하고자 한다면 첫 줄을 /home/lcg/perl/bin/perl 로 수정해 준다. 사실, 어떤 것을 사용해도 상관없다.

 


mod_perl 설치

앞서 말했듯이, 우리는 mod_perl을 아파치의 정적 모듈로 설치할 수도 있고 동적 모듈(DSO)로 설치할 수도 있다. 아직 mod_perl은 아파치 2.0에 대해 베타 버전이므로 동적 모듈로 설치한다. 동적 모듈로 설치하면 후에 mod_perl이 업그레이드 되었을 때 아파치를 재컴파일할 필요가 없기 때문이다.

현재 mod_perl이 동적 모듈로 설치되기 위해서는 아파치의 버전이 2.0.47 이상이어야 한다. 만약 이보다 낮은 버전의 아파치에 설치하려면? mod_perl이 거부한다. 우리는 앞서 아파치 2.0.52를 설치했기 때문에 신경쓰지 않아도 된다.

mod_perl을 설치하기 전에 필요한 펄 모듈이 있다. CGI.pm은 버전이 3.01 이상이어야 하고, Compress::Zlib은 버전이 1.09 이상이어야 한다. mod_perl 인스톨 문서(http://perl.apache.org/docs/2.0/user/install/install.html)에서는 이 모듈들이 꼭 필요하지는 않다고 말하면서도 문제가 생길 수 있다는 엄포를 놓고 있다. ‘cpan으로 펄 모듈 설치’에서 배운데로 이 모듈을 설치해 준다. 펄 5.8.5를 설치하면 CGI.pm 3.05은 자동으로 설치되므로 Compress::Zlib만 설치하면 된다.

설치는 펄 동네의 관례를 따르고 있다. 약 5분 정도가 소요될 것이다.

$ tar xvfz ./mod_perl-2.0.tar.gz

$ cd mod_perl-1.99_17

$ $HOME/perl/bin/perl ./Makefile.PL MP_APXS=$HOME/apache2/bin/apxs

$ make

$ make test

$ make install

$

앞서, 아파치를 /home/lcg/apache2에 몽땅 설치했기 때문에 꼭 apxs가 없어도 모듈(mod_perl.so)을 추가하는데 별 어려움은 없다. 다음처럼 아파치가 설치된 디렉토리만 지정해도 된다. 그러나 이 경우는 테스트 단계에서 문제가 발생한다. 되긴 되나... 지저분하다! 엄밀히 말해 이는 mod_perl의 버그라 할 수 있다.

$ $HOME/perl/bin/perl ./Makefile.PL MP_AP_PREFIX=$HOME/apache2

혹 mod_perl 설치에 관한 문서를 보다 보면 ‘MP_INST_APACHE2=1‘이 있는 경우가 있다. 이는 mod_perl 1.0과 mod_perl 2.0을 동시에 사용할 때 필요한 것이다. 그러나 지금처럼 mod_perl 2.0 만을 사용할 때에도 문제는 없다. 허나, Mason과 같은 mod_perl 핸들러에게는 치명적이다. 왜냐하면, 펄의 모듈 탐색 경로(@INC)를 벗어난 곳에 mod_perl 2.0의 이것 저것들(?)이 설치되어 Mason은 mod_perl 2.0의 이것 저것들을 찾지 못하는 상황이 발생하기 때문이다. mod_perl 자체는 문제가 없지만 그 위에 올라가는 넘(?)에게는 문제가 될 수 있다. 언제나 그렇듯이 방법이 있긴 하지만... 너절하다!

MP_APXS 옵션으로 아파치에 있는 apxs의 위치를 정확히 지정해야 한다. apxs는 아파치가 컴파일 될 때의 상황을 모두 기억하고 있기 때문에 아파치에 mod_perl.so과 같은 동적 모듈을 추가할 때 매우 유용하다. 모듈 작성자는 apxs로부터 아파치의 컴파일 옵션과 경로에 대한 정보를 가져오면 골치 아픈 문제를 쉽게 풀 수 있다. 만약 아파치를 여러 디렉토리에 나누어 설치했다면... apxs가 *거의 필수적*이다!

 


mod_perl 작동 확인

아파치가 설치된 디렉토리로 이동한 후 mod_perl.so가 제 위치에 있는지 확인한다. 그리고 아파치의 httpd.conf 파일에 다음의 두 줄을 추가한다.

$ cd

$ cd apache2

$ ls ./modules

httpd.exp mod_perl.so

$ vi ./conf/httpd.conf

...

...

# Example:

# LoadModule foo_module modules/mod_foo.so
LoadModule perl_module modules/mod_perl.so      << 추가

PerlModule Apache2 << 추가

...

...

$

이제 승부수를 던질 때이다. 잠시 숨을 고르고 어깨도 한 번 쫘악~ 펴주고... 차나 커피를 한 잔 준비한다.

가차없이 다음을 실행하라!

$ ./bin/apachectl start

$ ./bin/apachectl stop

$ cat ./logs/error_log

다음 메시지가 보이는가? 반드시 보여야 한다!

[Fri Nov 19 01:08:00 2004] [notice] Apache/2.0.52 (Unix) mod_perl/1.99_17 Perl/v5.8.5 configured -- resuming normal operations [Fri Nov 19 01:08:05 2004] [notice] caught SIGTERM, shutting down

 


레지스트리 스크립트

mod_perl의 문서(http://perl.apache.org/docs/2.0/user/intro/start_fast.html)에는 레지스트리 스크립트와 핸들러 모듈이 소개되고 있다. 과연 이것들이 뭘까?

레지스트리 스크립트는 기존의 펄 CGI를 mod_perl로 포팅한 것이다. 다음은 간단한 CGI인데 이것은 mod_perl 환경에서도 실행될 수 있다.

#!/usr/bin/perl

print "Content-type: text/plainnn";

print "mod_perl 2.0 rocks!n";

CGI는 웹 서버와 별도의 프로세스로 실행되며 요구가 있을 때마다 매번 처음부터 작업을 시작한다. 펄마니아(http://www.perlmania.or.kr) 같은 사이트에서는 문제가 되지 않지만, 고성능을 요하는 사이트에서는 CGI가 커다란 짐이 될 수 있다. mod_perl은 웹 서버의 프로세스에서 실행되고 캐시를 지원하므로 이러한 기술적인 문제들을 해결하였다. 이에, mod_perl 사이트에서는 기존에 펄로 작성된 CGI를 mod_perl로 포팅할 수 있도록 가이드(http://perl.apache.org/docs/1.0/guide/porting.html)를 제공하고 있다.

mod_perl의 Apache::Registry 모듈이 기존 펄 CGI를 실행하도록 한다. 짐작에, ‘레지스트리 스크립트’라 함은 이 모듈의 관리하에 실행되기 때문에 붙은 이름인 듯 싶다.

 


핸들러 모듈

아파치에는 막강한 모듈이 많다. 모듈 작성은 C 언어로 해야 하며 아울러 아파치의 내부에 대해 많은 지식과 경험을 필요로 한다. 시간과 노력이 필요한 만큼 묵직한 모듈이 나올 수는 있지만 조그만 모듈을 만들 때는 비효율적이라 볼 수 있다.

C 언어 만큼은 아니지만, mod_perl은 아파치 모듈을 펄로 작성할 수 있는 환경을 제공한다. mod_perl 환경하에서 펄로 작성한 아파치 모듈을 ‘핸들러 모듈’이라고 한다. 다음은 간단한 예이다.

#file:MyApache/Rocks.pm

#----------------------

package MyApache::Rocks;



use strict;

use warnings;



use Apache::RequestRec ();

use Apache::RequestIO ();



use Apache::Const -compile => qw(OK);



sub handler {

my $r = shift;



$r->content_type('text/plain');

print "mod_perl 2.0 rocks!n";



return Apache::OK;

}

1;

 


mod_perl 설정

설정은 크게 설치시에 주는 설치 설정과 운영상에 주는 httpd.conf 설정으로 나눌 수 있다.

 

설치 설정

 

동적 또는 정적 mod_perl

아파치에는 크게 정적(static) 모듈과 동적(dynamic) 모듈이 있다. 정적 모듈은 아파치 컴파일시 함께 컴파일되어 아파치 코어(httpd)에 위치하게 되고 동적 모듈은 모듈 디렉토리에(주로 modules/ 디렉토리) DSO 형식으로 위치한다.

mod_perl은 아파치의 모듈이기에 정적 또는 동적 어느 쪽으로도 설치가 가능하다.

동적 설치:

$ perl Makefile.PL MP_APXS=/path/to/apxs

정적 설치:

...

...
  •  
  • MP_INST_APACHE2 :
  •  
  • MP_USE_DSO :
  •  
  • MP_USE_STATIC :

 

httpd.conf 설정

다음은 설치가 끝난 후 httpd.conf에 아파치 지시자 형태로 추가하는 설정이다.

  •  
  • PerlModule :
  •  
  • PerlRequire :
  •  
  • PerlAddVar :
  •  
  • ... ...
  •  
  • ... ...

 


CGI, mod_perl 버전

 


아파치 핸들러, mod_perl 버전

 


mod_perl 내부

 


글쓴이

이채광(Chaegwang Lee) - vet045@yahoo.co.kr

 


참고 자료

mod_perl 사이트( http://perl.apache.org/ )

 


COPYRIGHT

Copyright 2005, Chaegwang Lee. All right reserved.

This is a PMDocs of Perlmania. You may copy or redistribute it under the same terms as Perl itself.

* 본 문서는 이채광님의 동의하에 등록된 글입니다.

[아파치 문서 기고 안내]

작성하신 문서를 지금 아파치 사용자 커뮤니티와 공유해 주십시오. 공유하시는 글들은 여러분들의 이름으로 이곳에 등록되어 많은 분들이 도움을 받을 수 있습니다. 또한 계획중이신 글이 있으신가요? 계획중이신 글을 저희에게 알려주시거나 또는 공동작업할 수 있도록 도움을 드리도록 하겠습니다.

혹시 글이 내용이 작거나 부족하다고 생각하시나요? 정보는 공유할 수록 그 의미가 커집니다. 부족한 부분은 저희 아파치 커뮤니티 사용자들분과 채워가실 수 있습니다.

여러분들의 참여를 기다리겠습니다. 문서 기고 및 문의 사항은 submit (at) apache-kr.org 으로 해주세요. 추후 온라인에서 직접 문서를 등록하실 수 있도록 작업할 예정입니다.

 


2013년05월26일
즐겨찾기추가
icon

Apache Version ?

Lastest Version : 2.0.61, 2.2.6
[2.0.X Version] Unix / Win32
[2.2.X Version] Unix / Win32
New documents
  1. Apache-1.3.37 Module 설정 문서 - PDF Version
  2. mod_perl 2 시작하기
  3. 서비스 제한측면의 아파치 활용 예제
  4. 아파치 로그 설정 (rotatelogs 사용, image와 warm 로그는 별도 파일로)
  5. Apache에서 이미지 캐싱 처리(mod_expires)
  6. Apache2.0.XX + Tomcat4.1.XX 연동을 위한 설정
TechTalk 묻고/답하기
  1. 성인 화상채팅◈ http://5353.oa.to ━◈무료 화상채팅 ◈♨◈━━━━━◈→ http://5353.oa.to ←◈━━━━━◈♨◈ 휴대폰 인증no[노] 스피드헌팅.즉석
  2. 성인 화상채팅◈ http://5353.oa.to ━◈무료 화상채팅 ◈♨◈━━━━━◈→ http://5353.oa.to ←◈━━━━━◈♨◈ 휴대폰 인증no[노] 스피드헌팅.즉석
  3. 성인 화상채팅◈ http://5353.oa.to ━◈무료 화상채팅 ◈♨◈━━━━━◈→ http://5353.oa.to ←◈━━━━━◈♨◈ 휴대폰 인증no[노] 스피드헌팅.즉석
  4. 성인 화상채팅◈ http://5353.oa.to ━◈무료 화상채팅 ◈♨◈━━━━━◈→ http://5353.oa.to ←◈━━━━━◈♨◈ 휴대폰 인증no[노] 스피드헌팅.즉석
  5. 성인 화상채팅◈ http://5353.oa.to ━◈무료 화상채팅 ◈♨◈━━━━━◈→ http://5353.oa.to ←◈━━━━━◈♨◈ 휴대폰 인증no[노] 스피드헌팅.즉석

더 많은 내용보기 >>

Apache Module
  • 모듈 mod_gzip 의 활용
  • 모듈 mod_vhost_alias : 다이나믹 가상 호스트 지원
  • 모듈 negotiation(mod_negotiation) : Content negotiation
  • 모듈 asis(mod_asis) : The .asis file handler
  • 모듈 mime(mod_mime) : 파일 확장자를 이용해 문서의 타입 결정
  • 모듈 info(mod_info) : 서버 설정 정보
  • More Modules >>

    Apache-KR Community

    아파치 사용자 그룹 소개  |  스폰서안내  | 링크달기이메일주소무단수집거부 | We are a member of the SCA(Software Community Alliance)

    Copyright(c) 1997-2007 by Apache User Group,. All Rights Reserved.