커넥션 풀

 jdbc를 사용하여 db에 접속하기 위해서는 드라이버를 로드하고 connection 객체를 생성해야 한다. 이 경우 db에 접속할 때마다 드라이버를 로드하고 커넥션 객체를 생성하고 close해야 하는데 접속자가 많을 경우 서버에 부하를 줄 수 있다.

 이를 해결하기 위해 커넥션 풀을 사용한다.

 

1. Connection pool

 

db와 연결된 connection을 미리 만들어 pool속에 저장했다가 접속이 필요한 때에 불러와 사용하고 다시 pool로 반환하는 기법. 다 사용한 커넥션을 재사용 하기 때문에 다시 커넥션을 생성 할 필요가 없다.

 

2. 커넥션 풀 사용하기.

 

2-1. 라이브러리 다운.

 

- http://commons.apache.org/proper/commons-collections/

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

- http://commons.apache.org/proper/commons-pool/

 각각 접속하여 다운 받는다.

 

2-2. 코드 추가.

 

- /META-INF/context.xml

 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<Context>
<!-- 오라클 db에 접속하기 위한 코드 --><!-- 이름을 잘 기억하고 있어야 한다. -->
<Resource     name="jdbc/myoracle"
            auth="Container"
            type="javax.sql.DataSource" 
            driverClassName="oracle.jdbc.driver.OracleDriver"
            url="jdbc:oracle:thin:@127.0.0.1:1521:xe"
            username="scots" password="tiges"
            maxActive="20" maxIdle="10" maxWait="-1"/>
<!-- mysql db에 접속하기 위한 코드 -->
<Resource    name="jdbc/mymysql"
            auth="Container"
            type="javax.sql.DataSource"
            driverClassName="com.mysql.jdbc.Driver"
            url="jdbc:mysql://127.0.0.1:3306/exam"
            username="root" password="java1234"                   
            maxActive="200" maxIdle="100" maxWait="-1"/>    
 
</Context>

 

-/WEB-INF/web.xml <web-app>태그 사이에 추가.

1
2
3
4
5
6
  <resource-ref>
     <description>Connection</description>
     <res-ref-name>jdbc/OracleDB</res-ref-name>
     <res-type>javax.sql.DataSource</res-type>
     <res-auth>Container</res-auth>
 </resource-ref>

 

 

2-3. jdbc에 적용.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public class DBManager {
    public static Connection getConnection(){
        Connection conn = null;
        try{
          // 이부분을 추가하면 된다.
        Context initContext = new InitialContext();
        Context envContext  = (Context)initContext.lookup("java:/comp/env");        
        DataSource ds = (DataSource)envContext.lookup("jdbc/mymysql");//"jdbc/myoracle"
        conn = ds.getConnection();
        
        }catch(Exception e){
            e.printStackTrace();
        }
        return conn;
    }
}

댓글()