[Tomcat] server.xml 설정

DongbinLim·2024년 11월 13일

Middleware

목록 보기
4/6

0. 시스템 내부 xml 파일내용

<?xml version="1.0" encoding="UTF-8"?>
<Server port="${tomcat.shutdown.port}" shutdown="SHUTDOWN">
  <Listener className="org.apache.catalina.startup.VersionLoggerListener" />
  <Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" />
  <Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" />
  <Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" />
  <Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener" />

  <GlobalNamingResources>
    <Resource name="UserDatabase" auth="Container"
              type="org.apache.catalina.UserDatabase"
              description="User database that can be updated and saved"
              factory="org.apache.catalina.users.MemoryUserDatabaseFactory"
              pathname="conf/tomcat-users.xml" />
  </GlobalNamingResources>

  <Service name="Catalina">
    <Connector port="${tomcat.startup.port}" protocol="HTTP/1.1" address="${tomcat.server.ipaddr}"
               connectionTimeout="20000"  address="${tomcat.server.ipaddr}" redirectPort="${tomcat.ssl.port}" />

    <Connector port="${tomcat.ajp.port}" protocol="AJP/1.3"  redirectPort="${tomcat.ssl.port}" address="${tomcat.server.ipaddr}" secretRequired="false" />

    <Engine name="Catalina" defaultHost="${tomcat.server.name}" jvmRoute="${tomcat.jvmRoute}">

      <Realm className="org.apache.catalina.realm.LockOutRealm">
        <Realm className="org.apache.catalina.realm.UserDatabaseRealm"
               resourceName="UserDatabase"/>
      </Realm>

      <Host name="localhost"  appBase="${tomcat.instance.dir}"
            unpackWARs="true" autoDeploy="false" deployOnStartup="true">
        <Valve className="org.apache.catalina.valves.AccessLogValve" directory="${tomcat.base.log}/access"
               prefix="access_log" suffix=".txt" pattern="%h %l %u %t &quot;%r&quot; %s %b %D" />
      </Host>
    </Engine>
  </Service>
</Server>

+)

1. server.xml 개요

  • 톰캣 실행시 필요한 정보 정의한 파일.
  • 톰캣은 모든 설정 정보를 XML로 저장한 후, 실행 시 정보 읽어와서 설정대로 실행함.
  • 만들어놓은 웹 애플리케이션도 미리 태그 이용해서 server.xml 에 등록해둬야 톰캣이 설정한대로 웹 애플리케이션 실행함
  • 포트정보, DB 접속정보, 웹 리소스(ex.jsp,image파일)참조경로, 이벤트리스너, etc..

2. server.xml 주요구조

<Server>
	<Listener/>
	
	<GlobalNamingResources>
    		<Resource/>
	</GlobalNamingResources>
	
	<Service>
		<Connector/>
		<Engine>
			<Realm/>
			<Host/>
		</Engine>
	</Service>
</Server>
  • <Server> 는 server.xml 최상위 컴포넌트이고, 그 아래 필요 컴포넌트 적힘
    - Listener : 톰캣의 이벤트 리스너 정의
    - GlobalNamngResources : JNDI 정보, ie. JDBC 같은 java-DB 연결 정보 정의
    - Service : 클라이언트 요청 어떻게 처리할지 정의

3. server.xml 주요 내용

3.1. Server

<!--예시-->
<Server port="6005" shutdown="SHUTDOWN">
  
<!--Apache-Tomcat 연동-->
<Server port="${tomcat.shutdown.port}" shutdown="SHUTDOWN">
속성내용
port톰캣전용 전용 포트를 지정
shutdown종료 명령

3.2. Listener

톰캣의 이벤트 리스너 설정

<Listener className="org.apache.catalina.startup.VersionLoggerListener"/>
<Listener SSLEngine="on" className="org.apache.catalina.core.AprLifecycleListener"/>
<Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener"/>
<Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener"/>
<Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener"/>
  <Listener className="org.apache.catalina.startup.VersionLoggerListener" />
  <!-- Security listener. Documentation at /docs/config/listeners.html
  <Listener className="org.apache.catalina.security.SecurityListener" />
  -->
  <!-- APR library loader. Documentation at /docs/apr.html -->
  <Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" />
  <!-- Prevent memory leaks due to use of particular java/javax APIs-->
  <Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" />
  <Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" />
  <Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener" />

3.3 GlobalNamingResources

