— 이강우 2015/08/03 16:13

Context.xml

  • privileged=“false” : 해당 웹 애플리케이션이 톰캣의 내부 서블릿 및 권한 클래스에 접근할 수 있는지 여부를 설정합니다.
    • 역할: 기본값은 false입니다. true로 설정하면 톰캣 내부 기능(예: 매니저 애플리케이션용 서블릿 등)에 접근할 수 있는 특권을 부여받습니다.
    • 설정된 값 의미: 톰캣 내부 자원에 접근할 수 있도록 서블릿 권한을 허용합니다.
    • 사용 예시: 톰캣의 상태를 모니터링하거나 애플리케이션을 원격 배포/중지하는 Tomcat Manager App (/manager) 같은 관리용 웹 앱을 만들 때 필요합니다.
    • 보안 위험: 일반 사용자용 웹 애플리케이션에 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>
  • conf_engine_host_root.xml.txt
  • 마지막으로 수정됨: 2026/10/27 10:55
  • 저자 koov