본문 바로가기

MyBatis

MyBatis 커넥션 풀 설정

반응형

커넥션 풀 이란 최초 사용자의 요청이 있을때 DB에 연결하여 명령을 실행하고,
명령이 종료되어도 연결을 종료하지 않고 pool에 저장하여 요청이 올때마다 pool에서 커넥션을 꺼내 재사용하는것이다.
또한 재사용할 커넥션이 없을경우 새로운 커넥션을 생성하여 사용자는 해당 커넥션을 이용한다.

DB 핸들링에서 DB접속 부분의 cost가 제일 크다고 알려져 있으며, 커넥션 풀을 이용하면 DB 접속을 위해 연결하는 시간을 줄일수 있다.

가끔씩 실행되는 자바 프로그램등에서는 커넥션 풀이 필요 없을지 모르지만,
웹 서비스 등에서는 커넥션 풀을 반드시 이용하는게 좋다.


JSP + MyBatis 환경에서 커넥션 풀을 설정하는 방법이다. MyBatis 설정파일에 아래 내용을 추가하고 설정값을 변경하면 된다.



<environments default="development">
    <environment id="development">
        <transactionManager type="JDBC" />
        <dataSource type="POOLED">
            <property name="driver" value="${driver}" />
            <property name="url" value="${url}" />
            <property name="username" value="${username}" />
            <property name="password" value="${password}" />
            <property name="poolMaximumActiveConnections" value="20"/>
            <property name="poolMaximumIdleConnections" value="20"/>
            <property name="poolMaximumCheckoutTime" value="20000"/>
            <property name="poolPingEnabled" value="true"/>
            <property name="poolPingQuery" value="select 1"/>
            <property name="poolPingConnectionsNotUsedFor" value="10000"/>
            <property name="poolTimeToWait" value="15000"/>
        </dataSource>
    </environment>
</environments>



dataSource를 POOLED 로 변경하고 아래 설정을 추가하면 된다.


[옵션설명]
poolMaximumActiveConnections : 활성화된 최대 커넥션 수
poolMaximumIdleConnections : 유휴상태에서 최대 커넥션 수
poolMaximumCheckoutTime : 최대 커넥션 획득 시간(ms)
poolPingEnabled : 커넥션이 살아있는지 ping 테스트 여부
poolPingQuery : 커넥션 ping 테스트 쿼리 (DB 종류에 따라 적절하게 수정)
poolPingConnectionsNotUsedFor : 유휴상태의 커넥션이 닫히는지 판단할 시간(ms)
poolTimeToWait : 사용된 커넥션을 기다리는 시간


위 옵션 외에도 커넥션 풀링을 위한 다양한 옵션이 존재한다. 자세한건 myBatis 공식 홈페이지를 참고.