본문 바로가기
프로그래밍/스프링프레임워크

전자정부 표준프레임워크 - dataSource (DBCP) 설정하기

by pentode 2018. 4. 17.

전자정부 표준프레임워크의 템플릿 프로젝트를 설치하고 실행해보면 데이터베이스와의 연결풀을 설정하는 DataSource 설정에 Apache Common DBCP(Database Connection Pool)을 사용하고 있습니다.


대부분 개발후 운영환경에서는 WAS(Web Application Server)에서 제공하는 DataSource를 사용하도록 수정할 것이므로, 기본 설정을 그대로 사용하고 변경하는 일은 잘 없을 것입니다. 하지만 운영환경이 Tomcat 이라면 대부분 연결풀로 DBCP 를 사용하므로 설정 방법을 알아 두는 것도 나쁘지 않을 것입니다.


다음은 전자정부 표준프레임웍 Portal 사이트 템플릿 프로젝트의 DataSource 기본 설정입니다. 이 템플릿은 commons-dbcp 1.4 버전을 사용하고 있습니다. dbcp 2.x 버전에서는 프로퍼티 이름이 좀 변경되었습니다. 주요 변경 내용을 글 하단의 참고사항에 적어두겠습니다.

 

<!-- Oracle -->
<bean id="dataSource" 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}"/>
</bean>

 

각 프로퍼티의 value 에 들어가는 항목들은 globals.properties 파일에서 정의하고 있습니다. 다음은 들어가는 값들의 예 입니다.


* ${Globals.DriverClassName} - oracle.jdbc.driver.OracleDriver (JDBC 드라이브 클래스 이름)

* ${Globals.Url} - jdbc:log4jdbc:oracle:thin:@127.0.0.1:1521:XE (데이터베이스 연결 URL)

* ${Globals.UserName} - xeuser (사용자 아이디)

* ${Globals.Password} - xeuser (사용자 비밀번호)



데이터베이스 연결 풀(Connection Pool)이라고 하면 데이터베이스와의 연결을 미리 만들어 두고, 그 연결을 사용함으로해서 네트웍 연결작업에 의한 지연을 줄여 주는데 큰 목적이 있습니다. 기본 설정은 몇개의 연결을 사용할까요? 연결 얻고, 유지하는데 관련된 프로퍼티들을 알아보겠습니다.


아래의 예는 기본값을 사용한 설정입니다. 즉, 위의 예와 동일한 설정이 되겠습니다.

 

<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
    <property name="driverClassName" value="oracle.jdbc.driver.OracleDriver"/>
    <property name="url" value="jdbc:log4jdbc:oracle:thin:@127.0.0.1:1521:XE" />
    <property name="username" value="xeuser"/>
    <property name="password" value="xeuser"/>
    <property name="initialSize" value="0"/>
    <property name="maxActive" value="8"/>
    <property name="maxIdle" value="8"/>
    <property name="minIdle" value="0"/>
    <property name="maxWait" value="-1"/>
</bean>

 

각 프로퍼티들의 의미를 알아보겠습니다.


* initialSize - 연결 풀이 최초 생성될 때 같이 이 숫자만큼 데이터베이스 연결을 미리 생성합니다. 기본값은 0입니다.


* maxActive - 동시에 사용할 수 있는 최대 연결의 갯수 입니다. 음수이면 제한이 없습니다. 기본값은 8 입니다. 이 갯수를 초과하여 요청이 들어오면 최대 maxWait 만큼 대기하고, 그래도 연결을 사용할 수 없을 때는 예외를 발생합니다.


* maxIdle - 풀에서 사용되지 않은 상태로 존재할 수 있는 최대 연결의 숫자 입니다. 음수이면 제한이 없습니다. 기본값은 8 입니다. maxActive가 10 이고, maxIdle이 8일 때 10개의 연결이 모두 사용되고 있는 상태를 가정해 봅니다. 연결이 사용을 마치고 하나씩 반환이 되면, maxIdle 숫자인 8개가 될때까지는 유휴 상태로 풀에 남겨집니다. 아홉번째 부터는 연결이 해제되어 제거 됩니다. 모두 반환된후에 풀에는 유휴상태인 8개의 연결이 남아 있습니다.


* minIdle - 풀에서 사용되지 않은 상태로 존재할 수 있는 최소 연결의 숫자 입니다. 기본 값은 0 입니다. 풀을 관리하는 쓰레드는 풀내의 유휴 연결의 최소 갯수를 이 값으로 유지합니다. 주로 발생하는 상황은 오류가 발생한 연결이나, 사용되지 않고 오래된 연결은 풀에서 제거됩니다. 이 경우 풀내의 연결의 갯수가 minIdle 이하로 떨어지면 새로 생성해서 minIdle 갯수에 맞추게 됩니다.


* maxWait - 풀에 사용 가능할 연결이 없을때 대기하는 최대 시간을 밀리초 단위로 나타냅니다. 이 대기시간후에도 사용 가능한 연결이 없으면 예외를 발생합니다. -1은 무한대기를 나타냅니다. 기본값은 -1입니다.



※ 참고


- DBCP 버전에 따른 변경 파라미터

 

Commons DBCP 1.x Commons DBCP 2.x -----------------------------------

maxActive maxTotal maxWait maxWaitMills

 

- 전체 파라미터 참고 URL

http://commons.apache.org/proper/commons-dbcp/configuration.html

반응형