WEB/JSP & Servlet

JDBC Connection pooling

라롸 2020. 3. 18. 09:39

1. pooling 기법

데이터베이스 커넥션을 여러 개 만들어서 특정 공간에 저장해 놓고, 여러 사용자가 필요할 때 마다 하나씩 꺼내서 사용하고 다시 집어넣는(Pooling) 방식을 말합니다.
  데이터베이스 작업을 수행할 Client클래스들은 Connection Pool로부터 데이터베이스 커넥션을 하나 할당 받아서, 다 사용하고 난 후에는 다시 Connection Pool에게 넘겨 줍니다. Connection Pool에게 넘겨진 데이터베이스 커넥션은 다른 Client클래스가 사용을 요청했을 때 재사용이 됩니다.

 

2. Connection Pooling을 사용하는 이유

‘속도 향상’과 ‘자원 공유’

  데이터베이스 연결을 의미하는 Connection클래스는 객체화 될 때, 다른 일반적인 클래스들과는 달리 수초의 시간이 걸립니다. 이 시간은 만약 데이터베이스가 원격지에 존재한다면, 네트웍의 상태에 따라 더 지연이 될 수도 있습니다.  만약 우리가 만들 애플리케이션이 빈번하게 데이터베이스 커넥션을 생성한다면,
이러한 시간적인 오버헤드는 전체 애플리케이션을 느리게 만들 것입니다.
이 경우, 애플리케이션이 시작될 때 일정수의 커넥션을 미리 만들어 놓고, Connection Pool을 통해 재사용 한다면 상당한 속도 향상을 기대할 수 있을 것입니다.

 

3. 구현 방법 

3-1. DBCP Api 사용- 전체 프로젝트에 적용

web server의 context.xml 파일 내에 아래 내용 추가

  <Resource name="jdbc_mysql" auth="Container" type="javax.sql.DataSource" 
            driverClassName="com.mysql.jdbc.Driver"
            loginTimeout="10" maxWait="5000"  username="root"  password="123"  testOnBorrow="true"
            url="jdbc:mysql://localhost:3306/test" />

 

- Dao 클래스 에서

 DataSource ds;
 Connection conn;
 
 public BoardDAO(){
        //생성자에서  DataSource 얻기 :  InitialContext  와  JNDI 명
       try{
            Context ctx = new InitialContext();
            ds= (DataSource)ctx.lookup("java:comp/env/jdbc_oracle");
            conn = ds.getConnection();
			//** Mysql의 경우  ds= (DataSource)ctx.lookup("java:comp/env/jdbc_mysql");
       }catch(Exception e){ e.printStackTrace();}
 }

하면 된다.

이 때 oracle 드라이버 파일은 jdk의 jre\lib\ext 폴더 내에 존재해야 한다.

경우에 따라 apache-tomcat-5.5.27\common\lib 폴더에도 드라이버 파일이 있어야 한다.

Mysql 도 위와 같다.

 

 

3-2. DBCP 사용 - 각 프로젝트에 적용

각각의 프로젝트에 WebContent\META-INF 폴더에 context.xml 파일을 작성한다.

<Context>
	<Resource name="jdbc_maria" auth="Container" type="javax.sql.DataSource"
		driverClassName="org.mariadb.jdbc.Driver" loginTimeout="10" maxWait="5000"
		username="root" password="123" testOnBorrow="true"
		maxActive="500" maxIdle="100"
		url="jdbc:mysql://localhost:3306/test" />
</Context>

 

 

3-3. pooling을 지원하는 파일을 이용할 수도 있다.

 

 

 


참고 

1.  http://cafe.daum.net/flowlife/HqLp/8