Connection Pool(DBCP) 이란?
- Database Connection Pool의 약자로 데이터베이스와 Connection을 맺고 있는 객체를 관리하는 역할을 담당한다.
Connection Pool 사용 이유
- JDBC를 통해 데이터베이스에 연결하기 위해서 드라이버를 로드하고 Connection 객체를 받아와야 한다.
- JDBC를 사용하면 클라이언트가 요청할 때 마다 매번 드라이버를 로드하고 Connection 객체를 생성하여 연결하고 종료하기 때문에 비효율적이다.
Connection Pool(DBCP)
- 웹 컨테이너(톰캣 등)가 실행되면서 Connection객체를 미리 Pool을 만들어서 일정 개수를 생성해 저장한다.
- 클라이언트로부터 요청이 발생하면 Connection 객체를 필요할때마다 사용한다.
- 클라이언트와 연결이 종료되면 다시 Pool에 반환하여 보관한다.

- 미리 생성해두기 때문에 데이터베이스에 부하를 줄이고 유동적으로 관리할 수 있다.
- Connection을 재사용하기 때문에 생성되는 Connection 개수를 설정할 수 있다.
- 접속하는 사용자만큼 Connection 객체를 생성하여 사용하게 되므로 시스템 부하를 주어서 사용자가 많을 경우 필수적이다.
- Connection Pool을 크게 설정하면 메모리 소모가 큰 대신에 많은 사용자의 대기 시간이 줄어든다
- Connection Pool을 작게 설정하면 그만큼 대기시간이 길어진다.
Connection Pool 사용 방법
- Servers/서버(Tomcat)/server.xml 에 들어간다.

- Context 태그 내에서 설정하려는 프로젝트를 찾는다.(여기선 프로젝트 이름 : DataBase)
- Resource 태그 내에서 Connection Pool 설정

<Context docBase="DataBase" path="/DataBase" reloadable="true" source="org.eclipse.jst.jee.server:DataBase">
<Resource auth="Container" driverClassName="oracle.jdbc.driver.OracleDriver" loginTimeout="10" maxWait="5000"
name="jdbc/pool" password="1234" type="javax.sql.DataSource" url="jdbc:oracle:thin:@localhost:1521:XE" username="sys as SYSDBA"/>
</Context>
- name : 이름. (임의로 설정)
- auth : 관리자 Container가 관리.(웹 서버)
- type : 무슨 타입을 쓸 것인가. javax.sql.DataSource라는 클래스를 이용해 Connection Pool 사용
- driverClassName : 어떤 DB를 쓸 것인가. (여기선 Oracle)
- maxWait : Connection을 열기 위해 최대로 기다리는 시간
- url : DB 접속 경로
- DAO Connection Pool 설정
public class DAO {
Connection con; //db에 접근할 수 있도록 설정
public void getCon() { //db에 접근할 수 있도록 도와주는 메소드
try {
//외부에서 데이터를 읽어드려야돼서 Context 사용
Context initctx = new InitialContext();
//톰캣 서버에 정보를 담아놓은 곳으로 이동
Context envctx = (Context) initctx.lookup("java:comp/env"); //자바 환경설정
//데이터소스 객체 선언. Resource name 값을 찾아옴.
DataSource ds = (DataSource) envctx.lookup("jdbc/pool");
//데이터 소스를 기준으로 커넥션을 연결
con = ds.getConnection();
}catch(Exception e) {
e.printStackTrace();
}
} //getCon end
} //DAO end
참고
- 인프런 JSP 웹 쇼핑몰 프로그래밍 기본 과정(JSP WEB Programming)