60.Unix2008. 12. 17. 12:18
반응형

페이지 수정중입니다.

윈디하나의 솔라나라: TOMCAT

최종 갱신일: 2008-11-12, 이 문서는 윈디하나의 솔라나라, http://www.solanara.net/에서 최근에 갱신된 문서를 찾을 수 있다.

아파치 톰캣(Apache Tomcat)

※ 아파치 톰캣은 아파치 소프트웨어 재단에서 만든 자카르타 프로젝트에 속해 있던 소프트웨어로, 현재는 톱레벨프로젝트로 승격되었다. 톰캣을 한마디로 정의하자면 자바 서블릿과 자바서버페이지(JSP)를 구현한 자바 서블릿 컨테이너다. 자카르타 프로젝트는 아파치 소프트웨어 재단에서 지원하는 오픈 소스 자바 솔루션 프로젝트의 이름이다. 톰캣은 자바 서블릿(Servlet)과 자바 서비스 페이지(JSP)를 지원하며 표준 스펙을 만족하고 있다. 자세한 사항은 Apache - Tomcat 홈페이지를 참고하기 바란다.

※ 본 문서에서는 아파치 톰캣을 설치하고, 아파치 웹 서버와 연동시키며, 톰캣 네이티브 라이브러리까지 설치하는 것을 다룬다.

톰캣 설치

  1. Java SE Downloads: 톰캣은 자바로 만들어져 있기 때문에 자바를 설치해야 한다. (솔라리스10의 /usr/java 디렉토리에 있는 자바를 사용해도 된다)
    root@wl ~ # cd /usr/local
    root@wl /usr/local # ~/jdk-6u10-solaris-i586.sh
    root@wl /usr/local # ln -s jdk1.6.0_10/ 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
    
  2. Apache - Tomcat
    root@wl ~ # wget http://apache.mirror.cdnetworks.com/tomcat/tomcat-6/v6.0.18/bin/apache-tomcat-6.0.18.tar.gz
    root@wl ~ # cd /usr/local
    root@wl /usr/local # tar xvfz ~/apache-tomcat-6.0.18.tar.gz
    root@wl /usr/local # ln -s apache-tomcat-6.0.18 tomcat
    root@wl /usr/local # /usr/local/tomcat/bin/startup.sh
    
    ※ 톰캣의 압축을 풀기만 하면 톰캣의 설치는 끝난다. http://localhost:8080 에서 톰캣이 실행된 것을 확인할 수 있다. 8080 포트가 아닌 80 포트로 톰캣을 실행시키려면 /usr/local/tomcat/conf/server.xml 에 8080으로 된 문자를 전부 80으로 바꾸면 되며, 파일 이미지와 JSP파일은 /usr/local/tomcat/webapps/ROOT 에 넣으면 된다.

톰캣 - 아파치 웹 서버 연동

※ 톰캣만으로도 웹 서비스를 하는데에는 지장 없지만, 정적 컨텐츠(예를 들어 이미지들)의 효율적인 전송이나 rewrite와 같은 기능, php의 연동을 위해 아파치 웹 서버가 필요할 때가 있다. 웹서비스시, 톰캣은 JSP와 서블릿을 실행하기 위한 용도로만 사용하고, 나머지(이미지 전송, PHP/CGI실행 등등)는 아파치 웹 서버에 맡기는 방법이다. 여기서는 아파치 웹 서버가 /usr/local/apache2 에 설치되었다고 가정한다. 아파치 웹 서버의 설치방법은 윈디하나의 솔라나라: AMP를 참고한다.

