윈디하나의 솔라나라: TOMCAT
목차
개요
- 아파치 톰캣(Apache Tomcat)은 자바 서블릿과 자바 서버 페이지(JSP)를 구현한 자바 서블릿 컨테이너다.
- 처음에는 아파치 소프트웨어 재단에서 만든 자카르타 프로젝트에 속해 있었지만, 현재는 톱 레벨 프로젝트로 승격되었다. (자카르타 프로젝트는 아파치 소프트웨어 재단에서 지원하는 오픈 소스 자바 솔루션 프로젝트의 이름이다)
- 현재 톰캣은 자바 서블릿(Servlet) 2.5 와 자바 서비스 페이지(JSP) 2.1 스펙을 준수한다.
- 본 문서에서는 아파치 톰캣을 설치하고, 아파치 웹 서버와 연동시키며, 톰캣 네이티브 라이브러리까지 설치하는 것을 다룬다.
- Apache Tomcat
설치
-
Java JDK
톰캣은 자바로 만들어져 있기 때문에 자바를 설치해야 한다. Java SE Downloads에서 [JDK 6 Update 19]를 받는다. (물론 솔라리스10의 /usr/java 디렉토리에 있는 자바를 사용해도 된다) JDK를 사용했지만 톰캣에 디버깅 할 것이 아니라면 런타임만 있어도 된다. root@wl ~ # cd /usr/local
root@wl /usr/local # ~/jdk-6u19-solaris-i586.sh
root@wl /usr/local # ln -s jdk1.6.0_19 java
root@wl /usr/local # vi /etc/profile
# for Tomcat
if [ -d /usr/local/tomcat ]
then
PATH=$PATH:/usr/local/tomcat/bin; export PATH;
fi
# for JAVA
if [ -d /usr/local/java ]
then
PATH=/usr/local/java/bin:$PATH; export PATH;
JAVA_HOME=/usr/local/java; export JAVA_HOME;
fi
root@wl /usr/local # . /etc/profile
-
Tomcat
톰캣의 설치는 매우 간단하다. 파일을 받아 적당한 디렉토리에 풀어주면 된다. root@wl ~ # wget http://apache.mirror.cdnetworks.com/tomcat/tomcat-6/v6.0.26/bin/apache-tomcat-6.0.26.tar.gz
root@wl ~ # cd /usr/local
root@wl /usr/local # tar xvfz ~/apache-tomcat-6.0.26.tar.gz
root@wl /usr/local # ln -s apache-tomcat-6.0.26 tomcat
root@wl /usr/local # /usr/local/tomcat/bin/startup.sh 1)
Using CATALINA_BASE: /usr/local/apache-tomcat-6.0.26
Using CATALINA_HOME: /usr/local/apache-tomcat-6.0.26
Using CATALINA_TMPDIR: /usr/local/apache-tomcat-6.0.26/temp
Using JRE_HOME: /usr/local/java
Using CLASSPATH: /usr/local/apache-tomcat-6.0.26/bin/bootstrap.jar
root@wl /usr/local #
1) 톰캣을 시작한다.
※ 톰캣을 시작한 후 브라우저를 통해 접속하면 아래와 비슷한 화면이 나온다. 8080 포트가 아닌 80 포트로 톰캣을 실행시키려면 /usr/local/tomcat/conf/server.xml 에 8080으로 된 문자를 전부 80으로 바꾸면 되며, 이미지 파일과 JSP파일은 /usr/local/tomcat/webapps/ROOT 아래에 넣으면 된다.
-
Tomcat - Connectors
- 톰캣만으로도 웹 서비스를 하는데에는 지장 없지만, 정적 컨텐츠(예를 들어 이미지들)의 효율적인 전송이나 rewrite와 같은 기능이 필요하거나, php와의 연동을 위해 아파치 웹 서버가 필요할 경우가 있다. (아니 대부분의 경우 필요할 것이다) 웹서비스시, 톰캣은 JSP와 서블릿을 실행하기 위한 용도로만 사용하고, 나머지(이미지 전송, PHP/CGI실행 등등)는 아파치 웹 서버에 맡기는 방법이다. 여기서는 아파치 웹 서버가 /usr/local/apache2 에 설치되었다고 가정한다. 아파치 웹 서버의 설치방법은 윈디하나의 솔라나라: SAMP를 참고한다.
- 톰캣과 아파치의 연동은, 80 포트로 오는 요청은 아파치 웹서버가 받아 처리하는데, JSP/서블릿에 대한 요청은 다시 톰캣에게 주어 톰캣이 처리한 결과를 받아 아파치 웹 서버가 클라이언트에 전송하는 방법을 사용한다. 여기서 톰캣과 아파치 웹 서버를 연결해주는 프로토콜은 현재 AJP v1.3이 많이 사용되고 있으며 이를 구현한 것이, mod_jk 이라는 모듈이다.
- Apache Tomcat - Tomcat Connectors (mod_jk) Downloads
root@wl ~ # wget http://apache.mirror.cdnetworks.com/tomcat/tomcat-connectors/jk/source/jk-1.2.30/tomcat-connectors-1.2.30-src.tar.gz
root@wl ~ # tar xvfz tomcat-connectors-1.2.30-src.tar.gz
root@wl ~ # cd tomcat-connectors-1.2.30-src/native
root@wl ~/tomcat-connectors-1.2.30-src/native # ./configure --with-apxs=/usr/local/apache2/bin/apxs
root@wl ~/tomcat-connectors-1.2.30-src/native # make
root@wl ~/tomcat-connectors-1.2.30-src/native # make install
root@wl ~/tomcat-connectors-1.2.30-src/native # cd ../conf
root@wl ~/tomcat-connectors-1.2.30-src/conf # cp httpd-jk.conf /usr/local/apache2/conf/extra/
root@wl ~/tomcat-connectors-1.2.30-src/conf # cp uriworkermap.properties /usr/local/apache2/conf/extra/
root@wl ~/tomcat-connectors-1.2.30-src/conf # cp workers.properties.minimal /usr/local/apache2/conf/workers.properties
-
Tomcat - Native library
톰캣을 실행시킨후 $CATALINA_HOME/logs/catalina.out 을 살펴보면 톰캣을 시작할 때 아래와 같은 메시지가 나오는 것을 확인할 수 있다.
정보: The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: ...
이 메시지는 톰캣 네이티브 라이브러리를 사용하지 않았을 때 나오는 안내문구다. 성능을 위해서는 네이티브 라이브러리를 사용하라는 것이다. 이는 http://tomcat.apache.org/tomcat-6.0-doc/apr.html 의 문서를 보면 더 많은 정보를 얻을 수 있다. 이 네이티브 라이브러리를 컴파일해 설치하기 위해서는 APR 1.2+(아파치2를 설치할때 같이 설치된다), OpenSSL 0.9.7+, JDK 1.4+ 가 필요하다. 단순히 아래와 같이 설치해주면 된다.
root@wl ~ # cd /usr/local/tomcat/bin
root@wl /usr/local/tomcat/bin # tar xvfz tomcat-native.tar.gz
root@wl /usr/local/tomcat/bin # cd tomcat-native-1.1.20-src/jni/native
root@wl /usr/local/tomcat/bin/tomcat-native-1.1.20-src/jni/native # ./configure --prefix=/usr/local --with-apr=/usr/local/apache2 1)
root@wl /usr/local/tomcat/bin/tomcat-native-1.1.20-src/jni/native # make
root@wl /usr/local/tomcat/bin/tomcat-native-1.1.20-src/jni/native # make install 2)
1) 아파치2의 APR 라이브러리를 사용하고, /usr/local에 설치한다.
2) 설치한 후, 톰캣을 시작하면 자동으로 네이티브 라이브러리를 로드한다. 라이브러리를 로드하지 못하면 LD_LIBRARY_PATH에 있는 라이브러리 경로에 /usr/local/lib 이 추가되어있는지 확인해본다.
설정
-
아파치 웹 서버 설정
Tomcat - Connectors 를 설치했다면 아래와 같은 작업이 필요하다. root@wl ~ # vi /usr/local/apache2/conf/httpd.conf 1)
...
# mod_jk
Include conf/extra/httpd-jk.conf
root@wl ~ # vi /usr/local/apache2/conf/extra/httpd-jk.conf
...
JkWorkersFile conf/workers.properties 1)
...
JkMountFile conf/extra/uriworkermap.properties 1)
...
# JkMount /*.jsp ajp13
root@wl ~ # vi /usr/local/apache2/conf/workers.properties
worker.list=wlb,jkstatus,jk-status,jk-manager 2)
...
worker.jk-status.type=status 3)
worker.jk-status.read_only=true 3)
worker.jk-manager.type=status 3)
root@wl ~ # vi /usr/local/apache2/conf/extra/uriworkermap.properties
...
/*.jsp=wlb 3)
1) 보기와 같이 주석 표시(#)를 지운다.
2) 보기와 같이 수정한다.
3) 보기와 같이 추가한다.
JK Status Manager는 http://localhost/jkmanager에서 아래와 비슷한 화면을 볼 수 있다.
-
톰캣 설정
root@wl ~ # vi /usr/local/tomcat/conf/tomcat-users.xml
<?xml version='1.0' encoding='utf-8'?>
<tomcat-users>
<role rolename="standard" />
<role rolename="manager"/>
<user username="tomcat" password="s3cret" roles="standard,manager"/>
</tomcat-users>
root@wl ~ # vi /usr/local/tomcat/conf/server.xml 1)
<!-- Connector 태그에 useBodyEncodingForURI="true" 또는 URIEncoding="UTF-8" 속성을 추가한다. -->
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" useBodyEncodingForURI="true"/>
-
주의 사항
- Context를 정해주지 않으면 400: No Host matches server name xxxx 를 보게 될 것이다. 톰캣 5.5부터 context는 WEB-INF에서 설정할 수 있다.
- http://APACHE_SERVER_NAME/manager/html/ 으로 접속후 tomcat / s3cret (tomcat-users.xml에 설정되어있다) 를 사용해 접속하면 톰캣 관리자 페이지가 나온다. 자세한 사항은 Apache Tomcat 6.0 - Manager App HOW-TO를 참조한다.
테스트
root@wl ~ # vi $APACHE_DOCUMENT_HOME/ROOT/test.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<html>
<head><title>JSP TEST</title></head>
<body><pre>
클래스경로: <%=System.getProperty("java.class.path",".")%>
라이브러리경로: <%=System.getProperty("java.library.path", ".")%>
파라메터: <%=request.getParameter("param")%> (일치해야함)
파일인코딩: <%=System.getProperty("file.encoding")%>
시스템캐릭터셋: <%=java.nio.charset.Charset.defaultCharset().name()%>
페이지캐릭터셋: <%=response.getCharacterEncoding()%>
서블릿 경로: <%=application.getRealPath("")%>
</pre></body>
</html>
root@wl ~ # http://localhost/test.jsp?param=%ED%95%9C%EA%B8%80 를 확인해보면 된다
Ψproβe
- 톰캣 5.5까지만 해도 Tomcat Admin 이라 하여 JNDI나 Deploy를 쉽게 설정할 수 있도록 만든 툴이 있었는데, 현재는 없다. 톰캣 6에서는 개발이 중단되었다. (개발 계획도 없다) 톰캣 어드민으로 쓸만한 프로그램인 Psi-Probe를 소개한다.
- 작년까지만 해도 Lambda Probe라는 툴이 많이 쓰였는데 개발이 중단되었다. Psi Probe는 람다 프로브를 이어 받은 프로그램이다.
-
설치방법
- psi-probe에 가서 probe-2.0.1.war를 다운로드 받는다.
- Tomcat Manager에 접속(http://localhost:8080/manager/html, 암호는 tomcat-users.xml 에서 설정해준 암호를 넣으면 된다. 솔라나라에서는 tomcat / s3cret 를 사용한다)해서 화면 하단의 [WAR file to deploy]에서 파일을 선택하고 Deploy를 클릭한다.
- 상단의 [Applications]에 [/probe-2.0.1] 이 추가될 것이다. http://localhost:8080/probe-2.0.1/ 에 접속한다. 암호는 Tomcat Manager 암호와 같다.
- 아래와 같은 화면을 볼 수 있을 것이다.