톰켓(TOMCAT)에 JNDI를 사용하면 좋겠지만 대부분 개발의 편의를??? 아님 편해서 DBCP를 사용하여
WAS ↔ DB 연결 구성을 한다.
개발할 때는 몇 명 사용 안 해서 문제는 없지만.... 개발 이후 며칠간 접속 자수도 별로 없는데 서비스가 안 되는 현상이 나오기 시작했다. WAS(tomcat)를 재시작하면 정상적으로 페이지가 보였지만... 문제를 찾을 때까지는 무한 삽질을 하였다.
당장 서비스 오픈 하는 날까지도.... 문제 해결이 안 되어 저녁까지 못 찾아 고생했던 기억이 있어요.
역시 절 실하면 되는 것이 였는가? DBCP옵션을 손보니 해결이 되었다.
그리고 Tomcat 기반의 JBOSS에서는 동일한 현상이 안 일어난다. 주의!! 그나마 커스터마이징 되어있다.
아래 예제는 기본 설정이다.
사용자 정보 넣고 밸리데이션 체크가 끝이다.
<!-- Oracle -->
<bean id="dataSource-oracle" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="${Globals.DriverClassName}"/>
<property name="url" value="${Globals.Url}" />
<property name="username" value="${Globals.UserName}"/>
<property name="password" value="${Globals.Password}"/>
<property name="validationQuery" value="select 1 from dual" />
<property name="testWhileIdle" value="true" />
<property name="timeBetweenEvictionRunsMillis" value="60000" />
</bean>
이번 설정은 최적한한 설정이다.
<bean id="dataSource-oracle" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="${Globals.DriverClassName}"/>
<property name="url" value="${Globals.Url}" />
<property name="username" value="${Globals.UserName}"/>
<property name="initialSize" value="5"/>
<property name="maxActive" value="30"/>
<property name="maxIdle" value="5"/>
<property name="maxWait" value="30000"/>
<property name="validationQuery" value="select 1 from dual" />
<property name="testOnBorrow" value="true"/>
<property name="testOnReturn" value="false"/>
<property name="testWhileIdle" value="true" />
<property name="timeBetweenEvictionRunsMillis" value="60000" />
<property name="poolPreparedStatements" value="true"/>
</bean>
두 번째로 DBCP 1 버전과 DBCP 2 버전 차이가 있는데 DBCP1 버전 옵션을 사용하여 WAS 로그에는 사용되지 않는 옵션이라고 나오지만 잘 안 보니 모르는 사람이 많습니다.
버전별 파라미터 명을 구분하여 사용해야한다.
maxActice(1.x), maxTotal(2.x)
maxWait(1.x), maxWaitMillis(2.x)
아래는 최적화한 파라미터 예시
<Resource auth="Container"
driverClassName="com.tmax.tibero.jdbc.TbDriver"
maxTotal="20" maxIdle="10" maxWaitMillis="5000"
name="jdbc/testdb"
username="test" password="test123"
type="javax.sql.DataSource"
url="jdbc:tibero:thin:@192.168.0.50:8629:testdb" />
<property name="maxTotal" value="50" />
<property name="maxIdle" value="50" />
<property name="maxWaitMillis" value="5000" />
maxWaitMillis="5000" 5초, or 3초로 한다.
그리고 dbcp 1버전에서는 아래 옵션 주어 해결
cachingAllowed="true" cacheMaxSize="100000"
/.../WEB-INF/applicationContext.xml
파일의 bean id="dataSource" 이며 아래 옵션 적용 후, 문제가 발생안함
p:removeAbandoned="true"
p:removeAbandonedTimeout="10000"
p:logAbandoned="true"
p:timeBetweenEvictionRunsMillis="300000"
아파치 공식 Site
https://commons.apache.org/proper/commons-dbcp/configuration.html
* 여기도 설명 기본 설명은 잘되어있어요
https://zzang9ha.tistory.com/376
* 네이버 DBCP 설명 잘되어 있어요. 자세한 설명은 여기로~~
https://d2.naver.com/helloworld/5102792
'IT이야기' 카테고리의 다른 글
[APACHE] 최대 접속자(maxclient) 확인 및 설정하기 (0) | 2024.02.14 |
---|---|
[웹취약점] HTTP 메소드 설정 방법 (0) | 2024.02.06 |
[아파치] 아파치(Apache) 한글 도메인(Domain) 적용하기 (0) | 2024.02.03 |
[톰켓] 톰켓(Tomcat) 로그 로테이션 방법 (0) | 2024.02.03 |
[내/외부망연계] 내부망/인터넷망간 망분리하여 구축 (0) | 2024.02.02 |