본문 바로가기

웹 개발/설정 및 오류해결

[웹 설정] 톰캣(tomcat) server.xml 설정하기

참고. tomcat 9.0 기준으로 작성된 포스팅입니다.


 

server.xml 개요

server.xml 은 톰캣이 실행시 필요한 정보를 정의한 파일이다. 포트 정보, DB 접속정보, 웹 리소스(ex. jsp, image 파일) 참조경로, 이벤트 리스너(event listener) 등을 설정한다.

 

server.xml 의 주요구조

<Server>
	<Listener/>
	
	<GlobalNamingResources>
    		<Resource/>
	</GlobalNamingResources>
	
	<Service>
		<Connector/>
		<Engine>
			<Realm/>
			<Host/>
		</Engine>
	</Service>
</Server>

<Server> 는 server.xml 의 최상위 컴포넌트다. 이 아래에 필요한 컴포넌트가 기술된다.

  • Listener: 톰캣의 이벤트 리스너 정의
  • GlobalNamingResources: JNDI정보, 즉 JDBC 와 같은 java-DB 연결정보를 정의
  • Service: 클라이언트의 요청을 어떻게 처리할지 정의

 

 

server.xml 의 주요내용

1. Server

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

 

속성 내용
port 톰캣종료 전용 포트를 지정
shutdown 종료 명령

 

 

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"/>

톰캣의 이벤트 리스너 설정

 

 

3. GlobalNamingResources

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

<GlobalNamingResources>
     <Resource auth="Container" description="User database that can be updated and saved"
          factory="org.apache.catalina.users.MemoryUserDatabaseFactory" name="UserDatabase"
          pathname="conf/tomcat-users.xml" type="org.apache.catalina.UserDatabase"/>
     <Resource 
          defaultAutoCommit="false" 
          driverClassName="oracle.jdbc.driver.OracleDriver" 
          factory="org.apache.tomcat.jdbc.pool.DataSourceFactory" 
          initialSize="2" 
          maxActive="15" 
          maxAge="99999999999" 
          maxIdle="2" 
          maxWait="5000" 
          minIdle="2" 
          name="jdbc/dsCapt" 
          removeAbandoned="true" 
          testWhileIdle="true" 
          type="javax.sql.DataSource" 
          url="jdbc:oracle:thin:@192.168.1.158:1521:orcl" 
          username="codeCaptain" 
          password="password123!@#" 
          validationInterval="30000" 
          validationQuery="SELECT 1 FROM DUAL"/>
</GlobalNamingResources>

 

속성 내용
auth -로그인 방식 정의. Application/ container
-application : 애플리케이션이 프로그래밍 방식으로 로그인
-container : 애플리케이션 대신 컨테이너가 로그인
description 리소스 설명
factory jdbc connection pool 설정
name 해당 Resource 에 붙인 이름
pathname 설정 파일 경로
type 리소스 검색시 사용되는 java 클래스 이름(전체 경로)
defaultAutoCommit 자동커밋 여부
driverClassName DB vender에 따른 클래스명
initialSize 초기 DBCP 크기
maxActive 동시에 사용할 수 있는 커넥션 개수
maxAge 커넥션 생명시간
maxWait 커넥션을 기다리는 최대시간(밀리초)
maxIdle 커넥션 반납시 유지할 커넥션 최대 개수
minIdle 커넥션 반납시 유지할 커넥션 최소 개수
removeAbandoned 사용하지 않는 커넥션의 반환여부. true/false
testWhileIdle 커넥션 중이지 않을 때 테스트 여부. true/false
url db 연결 IP
username db 계정 id
password db 계정 pw
validationInterval 정상연결 여부 확인주기(밀리초)
validationQuery 정상연결 되었는지 확인하는 쿼리

 

 

4. Service

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

<Service name="Catalina">

 

 

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>

 

속성 내용
URIEncoding 클라이언트 요청 인코딩방식
acceptCount 클라이언트 요청대기 최대 개수
compression gzip 압축여부. on/ off/ force
on : 텍스트 데이터 압축
off : 압축하지 않음
force : 모든 데이터 압축
compressionMinSize 압축시 데이터 최소 크기
connectionTimeout TCP 연결 후 요청(URI) 수신까지 대기하는 시간(밀리초)
disableUploadTimeout  
enableLookups 호스트 요청(ex. request.getRemoteHost())시 반환 방식. true/false
true : 실제 호스트명 리턴
false : ip 리턴
maxHttpHeaderSize 톰캣이 수신하는 헤더 최대 크기
maxPostSize POST 방식 수신시 최대용량
maxThreads thread 최대 개수
minSpareThreads 최초로 생성하는 thread 개수
noCompressionUserAgents 문자열 압축을 사용하지 않을 브라우저 설정
설정된 브라우저는 압축전송을 하지 않는다
port 톰캣이 listenTCP 포트
redirectPort Connector SSL 을 지원하지 않는경우 응답을 보낼 포트
useSendfile 파일 전송여부. true/ false

 

 

4.2 Engine

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

<Engine defaultHost="localhost" name="Catalina">

 

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

 

4.2.1 Realm

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

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

 

4.2.2 Host

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

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

 

 

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 로그 파일에 추가할 접미사

 

 

 

4.2.2.2. Context

<Context docBase="C:/workspace/captDev/captDev_web/WebRoot" path="/captDev"  reloadable="true">

 

4.2.2.3. Resource

DB 접속 정보가 필요한 경우 

<Resource
     auth="Container"
     driverClassName="oracle.jdbc.driver.OracleDriver"
     max="5" min="2"
     factory="org.objectweb.jotm.datasource.DataSourceFactory"
     maxWait="5000"
     maxIdle="2"
     maxActive="15"
     name="jdbc/dsBpm" 
     type="javax.sql.DataSource" 
     url="jdbc:oracle:thin:@192.168.1.158:1521:orcl" 
     username="codeCaption" 
     password="password123!@#" 
     testStmt="SELECT 1 FROM DUAL"/>

 

4.2.2.4. ResourceLink

<ResourceLink global="jdbc/dsCaptDev" name="jdbc/dsCaptDev" type="javax.sql.DataSource"/>

 

 

4.2.2.5. Transaction

<Transaction
     name="UserTransaction"
     auth="Container"
     type="javax.transaction.UserTransaction"
     factory="org.objectweb.jotm.UserTransactionFactory"
     jotm.timeout="600"/>

보다 자세한 내용은 Tomcat 홈페이지에서 확인할 수 있다.