2012년 11월 22일 목요일

DB Connection Pool 이란?


1. DB Connection Pool 이란?
대부분의 사람들이 DB Connection Pool이란 것을 알고 있을 것이다. 보통의 경우에는 DB에 연결을 하고 결과를 가져온 후에
연결을 끊어 버리게 된다. DB에 연결하는 과정은 시간이 많이 소요되는 Cost가 비싼 연산이다. 물론 퍼포먼스도 많이 떨어진다.
이러한 문제점을 해결하기 위해 DB Connection Pool 이라는 것을 사용한다.
DB Connection Pool이란 DB Connection Pool 매니저가 일정의 컨넥션을 연결하고 있다가, 요청이 들어오면 컨넥션을 할당을 해주고 없으면 기다리게 한다. 요청한 클라이언트는 컨넥션을 다쓰면 다시 반납하는 구조로 이루어 진다.
따라서 속도면이나 퍼포먼스 부분에서  조금은 향상을 바랄수 있을 것이다.
 
1)조건
WAS : 톰캣 4.1.X 이상
J2SDK : 1.4.X 이상
OS:원도우,리눅
JDBC드라이버:mysql-connector-java-3.0.16-ga-bin.jar
 
2)세팅
 
해당 톰캣의 COMMON/LIB에 DBCP에 관련된 다음의 3가지 라이브러리가 존재하는지 검사
commons-collections.jar,commons-dbcp-1.1.jar,commons-pool-1.1.jar
 
해당 콤캣의 COMMON/LIB에 MYSQL관련 라이브러리를 넣어준다.
mysql-connector-java-3.0.16-ga-bin.jar
 
conf/server.xml을 수정한다. JNDI 네임설정
이부분이 주석처리를 해체하고 그안에 아래 내용을 넣는다.
 
scope="Shareable" type="javax.sql.DataSource"/> 
           

                
           url
           jdbc:mysql://localhost/접속db명 
           
  

              
           maxIdle   
           10 
           
 
               
          
           maxActive   
           30 
            
                    
     
  driverClassName   
  org.gjt.mm.mysql.Driver 
  
 
  
     
  username    
  접속id명 
  
 

     
  password     
  접속패스워드 
 
 
     
  maxWait   
  10000 
   

     
  removeAbandoned   
  true 
 
  
     
  removeAbandonedTimeout   
  60 
 

     
  logAbandoned   
  true 
  
  
       
  factory
  org.apache.commons.dbcp.BasicDataSourceFactory 
  
     
  
 
각 context 의 WEB-INF/web.xml 파일을 설정한다.mysql의경우 따로 해야한다.
안에 아래 내용을 넣는다.
    
      MySQL DataSource   
      dbcp이름명   
      javax.sql.DataSource   
      Container 
   
 
3)소스
모든세팅이 끝나면 아파치와 톰캣을 재가동합니다.
 
 


<%@ page import="javax.sql.*,java.sql.*,javax.naming.*" contentType="text/html;charset=euc-kr" %>
<%
Connection con = null;
 
//방법1
Context initCtx = new InitialContext();
Context envCtx = (Context) initCtx.lookup("java:comp/env");
DataSource ds = (DataSource) envCtx.lookup("dbcp명");
 
//방법2
Context ic = new InitialContext();
DataSource ds = (DataSource) ic.lookup("java:comp/env/jdbc/mysql"); 

  con = ds.getConnection();
  Statement Stmt = con.createStatement();
  ResultSet Rs = Stmt.executeQuery("SELECT * from user;");
  Rs.next();
  out.println("회원수 : " + Rs.getString(1) + " 명"); 
%>
 
* tomcat 에서 JNDI 관련 에러메시지별 대처 방법
- Cannot load JDBC driver class 'com.mysql.jdbc.Driver', cause: com.mysql.jdbc.Driver 또는
       Null Pointer Exception '', cause: No suitable driver
   ==> 해당 jdbc 드라이버(위의경우 mysql 드라이버) 가 없기 때문입니다.
          해당 드라이버 파일을 $CATALINA_HOME/common/lib 디렉토리로 복사합니다.
    - Name xxxx is not bound in this Context
    ==> server.xml 과 web.xml 에서 해당 JNID가 설정되지 않은 경우입니다.
        server.xml 과 web.xml 에 JNDI resource 를 설정하고 이름을 동일하게 설정하도록 합니다.

댓글 없음: