본문 바로가기
WEB/JSP Servlet

커넥션 풀

by 노랑파랑 2016. 12. 6.
반응형




커넥션 풀

▷ 데이터베이스와 연결된 커넥션을 미리 만들어 풀(Pool)속에 저장해 두고 있다가 필요할 때 커넥션 풀에서 가져다 쓰고 

다시 커넥션 풀에 반환하는 기법

▷ 풀 속에 데이터베이스와 연결된 커넥션을 미리 생성해 놓고, 데이터베이스 커넥션이 필요할 때마다 생성해놓은 커넥션을 가져다 사용하고

사용이 끝나면 풀에 다시 가져다 놓는다.






커넥션 풀 특징

▷ 미리 커넥션을 생성해 놓기 때문에 커넥션을 생성하는 데 드는 연결 시간을 줄일 수 있다. -> 웹 어플리케이션의 속도 향상

▷ 커네션을 계속해서 재사용하기 때문에 생성되는 커넥션 수가 일정하다. -> 동시 접속자 수가 몰려도 쉽게 다운되지 않는다.






커넥션 풀 라이브러리 

▷ 오픈소스 DBCP API 다운로드

commons DBCP API : https://commons.apache.org/proper/commons-dbcp/download_dbcp.cgi

commons Pool API : https://commons.apache.org/proper/commons-pool/download_pool.cgi

commons Logging API : https://commons.apache.org/proper/commons-logging/download_logging.cgi


다운 받은 zip 파일의 압출을 풀고 폴더 안의  jar파일을 웹 프로젝트의 WEB-INF/lib 폴더에 복사한다.






커넥션 풀 초기화 서블릿 클래스

▷ https://github.com/madvirus/jsp23/blob/master/eclipse/chap14/src/jdbc/DBCPInit.java


▷ 커넥션 풀 초기화 서블릿 등록 

웹 어플리케이션을 구동할 때 이 서블릿을 실행 할 수 있도록 web.xml에 등록한다.

<servlet>

<servlet-name>서블릿 이름(DBCPInit)</servlet-name>

<servlet-class>클래스(jdbc.DBCPInit)</servlet-class>

<load-on-startup>1</load-on-startup>

</servlet>






커넥션 풀 사용

▷ PoolingDriver : 커넥션 풀을 위한 JDBC 드라이버

▷ 커넥션 풀 초기화 서블릿에서 등록한 커넥션 풀 이름을 사용한다.

Class.forName("org.apache.commons.dbcp2.PoolingDriver");

PoolingDriver driver = (PoolingDriver) DriverManager.getDriver("jdbc:apache:commons:dbcp");

driver.registerPool("커넥션풀 이름",connectionPool);

▷ 커넥션 풀 사용

Connection conn = null;

try {

String jdbcurl = "jdbc:apache:commons:dbcp:커넥션풀이름");    //커넥션 풀에서 커넥션을 구함

conn = DriverManager.getConnection(jdbcurl);

...

} finally{

if(conn != null) 

try{ 

conn.close();        // 커넥션을 풀에 반환 

} catch(SQLException ex){}

}







커넥션 풀 속성

▷ GenericObjectPoolConfig 클래스 커넥션 개수와 대기 관련 메소드    

메소드 

기본값

설명 

setMaxTotal(int) 

풀이 관리하는 커넥션의 최대 개수를 설정한다. 음수면 제한이 없다. 

setMaxIdle(int) 

커넥션 풀이 보관할 수 있는 최대 유휴 개수를 지정한다. 음수면 제한이 없다. 

setMinIdle(int) 

커넥션 풀이 유지할 최소 유휴 커넥셩 개수를 지정한다. 값이 MaxIdle보다 크녕 MaxIdle을 MinIdle 값으로 사용한다. 

setBlockWhenExhausted(boolean) 

true 

풀이 관리하는 커넥션이 모두 사용중인 상태일 때 커넥션을 요철할 때 풀에 너켁션이 반환될 때까지 대기 할지의 여부를 지정한다. true=대기, false=NoSuchElementException 발생 

setMaxWaitMilis(long) 

-1L 

BlockWhenhasueted가 true일 때, 최대 대기 시간을 설정한다. 음수면 풀에서 커넥션을 구할 수 있을 때까지 대기한다. 단위는 밀리초 



▷ GenericObjectPoolConfig 클래스 유휴 커넥션 제거 및 검사 관련 메소드

메소드 

기본값 

설명 

setTimeBetweenEvictionRunsMilis(long) 

-1L 

풀에 있는 유휴 커넥션 검사 주기를 설정. 음수면 검사하지 않는다. 단위는 밀리초 

 setNumTestsPerEvictionRun(int)

각 주기 때마다 검사할 커넥션의 개수를 설정한다. 음수면 유휴 커넥션 개수를 검사 개수의 절대값으로 나눈 갑슬 사용한다. 

setMinEvictableIdleTimeMilis(long) 

1800000L 

풀에 머물 수 있는 최소 유휴 시간을 설정한다. 커넥션을 검사할 때 이 시간을 초과한 커넥션이 제거 대상이 된다. 이 시간이 양수가 아니면 유휴 시간으로 검사하지 않는다. 단위는 밀리초 

setTestWhileIdle(boolean) 

false 

true면 유휴 커넥션이 유효한지 검사한다. 

setTestOnBorrow(boolean) 

false 

true면 커넥션 풀에서 커넥션을 가져올 때 유효한지 검사한다. 

setTestOnReturn(boolean) 

false 

true면 커넥션을 풀에 반환할 때 유효한지 검사한다. 



▷ PoolableConnectionFactory 클래스 커넥션 검사 기능 관련 메소드

메소드 

기본값 

설명 

setMaxConnLifetimeMilis(long) 

-1L 

커넥션의 최대 사용 시간을 설정한다. 커넥션을 생성한 뒤 최대 사용 시간이 지나면 유효하지 않는 것으로 간주한다. 양수가 아니면 적용하지 않는다.  단위는 밀리초

 setValidationQuery(String)

 

커넥션을 검사할 때 사용할 쿼리를 설정한다. 



반응형

'WEB > JSP Servlet' 카테고리의 다른 글

필터  (0) 2016.12.09
JDBC : 트랜잭션  (0) 2016.12.06
MVC 패턴과 모델  (0) 2016.11.22
서블릿 : 초기화  (0) 2016.11.22
서블릿 : 기본  (0) 2016.11.21