커넥션풀이란 웹컨테이너(WAS)가 실행되면서 DB와 미리 연결해놓은 객체를 Pool에 저장해두는 방식을 말합니다.
클라이언트 요청이 오면, 커넥션을 빌려주고 처리가 끝나면 다시 커넥션을 반납받아 pool에 저장하는 방식을 말합니다.
이유
- JDBC로 커넥션 객체를 생성하게 되면 매 요청마다 드라이버를 로드하고 커넥션 객체를 생성하여 연결하고 종료해야합니다. 매우 비효율적이기 때문에 DBCP를 사용합니다.
특징
- WAS가 실행되면서 커넥션 객체를 미리 pool에 생성해둡니다.
- HTTP요청에 따라 pool에서 커넥션 객체를 가져다 쓰고 반환합니다.
- 위와같은 방식으로 데이터베이스간의 연결로 인한 부하를 줄일 수 있습니다.
- 커넥션 수를 제한적으로 설정하여 관리합니다.
동시 접속자가 많을 경우
- 커넥션이 다른 사용자로부터 반환될 때 까지 번호순대로 대기상태에 있습니다. 이후 커넥션객체를 받으면 사용하고 다시 반납합니다.
- 이때, WAS의 커넥션풀을 크게 설정하면 대기가 줄어듭니다. 다만, 너무 크게 설정할 경우 메모리 소모가 커진다는 단점이있습니다. 물론 너무 작아도 대기시간이 길어지기에 서비스에 따라 적절한 크기의 커넥션풀을 설정해야합니다.
→ 일반적으로 커넥션풀은 JEUS, Tomcat, SpringFramework 등과 같은 EJB컨테이너 혹은 프레임워크에서 기본적으로 제공합니다.