— 이강우 2015/08/03 16:13
privileged=“false” : 해당 웹 애플리케이션이 톰캣의 내부 서블릿 및 권한 클래스에 접근할 수 있는지 여부를 설정합니다.privileged=“true”를 설정하면 애플리케이션 취약점을 통해 톰캣 내부 시스템이 노출될 수 있으므로 운영 환경의 일반 앱에서는 false로 유지해야 합니다.reloadable=“false” : /WEB-INF/classes/ 및 /WEB-INF/lib/ 디렉터리 내부의 클래스 파일이나 라이브러리 변경 감지 및 자동 재로딩 여부를 설정합니다.개발 환경(Development): 코드를 수정하고 컴파일할 때마다 서버를 껐다 켜지 않아도 되므로 개발 생산성을 높이기 위해 true로 사용합니다.운영 환경(Production): 백그라운드 쓰레드가 지속적으로 파일 변경을 감지하므로 부하(CPU/메모리)가 크게 증가하며, 반복적인 재로드 과정에서 Classloader 메모리 누수(Memory Leak)가 발생하여 서버가 멈출 수 있습니다. 운영 환경에서는 반드시 false로 설정해야 합니다.
<?xml version='1.0' encoding='utf-8'?>
<Context docBase="/software/docroot/app.war" privileged="false" reloadable="false">
<!-- ### SqLite JDBC JNDI - 1node ###
<Resource name="jdbc/sqlite"
auth="Container"
type="javax.sql.DataSource"
driverClassName="org.sqlite.JDBC"
url="jdbc:sqlite:/data/sqlite/test.db"
factory="org.apache.tomcat.jdbc.pool.DataSourceFactory"
maxActive="20"
maxIdle="5"
maxWait="10000"
removeAbandonedOnBorrow="true"
removeAbandonedTimeout="60"
logAbandoned="true"
testOnBorrow="true"
validationQuery="SELECT 1" />
-->
<!-- ### MySQL JDBC JNDI - 1node ###
<Resource name="jdbc/mysql" auth="Container"
type="javax.sql.DataSource"
maxActive="100"
maxIdle="30"
maxWait="10000"
username="USERNAME"
password="PASSWORD"
driverClassName="com.mysql.jdbc.Driver"
removeAbandonedOnBorrow="true"
removeAbandonedTimeout="60"
logAbandoned="true"
validationQuery="select 1"
url="jdbc:mysql://IPADDRESS:PORT/DBNAME?autoReconnect=true" />
-->
<!-- ### Oracle JDBC JNDI - 1node ###
<Resource name="jdbc/JNDINAME" auth="Container"
type="javax.sql.DataSource"
maxActive="100"
maxIdle="30"
maxWait="10000"
username="USERNAME"
password="PASSWORD"
driverClassName="oracle.jdbc.driver.OracleDriver"
removeAbandonedOnBorrow="true"
removeAbandonedTimeout="60"
logAbandoned="true"
validationQuery="select 1 from dual"
url="jdbc:oracle:thin:@localhost:1521:SID" />
-->
<!-- ### Oracle RAC JDBC JNDI - 2node ###
<Resource name="jdbc/jndiname" auth="Container"
type="javax.sql.DataSource"
maxActive="100"
maxIdle="30"
maxWait="10000"
username="USERNAME"
password="PASSWORD"
driverClassName="oracle.jdbc.driver.OracleDriver"
removeAbandonedOnBorrow="true"
removeAbandonedTimeout="60"
logAbandoned="true"
validationQuery="select 1 from dual"
url="jdbc:oracle:thin:@(description=(address_list=(load_balance=on)(failover=on)(address=(protocol=tcp)(host=1.1.1.1)(port=1521))(address=(protocol=tcp)(host=2.2.2.2)(port=1521)))(connect_data=(service_name=SERVICE_NAME)(failover_mode=(type=select)(method=basic))))" />
-->
<!-- ### Oracle RAC JDBC JNDI - 4node ###
<Resource name="jdbc/JNDINAME" auth="Container"
type="javax.sql.DataSource"
maxActive="100"
maxIdle="30"
maxWait="10000"
username="USERNAME"
password="PASSWORD"
driverClassName="oracle.jdbc.driver.OracleDriver"
removeAbandonedOnBorrow="true"
removeAbandonedTimeout="60"
logAbandoned="true"
validationQuery="select 1 from dual"
url="jdbc:oracle:thin:@(description=(address_list=(load_balance=on)(failover=on)(address=(protocol=tcp)(host=1.1.1.1)(port=1521))(address=(protocol=tcp)(host=2.2.2.2)(port=1521))(address=(protocol=tcp)(host=3.3.3.3)(port=1521))(address=(protocol=tcp)(host=4.4.4.4)(port=1521)))(connect_data=(service_name=SERVICE_NAME)(failover_mode=(type=select)(method=basic))))" />
-->
</Context>