참고. 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 | 톰캣이 listen할 TCP 포트 |
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 "%r" %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 홈페이지에서 확인할 수 있다.