2014. 4. 21. 10:49

Tomcat Server.xml 개념 정리.

Tomcat 의 Server.xml 의 정리입니다.


"Server"는 전체 JVM을 나타내는 싱글톤 요소이빈다. 이것은 하나 이상의 "Service"인스턴스를 갖고 있습니다. 서버는 지정된 포트를 통해 Shutdown 명령을 받습니다.


"Server"는 스스로가 "Container"가 아니기 때문에 "Valves" 또는 "Loggers" 같은 서브 컴포넌트를 "Server" 와 같은 레벨에서 정의하면 안됩니다.


<Server port="8005" shutdown="SHUTDOWN">


"Service"는 한개의 "Container"를 공유하는 하나 이상의 "Connectors" 의 집합체입니다.


  <Service name="Catalina">


"Connector"는 요청을 받아서, 응답이 반환되는 종점(endpoint) 를 나타냅니다. 각 커넥터는 처리를 담당하는 관련된 "Container"로 요청을 전달해줍니다.


기본값으로 , 8080 포트에 non-SSLHTTP/1.1 커넥터가 설정되어 있습니다. SSLHTTP/1.1 커넥터 사용하려면 아래에 있는 지시를 따라서 하고, 두번째 커넥터 엔트리의 주석표시를 지워주면 됩니다. SSL 지원은 다음 단계를 거쳐야 합니다. 

*JSSE 1.0.2 또는 이후 버전을 다운받아서 설치하고, JAR파일들을

     "$JAVA_HOME/jre/lib/ext" 디렉토리에 복사해 놓습니다.

*"$VAVA_HOME/jre/lib/security/java.security"를 편집하고 security.provider.2=com.sun.net.ssl.provider 를 추가 합니다.

* 실행 : keytool-genkey-alias tomcat-keyalg RSA 패스워드값"changeit"으로 실행합니다.


기본적으로, DNS lookups는 웹어플리케이션이 request.getRemoteHost()를 부를때 동적으로 하도록되어 있습니다. 이것은 성능에 영향을 줄수 있기 때문에 "enabellookups'속성을 "false" 바꾸어 주면 이 기능을 사용하지 않을수 있습니다. DNS lookups가 사용하지 않게 되면 request.getRemoteHost()는 remote client의 IP 주소의 String 버전을 반환할 것입니다.


Access log 는 가상 호스트에 접속하는 모든 요청을 처리합니다. 

        <Valve className="org.apache.catalina.valves.AccessLogValve" directory="H:\LOG_FILES\Tomcat"
               prefix="Story7.jp_access_log." suffix=".log"
               fileDateFormat="yyyy-MM-dd"
               pattern="%h %l %u %t &quot;%r&quot; %s %b %B" resolveHosts="false"/>


가상 디렉토리 사용시에 사용됩니다.

<Contenxt path


saveOnRestart : true 값일경우, Catalina 가 Shutdown 될때 모든 살아있는 세션들과 다른 세팅과는 상관없이, Store 에 저장될 것입니다. startup 할때  store 에 있는 모든 세션들은 자동으로 로드 됩니다. expiration 이 지난 세션들은 양쪽의 경우에 무시 됩니다.


maxActiveSessions : 0 이상의 값일 경우, 너무 많이 살아 있는 세션이 있다면 몆몆은 없어져버릴는 결과가 나타날수 있습니다.


minldleSwap : 세션은 적어도 이 기간동안 idle 상태이어야 합니다.


maxActiveSessions 이것은 사이트가 아주 활발할때 thrashing 를 피하게 합니다. -1 이나 0은 minmum 이 없다는 뜻입니다.

                              세션은 어느때라도 소멸될 수 있습니다.

maxidelSqap 세션은 이 기간동안 idle 상태면 소멸됩니다. minldleSqap 보다 높다면, 그것으로 바꿔 집니다.



* 추가 문건 확인.

■ server.xml에 의한 Tomcat의 기본 설정

 

$CATALINA_HOME/conf/server.xml은 Tomcat의 메인 설정 파일로 Tomcat 기동시에 참조 된다.

