본문 바로가기
Spring Framework

Connection Pool ?

by juneMiller 2021. 12. 30.

Connection Pool ? 

웹 컨테이너 (WAS)가 실행 되면서 DB와 미리 connection 연결 해 놓은 객체들을 

pool 에 저장해두었다가, 클라이언트 요청이 오면 conncetion을 빌려주고, 처리가 끝나면

다시 connection을 반납받아 pool 에 저장하는 방식을 말한다. 

 

Connection conn = null;
PreparedStatement  pstmt = null;
ResultSet rs = null;

try {
    sql = "SELECT * FROM T_BOARD"

    // 1. 드라이버 연결 DB 커넥션 객체를 얻음
    connection = DriverManager.getConnection(DBURL, DBUSER, DBPASSWORD);

    // 2. 쿼리 수행을 위한 PreparedStatement 객체 생성
    pstmt = conn.createStatement();

    // 3. executeQuery: 쿼리 실행 후
    // ResultSet: DB 레코드 ResultSet에 객체에 담김
    rs = pstmt.executeQuery(sql);
    } catch (Exception e) {
    } finally {
        conn.close();
        pstmt.close();
        rs.close();
    }
}

위와 같이 드라이버(Driver)를 로드하고 커넥션(connection) 객체를 받아와야 한다. 

그러면 매번 사용자가 요청할때 마다 드라이버를 로드하고 커넥션 객체를 생성하고 연결하고

종료하기에 매우 비효율적이다. 

 

이와 같은 문제를 해결 하기 위해 DBCP 를 쓴다. 

DateBase Connection Poll 약자로 DB 커넥션을 맺고 객체를 관리하는 역할을 한다. 

 

 

Commons DBCP 스프링 설정

<bean id="dataSource-mysql"
        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="maxActive" value="${Globals.maxActive}"/>
        <property name="maxIdle" value="${Globals.maxIdle}"/>
        <property name="maxWait" value="${Globals.maxWait}"/>
    </bean>

 

pom.xml

<dependency>
    <groupId>commons-dbcp</groupId>
    <artifactId>commons-dbcp</artifactId>
    <version>1.4</version>
</dependency>

'Spring Framework' 카테고리의 다른 글

Spring Framework 실행 순서  (0) 2022.01.03
Dependency Injection 이란  (0) 2022.01.03