저자: 한빛리포터 정원희(유엔젤㈜ 무선인터넷 서비스사업팀/freesoft at nownuri.net)
본 기사는 javaservice.net에서 구했던 연동문서를 약간 편집하고 새로운 부분을 추가해 넣은 일종의 보정판입니다.
왜 JK2로 연동하는가?
아파치와 톰캣을 연동하기 위해 사용되었던 mod_jserv는 Apache/Jserv에서 포팅되기 때문에 너무 복잡하며, 아파치에 필요 없는 부분들도 많았다. Mod_serv가 유닉스 OS 상의 아파치만 지원했던 반면 JK는 보다 많은 웹서버와 OS상에서 사용할 수 있다. JK 는 보다 나은 SSL을 지원하며 톰캣 3.2.x, 3.3.x, 4.0.x, 4.1.x, 5.x를 지원한다. JK2는 JK의 리팩토링 버전이며 Apache 2를 고려해 두고 만들어졌지만 기존의 Apache 1.3 버전과도 호환된다. 또한 IIS나 NES/iPlanet같은 멀티쓰레드로 동작하는 웹서버들에서 보다 잘 작동하도록 디자인되었으며 JNI 모드를 지원하므로 서버내에서 네이티브 기능들을 불러 쓸 수도 있다. 따라서 성능과 호환성 두 가지 모두를 고려할 경우, 이제는 JK2를 이용해서 톰캣과 아파치를 (혹은 기타 다른 웹서버들을) 연동시키는 것이 바람직하다고 할 것이다.
자세한 내용은
아파치 자카르타 프로젝트 문서를 참고하기 바란다.
다른 방법은 없나?
Apache 2를 사용한다면 mod_webapp를 이용하는 또 다른 방법이 있다. WARP 프로토콜을 구현한 mod_webapp는 사용하기 편리하지만 아파치 2.0에서만 사용할 수 있는 APR(Apache Portable Runtime)을 필요로 한다. 또한 mod_webapp는 IIS나 NES/iPlanet, Domino와 같은 웹서버들을 지원하지 않는다. (
http://jakarta.apache.org/tomcat/tomcat-4.1-doc/jk2/index.html)
우선 다음과 같은 S/W가 필요하다.
필요한 소프트웨어를 모두 구했으면 각각을 설치한다. 가급적이면 설치는 J2SDK부터 설치하는 것이 좋다. 그 다음 아파치나 톰켓을 차례대로 설치하면 된다. JK2는 아파치 설치 후, modules 디렉토리에 mod_jk2-2.0.43. dll 파일을 복사하면 된다.
환경 설정
1) JAVA_HOME
JDK가 설치된 디렉토리를 JAVA_HOME 이라는 변수이름으로 환경변수에 추가한다. 바탕화면의 "내 컴퓨터"를 선택하고 팝업메뉴를 띄워 등록정보에 들어간 다음 ‘고급→환경변수’를 선택하면 된다. 모든 사용자에 관계없이 JAVA_HOME이 유효하게 하려면 시스템 변수에, 자신의 계정에만 유효하게 하려면 사용자 변수쪽에 추가하면 된다. 변수명은 JAVA_HOME으로 하고 변수값은 JDK를 설치한 디렉토리를 지정해주면 된다(예. C:\J2SDK_1.4.1_01). BIN 디렉토리까지 설정해주는 것이 아님을 기억하자.
JAVA_HOME 변수의 경우는 TOMCAT에서 JSP 컴파일 등을 할 때 사용할 뿐만 아니라 다른 자바관련 툴들(ANT같은)에서도 이 변수를 사용하므로 어떻든 간에 한번은 지정하는 것이 작업에 도움이 될 것이다.
2) CLASSPATH
TOMCAT에서는 JSP를 컴파일 할 필요가 있을 때 JAVA_HOME에서 설정된 패스를 기준으로 lib 디렉토리를 뒤지거나 CLASSPATH 환경변수 설정을 참고해서 컴파일에 사용할 패키지인 servlet.jar를 찾는다. 따라서 servlet.jar를 $JAVA_HOME/jre/lib/ext 같은 곳에 넣어주거나 servlet.jar가 포함되어 있는 TOMCAT의 $TOMCAT_HOME/lib 디렉토리에 CLASSPATH 설정을 해주면 된다. 환경변수 설정하는 요령은 앞의 JAVA_HOME의 그것과 동일하다.
3) PATH
자바소스 컴파일에는 javac.exe가 사용되기 때문에, 이를 시스템 어디에서나 사용할 수 있도록 환경변수의 PATH에다가 $JAVA_HOME/bin 디렉토리를 추가해주면 된다. 자바프로그래머라면 대부분 이미 추가해 놓았으리라 생각한다.
4) 아파치 환경설정 - httpd.conf 와 workers2.properties
$APACHE/conf 디렉토리에 있는 httpd.conf 파일을 열고, LoadModule 이라고 되어있는 부분들을 찾아서 적당한 줄에다가 다음과 같이 입력한다.
LoadModule jk2_module modules/mod_jk2-2.0.43.dll
그 후에 DocumentRoot 항목을 찾아서 $TOMCAT_HOME/webapps과 같은식으로 지정해준다.
예) DocumentRoot "c:\Program Files\Apache Group\Tomcat 4.1\webapps"
그리고 아래쪽에 있는 Directory 항목 역시 동일하게 수정해준다.
예)
다 끝냈으면 이번에는 workers2.properties를 편집한다. 이 파일은 기본적으로 아파치에 포함되지 않으므로 conf 폴더 내에서 찾을 수가 없다. 따라서 직접 만들어줘야 하는데 $APACHE_HOME/conf에다가 workers.properties 파일을 만들고 다음의 내용을 복사해넣고 저장하면 된다.
# Define the communication channel
[status:]
[uri:/jkstatus/*]
group=status:
[shm:]disabled=1
[channel.socket:localhost:8009]
info=Ajp13 forwarding over socket
tomcatId=localhost:8009
# Web Applicaton을 설정
[uri:/examples/*]
info=Map the whole webapp
위에서 언급한 바와 같이 workers2.properties 파일은 $APACHE/conf에 있어야만 아파치가 읽어들일 수 있기 때문에 특히 파일의 경로에 주의해야 한다. ($TOMCAT_HOME/conf 가 아님)
5) 톰캣 환경설정 - jk2.properties 과 server.xml
$TOMCAT_HOME/conf/jk2.properties 파일을 열고 편집하면 되는데 내용을 잘 모른다면 다음의 셋팅예제를 그대로 복사해 써도 무방하다.
## THIS FILE MAY BE OVERRIDEN AT RUNTIME. MAKE SURE TOMCAT IS STOPED
## WHEN YOU EDIT THE FILE.
## COMMENTS WILL BE _LOST_
## DOCUMENTATION OF THE FORMAT IN JkMain javadoc.
# Set the desired handler list
handler.list=apr,channelSocket,request,shm
# Override the default port for the socketChannel
# Set the default port for the channelSocket
channelSocket.port=8009
# Default:
# channelUnix.file=${jkHome}/work/jk2.socket
# Just to check if the the config is working
# shm.file=${jkHome}/work/jk2.shm
# In order to enable jni use any channelJni directive
# channelJni.disabled = 0
# And one of the following directives:
# apr.jniModeSo=/opt/apache2/modules/mod_jk2.so
# If set to inprocess the mod_jk2 will Register natives itself
# This will enable the starting of the Tomcat from mod_jk2
# apr.jniModeSo=inprocess
# Dynamic library
serverRoot= "C:/Program Files/Apache Group/Tomcat/webapps "
완료했으면 이번에는 server.xml을 편집한다. $TOMCAT_HOME/conf/server.xml 파일을 열고 아래의 부분을 찾아 주석처리 하거나 삭제한다. 주석처리는 ‘’로 끝내면 된다. 아래부분은 TOMCAT에 포함되어 있는 Coyote 웹서버에 연결하는 커넥터인데, 여기서는 웹서버로 아파치를 사용할 것이므로 필요없다.
위의 내용이 있는 곳에서 조금 아래쪽을 보면 다음과 같은 부분이 있다. org.apache.coyote.tomcat4.CoyoteConnector라는 이름의 Connector가 mod_jk2로 연결할 때 사용하는 부분으로, 아래쪽의 org.apache.ajp.tomcat4.Ajp13Connector가 mod_jk를 사용할 때 쓰는 부분이므로 mod_jk 부분(아래쪽)을 주석 처리하도록 한다.
150
"
enableLookups="true" redirectPort="8443"
acceptCount="10" debug="0" connectionTimeout="20000"
useURIValidationHack="false"
protocolHandlerClassName="org.apache.jk.server.JkCoyoteHandler"/>
서버 구동 확인
톰캣과 아파치를 실행시킨 후 다음의 주소를 입력해 본다.
제대로 servlet 또는 jsp의 예제 페이지가 나타나고 각 예제들이 올바로 실행된다면 설치가 올바로 이루어진 것이다. 만약 jsp 나 서블릿 파일이 다운로드 된다거나 소스코드가 보인다거나 404 에러 등이 발견되면 어디에선가 셋팅이 잘못된 것이다. 클래스패스의 문제, servlet.jar 패키지의 부재, 잘못된 JDK컴파일러 설치, 설정파일 편집 오류 등 다양한 문제가 있을 수 있다. 아파치의 톰캣의 로그파일과 설치메뉴얼을 보면서 약간의 노력을 더 기울인다면 무난하게 해결 할 수 있을 것이다.
문서의 잘못된 점은 freesoft@nownuri.net 으로 연락주시면 수정하도록 하겠습니다.