$CATALINA_HOME/conf/ 디렉토리에는 디폴트 server.xml 이외에 최소한의 설정만으로 구성된 server-minimal.xml이 준비되어 있다. 새로 서버를 설정하고자 할 경우에는 server-minimal,xml의 이름을 변경하여 사용하면 편리하다.

 

 

■ server.xml의 구조

 

Tomcat은 몇개의 구성요소로 이루어져 있으며, server.xml에서는 XML의 요소를 통해 구성요소를 정의하고 있다. server.xml의 요소는 다음과 같이 트리구조를 갖고 있다.

<Server>

      |    

      +---<Service>

                  |

                  +---<Connector>

                  |

                  +---<Engine>

                              |

                              +---<DefaultContext>

                              |

                              +---<Realm>

                              |

                              +---<Logger>

                              |

                              +---<Host>

                                          |

                                          +---<Context>

                                          |

                                          +---<Value>

                                          |

                                          +---<Realm>

                                          |

                                          +---<Logger>

 

상위의 속성은 자동적으로 하위의 요소에 계승된다. 예를 들어 <Host>의 구성요소 <Logger>의 속성은 아무것도 지정하지 않은 경우 <Engine>의 구성요소 <Logger>의 설정이 사용된다. 변경이 필요한 경우에는 <Host>의 구성요소 <Logger>에 별도의 설정을 함으로서 상위의 설정을 덮어 쓸수 있다.

 

1. <Server>요소

Tomcat 서버 구성요소의 정의 부분이다. 기본값은 <Server port="8005" shutdown="SHUTDOWN"> 로 되어 있으며, 포트 8005를 감시하고 shutdown 명령어를 접수하도록 설정되어 있다. 서버에서는 복수의 서비스를 관련 지울 수 있다.

 

2. <Service>요소

<Service> 구성요소를 정의하고 있다. <Service>는 뒤에 기술 할 <Engine>과 그것에 관련된 모든 <Connector>를 그룹화 한 것이다. 기본값은  <Service name="Catalina">로 되어 있다.

name 속성에서 Catalina 라고 하는 이름으로 서비스가 정의 되어 있고, 에러 로그 및 관리툴은 이 이름으로 식별합니다.하나의 서버에 복수의 서비스를 정의하는 경우, 다른 name 속성을 기입할 필요가 있다.

<Service>는 <Engine>과 하나 이상의 <Connector>를 관련짓는 것이 가능하다. <Service>와 <Engine>의 관계는 1:1 이다.

 

3. <Engine>요소

<Engine>은 servlet 컨테이너의 인스턴스를 표시하며, <Connector>로부터 보내진 요구를 처리한다. 기본값은 <Engine name="Catalina" defaultHost="localhost">로 되어 있다.

name 속성은 <Engine>의 이름을 표시하며, 에러 로그 및 관리툴은 이 이름으로 <Engine>을 식별한다.

defaultHost 속성은 server.xml에 정의 되어 있지 않은 <Host>에 요구가 있을 경우 발송되는 가상호스트를 지정한다. <Engine>에는 하나 이상의 <Host>가 관련지어져 있다.

 

4. <Connector>요소

요구를 <Engine>에 건네 주는 역할을 하는것이 <Connector>다. <Service>는 하나 이상의 <Connector>를 갖을 필요가 있다.

사용자는 HTTP 또는 HTTPS/SSL등 여러가지 방법으로 <Engine>에 요구를 보낸다. 이것들의 접속 요건의 처리는 <Connector>구성요소에 맡겨진다. 각 프로토콜에 대해 복수의 <Connector>를 갖는 것으로서 어떤 접속에서 요구가 보내져와도 <Engine>이 동일하게 처리하고, 응답을 <Connector>에 맡길 수 있다.

Tomcat에는 몇개의 표준 <connector>가 탑재되어 있으며, 기본값은 HTTP 1.1 <Connector>와 AJP <Connector>가 준비되어 있다.

 

5. <DefaultContext>요소

모든 <Context>공통의 정의부. 기본적으로는 설정되어 있지 않다.

 

6. <Realm>요소