※ 80 포트로 오는 요청은 아파치 웹서버가 담당한다. 이 요청중 JSP/서블릿요청은 톰캣에게 주어 톰캣이 처리하도록 해야 한다. 톰캣과 아파치 웹 서버를 연결해주는 프로토콜은 현재 AJP v1.3이 많이 사용되고 있으며 이를 구현한게 mod_jk 이라는 모듈이다.
  1. Apache Tomcat - Tomcat Connectors (mod_jk) Downloads
    root@wl ~ # wget http://apache.tt.co.kr/tomcat/tomcat-connectors/jk/source/jk-1.2.27/tomcat-connectors-1.2.27-src.tar.gz
    root@wl ~ # tar xvfz tomcat-connectors-1.2.27-src.tar.gz
    root@wl ~ # cd tomcat-connectors-1.2.27-src/native
    root@wl ~/tomcat-connectors-1.2.27-src/native # ./configure --with-apxs=/usr/local/apache2/bin/apxs -enable-jni --with-java-platform=2
    root@wl ~/tomcat-connectors-1.2.27-src/native # /usr/sfw/bin/gmake
    root@wl ~/tomcat-connectors-1.2.27-src/native # /usr/sfw/bin/gmake install
    root@wl ~/tomcat-connectors-1.2.27-src/native # cd ../conf
    root@wl ~/tomcat-connectors-1.2.27-src/conf # cp workers.properties /usr/local/tomcat/conf/workers.properties
    
  2. 아파치 웹 서버, 톰캣 설정
    root@wl ~ # vi /usr/local/apache2/conf/httpd.conf 1)
    LoadModule jk_module modules/mod_jk.so
    JkWorkersFile "/usr/local/tomcat/conf/workers.properties"
    JkLogFile "logs/mod_jk.log"
    JkLogLevel warn
    JkMount /*.jsp ajp13
    root@wl ~ # vi /usr/local/tomcat/conf/workers.properties 2)
    workers.tomcat_home=/usr/local/tomcat
    workers.java_home=/usr/local/jdk
    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
    <!-- Connector 태그에 URIEncoding="UTF-8" 속성을 추가한다.  -->
    <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" URIEncoding="UTF-8"/>
    <!-- 아래의 내용을 <Engine>과 </Engine>사이에 넣어야 한다. -->
    <Host name="APACHE_SERVER_NAME" appBase="APACHE_DOCUMENT_HOME"
       unpackWARs="true" autoDeploy="true"
       xmlValidation="false" xmlNamespaceAware="false">
    </Host>
    root@wl ~ # mkdir -p APACHE_DOCUMENT_HOME/ROOT/WEB-INF
    root@wl ~ # /usr/local/tomcat/bin/startup.sh
    root@wl ~ # /usr/local/apache2/bin/apachectl restart
    
    1) 아파치 웹 서버의 설정 파일을 변경한다. 만약 가상 호스트를 사용하고 있다면, [JkMount /*.jsp ajp13]부분은 각각의 가상호스트세팅(<VirtualHost> ~ </VirtualHost>)에 모두 넣어주어야 한다.
    2) JNI를 사용하기 위해서는 반드시 아래 두 태그를 설정해야 한다.
    3) server.xml을 아파치의 설정에 맞게 바꿔야 한다. APACHE_SERVER_NAME, APACHE_DOCUMENT_HOME은 아파치의 설정에 맞게바꿔야 한다. APACHE_SERVER_NAME은 httpd.conf의 ServerName과 동일하게 해야 하며, APACHE_DOCUMENT_HOME은 httpd.conf의 DocumentRoot와 동일하게 값을 넣어야 한다.

    ※ Context를 정해주지 않으면 400: No Host matches server name xxxx 를 보게 될 것이다. 톰캣 5.5부터 context는 WEB-INF에서 설정할 수 있다.
    ※ http://APACHE_SERVER_NAME/manager/html/ 으로 접속후 tomcat / s3cret 를 사용해 접속하면 톰캣 관리자 페이지가 나온다.

테스트

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>
ClassPath: <%=System.getProperty("java.class.path",".")%>
LibraryPath: <%=System.getProperty("java.library.path", ".")%>
Parameter: <%=request.getParameter("param")%> (must be correct)
</pre></body>
</html>
root@wl ~ # http://localhost/test.jsp?param=%ED%95%9C%EA%B8%80 를 확인해보면 된다

The Apache 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.14-src/jni/native
root@wl /usr/local/tomcat/bin/tomcat-native-1.1.14-src/jni/native # ./configure --prefix=/usr/local --with-apr=/usr/local/apache2 1)
root@wl /usr/local/tomcat/bin/tomcat-native-1.1.14-src/jni/native # make
root@wl /usr/local/tomcat/bin/tomcat-native-1.1.14-src/jni/native # make install 2)
1) 아파치2의 APR 라이브러리를 사용하고, /usr/local에 설치한다.
2) 설치한 후, 톰캣을 재시작하면 네이티브 라이브러리를 로드하면서 기동할 것이다.
Posted by 1010