DBCP란?


데이터 베이스에 연결하여 사용하는 경우 데이터 베이스에 접속하기 위해 Connection 등의 객체를 생성해야 한다.

이게 혼자서 쓸 때는 접속 할 때마다 객체를 생성해도 괜찮지만 사람들이 많이 접속하는 사이트에서는 사용자 한 명당 하나씩 계속 객체를 생성하게 되면 서버가 객체를 생성하는데 리소스를 많이 쓰게 된다.

이러한 현상을 해결하고자 '커넥션 풀'이라는 공간을 만들어 커넥션 객체들을 담아놓고 차후 사용자가 데이터 베이스에 접속을 시도하면 커넥션 풀에 담겨있는 커넥션 객체를 하나하나 꺼내주는 방법을 적용시켰다.

이것이 바로 DBCP(DataBase Connection Pool)이다.



만들어보기


파일 위치는 %DynamicWebProject%/WebContent/META-INF


context.xml


<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE Context>
<Context>
 <Resource name="jdbc/OracleDB"
  auth="Container"
  type="javax.sql.DataSource"
  username="(데이터 베이스 접속 이름)"
  password="(데이터 베이스 비밀번호)"
  driverClassName="oracle.jdbc.driver.OracleDriver"
  factory="org.apache.tomcat.dbcp.dbcp2.BasicDataSourceFactory"
  url="jdbc:oracle:thin:@(접속 주소):(접속 이름)"
  initialSize = "(최초 만들 갯수)"
  maxTotal="(객체 최대 갯수)"
  maxIdle="(최대 유휴 연결 갯수)"
  minIdle="(최소 유휴 연결 갯수)"

  />
</Context>



[자바 부분 소스]

DataSource dataSource

   = (DataSource) new InitialContext().lookup("java:comp/env/jdbc/OracleDB");

   return dataSource.getConnection();




p.s

참고로 커넥션 풀에서 가져온 커넥션 객체를 .close()로 닫으면 커넥션 풀에서 가져온 하나의 객체만 닫게 된다. 

절대 커넥션 풀 전체의 커넥션 객체 전부를 닫지 않으니 안심해도 된다.





ref.

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

http://tomcat.apache.org/tomcat-8.5-doc/jndi-datasource-examples-howto.html#Oracle_8i,_9i_&_10g

+ Recent posts