<Realm>는 보안을 위해 role명과 사용자명, 비밀번호의 맵핑을 외부의 데이타베이스로 부터 가져오는 장치다. Tomcat은 UserDataBase, Memory, JDBC, JNDI등 몇개의 <Realm>을 가지고 있다.

각 <Realm>의 차이는 어디로 부터 정보를 가져왔는가의 차이밖에 없다. 기본값으로는 UserDataBsase이외의 <Realm>은 주석 처리되어 무효로 되어 있다.

 

7. <Logger>요소

<Logger>는 로그파일의 작성 방법을 설정 한다. <Logger>는 server.xml 구조에서 보듯이 <Engine>레벨에서 설정할 수 있다.

 

 <Logger className="org.apache.catalina.logger.FileLogger"
        prefix="server-log." suffix=".txt"
        timestamp="true"/>

 

위의 <예>에서는 Tomcat의 FileLogger 클래스를 사용, prefix, suffix, timestamp 속성에서 로그파일명을 정의하고 있다. 이 경우, 로그파일은 [server-log.2008_08_04.txt]과 같은 형식으로 $CATALINA_HOME/logs 디렉토리에 출력된다.

 

8. <Host>요소

<Engine>에 관련된 가상호스트를 정의 한다. 기본값으로는 다음과 같이 되어 있다.

 

 <Host name="localhost" appBase="webapps"
       unpackWARs="true" autoDeploy="true"
       xmlValidation="false" xmlNamespaceAware="false">

가상 호스트명을 "localhost"로 설정하고 appBase 속성에서 어플리케이션이 탑재되어 있는 디렉토리를 "webapps"로 설정하고 있다. 별도로 unpackWARs 속성에서는 WAR파일을 전개하고나서 실행할 것인지의 여부를, autoDeploy 속성에서는 Tomcat이 기동중에 웹어플리케이션을 배치한 경우에 자동으로 읽어 들일 것인지의 여부를 설정할 수 있다. 

 

9. <Value>요소

<Value>는 Tomcat 특유의 기능이다. <Value>는 상위 구성요소로의 필터 처리를 담당한다. <Engine>, <Host>, <Context>와 관련짓는 것이 가능하다. 또, Tomcat에는 표준으로 다음과 같은 몇개의 <Value>가 준비되어 있다.

 

AccessLogValue

 

<Valve className="org.apache.catalina.valves.AccessLogValve"
   directory="logs" prefix="server-log-" fileDateFormat="yyyy-MM-dd" suffix=".txt"/>

 

RemoteAccessValve

 

 <Valve className="org.apache.catalina.valves.RemoteAddrValve"
                   allow="127.0.0.1,192.168.0.1" />

 

SingleSignOnValue

 

 <Valve className="org.apache.catalina.authenticator.SingleSignOn"/>

 

 

RequestDumpValue

 <Valve className="org.apache.catalina.valves.RequestDumperValve"/>

 

 

AccessLogValue 의 <예>에서는 $CATALINA_HOME/logs 디렉토리에 server-log-2008-08-04.txt 의 형식으로 로그파일을 작성한다.

RemoteAccessValue는 접근을 IP주소 단위로 제한한다. 지정주소에서의 접근을 허가, 거부를 설정할 수 있다. <예>에서는 로컬 IP주소 192.168.0.1로 부터의 접근을 허가하고 있다. 또 RemoteHostValue를 사용하면 호스트 단위로 접근제한을 설정할 수 있다.

 

SingleSignOnValue는 요구와 응답의 헤더와 쿠키를 <Logger>로 설정한 로그파일이 작성된다.

 

10. <Context>요소

<Host>에는 웹어플리케이션의 복수개의 <Context>가 관련지어져 있다. <Context>요소에는 웹어플리케이션의 일련의 설정 프로퍼티가 들어간다. 웹어프리케이션 배치에서 소개 한대로 이 설정은 웹어플리케이션마다에 설정파일을 가질 수 있다.

 

Tomcat 설정과 관련된 자세한 내용은 Tomcat 홈페이지에서 확인하시기 바랍니다.