Tomcat 설정
톰캣 설정파일
server.xml
- 메인 설정 파일
- Service, Connector, Host 정보 설정
<?xml version="1.0" encoding="UTF-8"?>
<Server port="8005" 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" />
<Resource name="jdbc/MyDB"
global="jdbc/MyDB"
auth="Container"
type="javax.sql.DataSource"
driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost:3306/UserDB"
username="user1"
password="pass1"
maxActive="100"
maxIdle="20"
minIdle="5"
maxWait="10000"
validationQuery="select 1 from dual"
/>
</GlobalNamingResources>
<Service name="Catalina">
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
<Engine name="Catalina" defaultHost="localhost">
<Realm className="org.apache.catalina.realm.LockOutRealm">
<Realm className="org.apache.catalina.realm.UserDatabaseRealm"
resourceName="UserDatabase"/>
</Realm>
<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true">
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="localhost_access_log" suffix=".txt"
pattern="%h %l %u %t "%r" %s %b" />
</Host>
</Engine>
</Service>
</Server>
- Server, Resoure, Connector, Host를 주의깊게 보도록 하자.\
컴포넌트 별 설명
- Server : server.xml의 최상위 컴포넌트
- Listener : Listener 모듈 등록
- GlobalNamingResources : global JNDI 리소스들을 정의
- Resource: global JNDI 리소스
- Service: Connectors와 Engine 을 정의하는 프로퍼티
- Connector: Listening Server 정보 설정, 2개 포트에서 요청을 처리하겠다면 2개도 등록 가능
- Engine: DB Access 처리 라이브러리와 host 정보를 처리하는 컴포넌트
- Realm: 사용자에 할당된 데이터베이스 관리 및 컨테이너 관리 보안 구현, 사용할 Realm 클래스들 명시
- Host: 가상의 Host를 정의
- Value: Catalina 컨테이너에 대한 요청 처리 파이프라인에 삽입될 구성요소
Server
<Server port="8005" shutdown="SHUTDOWN">
<Listener .../>
...
<GlobalNamingResources>
...
</GlobalNamingResources>
<Service>
...
</Service>
</Server>
- port : TCP/IP port
- shutdown : Tomcat 종료를 위한 Command String
Listener
<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" />
- VersionLoggerListener : Tomcat 기동시, 버전 정보를 기록하는 Listener, Server컴포넌트의 첫줄에 위치해야한다.
- AprLifecycleListener : APR을 초기화, 파괴하는 Listener
- JreMemoryLeakPreventionListener : Java 런타임 환경의 메모리 누수, 파일lock 등에 대한 해결방법 제공 Listener
- GlobalResourcesLifecycleListener : JNDI 자원과 연관된 MBean들을 인스턴스화하는 Listener
- ThreadLocalLeakPreventionListener : 메모리 누구로 컨텍스트가 중지될 때, Executor 풀에서 스레드 갱신을 트리거하는 Listener
GlobalNamingResources
```xml
- <span style="color:#89ddff">Resource</span> : Tomcat/lib 경로에 dbms에 맞는 jdbc 드라이버가 존재할 경우, 위와같이 DB정보를 명시하여 web.xml 또는 context.xml 에서 불러올 수 있다.
```xml
//web.xml
<resource-ref>
<description>Employees Database for HR Applications</description>
<res-ref-name>jdbc/EmployeeDB</res-ref-name>
<res-ref-type>javax.sql.DataSource</res-ref-type>
<res-auth>Container</res-auth>
</resource-ref>\
Resource
<Resource name="jdbc/MyDB"
global="jdbc/MyDB"
auth="Container"
type="javax.sql.DataSource"
driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost:3306/UserDB"
username="user1"
password="pass1"
maxActive="100"
maxIdle="20"
minIdle="5"
maxWait="10000"
validationQuery="select 1 from dual"
/>
- Resource : Tomcat/lib 경로에 dbms에 맞는 jdbc 드라이버가 존재할 경우, 위와같이 DB정보를 명시하여 web.xml 또는 context.xml 에서 불러올 수 있다.
- auth : Application or Container 값을 갖는다.
- name : 리소스를 불러올 때 사용할 식별자
- type : 리소스 종류
- description : 리소스에 대한 설명
- url, username, password, maxActive, maxIdle, minIdle, maxWait : DB 관련 정보
- validationQuery : DB 테스트 sql
Service
<Service name="Catalina">
<Connector>
...
</Connector>
<Engine>
...
</Engine>
</Service>
- name : 기본값은 Catalina, HTTP/AJP 엔진 선택자
Connector
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
- port : TCP 수신 포트
- protocol : 통신 프로토콜
- connectionTimeout : Connnector timeout millsec
- redirectPort : ssl 요청에 대한 re-direct 포트
Engine
<Engine name="Catalina" defaultHost="localhost">
<Realm className="org.apache.catalina.realm.LockOutRealm">
<Realm className="org.apache.catalina.realm.UserDatabaseRealm"
resourceName="UserDatabase"/>
</Realm>
<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true">
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="localhost_access_log" suffix=".txt"
pattern="%h %l %u %t "%r" %s %b" />
</Host>
</Engine>
- name : 로깅시 표기될 Engine 의 고유한 논리명
- defaultHost : 기본 Host명, Host컴포넌트의 name과 일치해야한다.
Realm
<Realm className="org.apache.catalina.realm.LockOutRealm">
<Realm className="org.apache.catalina.realm.UserDatabaseRealm"
resourceName="UserDatabase"/>
</Realm>
- className : 사용할 Realm 클래스명
- resourceName : 사용할 Resource 명
Host
<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true">
<Valve .../>
</Host>
- name : host명
- appBase : webapps 경로
- unpackWARs : WAR 파일을 압축해제할 것인지
- autoDeploy : Tomcat이 실행중인동안 주기적으로 웹 프로그램 업데이트 내용 확인할지 여부, appBase 경로의 업데이트 내역을 확인한다.
Value
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="localhost_access_log" suffix=".txt"
pattern="%h %l %u %t "%r" %s %b" />
- className : 사용할 java 클래스명
- directory : 로그파일이 생성될 디렉토리 경로
- prefix : 로그파일 prefix
- suffix : 로그파일 suffix
- pattern : 로그 내용의 시간 표기 패턴
댓글남기기