JNDI정보, 즉 JDBC 와 같은 java-DB 연결정보를 정의

 <GlobalNamingResources>
    <!-- Editable user database that can also be used by
         UserDatabaseRealm to authenticate users
    -->
    <Resource name="UserDatabase" auth="Container"
              type="org.apache.catalina.UserDatabase"
              description="User database that can be updated and saved"
              factory="org.apache.catalina.users.MemoryUserDatabaseFactory"
              pathname="conf/tomcat-users.xml" />
    <!--
    <Resource
              name="jdbc/TestJNDI"
              type="javax.sql.DataSource"
              username="user"
              password="new1234!"
              maxWaitMillis="30000"
              validationQuery="select 1"
              driverClassName="com.edb.Driver"
              url="jdbc:edb://0.0.0.0:5444/edb"/>
    -->
    <!--
    <Resource
              name="jdbc/TestJNDI"
              type="javax.sql.DataSource"
              username="user"
              password="new1234!"
              maxWaitMillis="30000"
              validationQuery="select 1"
              driverClassName="org.postgresql.Driver"
              url="jdbc:postgresql://0.0.0.0:5432/pgdb"/>
    -->
  </GlobalNamingResources>

3.4 Service

클라이언트의 요청 처리정보를 담는다. Connector 와 Engine 으로 구성된다. 보통 Catalina 라는 디폴트 값을 사용한다.

<Service name="Catalina">

참고글 : 카탈리나(Catalina)란?

  • 톰캣은 여러개의 기능(부품)으로 구성되어 있는데, 그 중 Catalina가 핵심 구성요소임
  • 톰캣의 서블릿(Servleret) 스펙 실질적인 구동을 제공하고
  • 톰캣 서버를 가동시킬 경우, 카탈리나를 구동한 것이라 생각하면 된다고 함.

3.4.1. Connector

클라이언트의 요청(request)을 수신하고 응답(response)을 전송할 인터페이스 정보

<Connector URIEncoding="UTF-8" acceptCount="100" connectionTimeout="20000"
     disableUploadTimeout="true" enableLookups="false" maxHttpHeaderSize="8192"
     maxThreads="1024" minSpareThreads="25" port="6001" redirectPort="6003"
     maxPostSize="-1" compression="on" compressionMinSize="2048"
     noCompressionUserAgents="gozilla, traviata" useSendfile="false">
     <UpgradeProtocol className="org.apache.coyote.http2.Http2Protocol" />
</Connector>

3.4.2. Engine

클라이언트가 서버에 요청을 보내면 엔진에서 확인하게 된다. 엔진은 request 에 포함된 HTTP 헤더를 분석해 적절한 Host로 전달해준다.

<Engine defaultHost="localhost" name="Catalina">
속성내용
classNameorg.apache.catalina.Engine 를 구현하는 클래스
defaultHost기본으로 설정할 host. 4.2.2. 의 name 속성과 일치해야 함

3.4.2.1. Realm

일종의 database 영역이다. DB 사용자들을 확인하고, 각 사용자의 역할과 권한에 맞는 정보를 포함하고 있다.

<Realm className="org.apache.catalina.realm.LockOutRealm">
     <Realm className="org.apache.catalina.realm.UserDatabaseRealm" resourceName="UserDatabase"/>
</Realm>

3.4.2.2. Host

Engine 이 전달해준 클라이언트 요청을 처리할 정보를 포함한다.

<Host appBase="webapps" autoDeploy="true" name="localhost" unpackWARs="true">
3.4.2.2.1. Valve

클라이언트의 요청을 처리하는 과정 중에 특정 기능을 수행하도록 하는 특정 요소. 파이프라인 사이에 밸브를 끼울 수 있는 것처럼, 특정 기능을 추가할 목적으로 사용한다. 특히 로그 파일을 남길 목적으로 자주 사용한다.

    <Valve className="org.apache.catalina.valves.AccessLogValve" 
           directory="logs"
           pattern="%h %l %u %t &quot;%r&quot; %s %b" 
           prefix="localhost_access_log" 
           suffix=".txt"/>
속성내용
className디폴트 값. org.apache.catalina.valves.AccessLogValve
directory로그가 남겨질 디렉토리
pattern로그를 남기기 위해 판별할 패턴
prefix로그 파일에 추가할 접두사
suffix로그 파일에 추가할 접미사
3.4.2.2.2. Context
3.4.2.2.3. Resource
3.4.2.2.5. Transaction

0개의 댓글