Connection 은 데이터베이스서버에 연결하기 위해 사용되어지는 객체이다.
객체는 새롭게 만들어질때 시스템의 자원(CPU, 메모리)의 많은 소모와 시간이 걸리게 된다.
DAO 클래스에서 생성되어지는 메소드(insert, select, update, delete 등)를 작성하려면 매번 Connection 객체 생성을 필요로 하게된다.
그런데 DAO 클래스의 메소드를 호출할때 마다 매번 Connection 객체를 생성해서 사용해야 한다는것은 시스템의 자원(CPU, 메모리)의 많은 소모와 시간이 걸리게 되므로, 이를 해결하기 위해 나온 방법이 Connection Pooling 기법이다.Connection Pool 은 미리 처음부터 여러개의 Connection 객체를 만들어 두고서 DAO 클래스의 메소드를 호출할때 마다 미리 만들어둔 Connection 객체를 공유해서 사용하는 것이다. Connection Pooling 기법을 사용하면 시스템의 자원(CPU, 메모리)의 절약과 더불어 시간을 절약할 수 있게 된다.
톰캣서버에서도 이러한 Connection Pooling 기법을 제공하고 있는데 이것을 자카르타톰캣 DBCP(DB Connection Pool)라고 부른다.
데이터 베이스와 연결될 커넥션을 미리 만들어서 풀(pool) 속에 저장해 두고 있다가
필요할 때에 커넥션을 풀에서 가져다 쓰고 다시 풀에 반환하는 기법을 의미한다.
(수영장에서 튜브를 빌려다 쓰는 것과 비슷한 개념이다.)
동시에 많은수의 접속자 처리를 하기 위해서는 커넥션의 갯수를 어떻게 조절할까?
커넥션 풀에 들어있는 커넥션의 갯수는 한정적이므로
커넥션 풀은 누군가 접속하면 커넥션 풀에 남아 있는 커넥션을 제공하는 방법으로 운영된다.
하지만 커넥션 풀에 남아있는 커넥션이 없을 경우 해당 클라이언트는 대기 상태로 전환이 되고,
커넥션이 반환되면 대기하고 있는 순서대로 커넥션이 제공된다.
그러므로 동시에 많은수의 접속자 처리를 하기 위해서는 WAS 서버의 물리적인 메모리(RAM)의
크기를 증설한후 server.xml에 maxActive 와 maxIdle 값을 적절하게 조절하면 된다.
<!-- MyDBCP Setting ========================================== -->
<!-- ========================================================= -->