개발자/JSP
[JDBC] DBCP(DataBase Conncetion Pool)
푸루닉
2022. 12. 12. 13:57
커넥션풀이란?
- 여러 개의 DB Connection을 하나의 Pool에 모아놓고 관리
- DB 커넥션 객체를 여러 개 생성한 뒤 Pool에 담아놓고 필요할 때 불러와서 사용
- 만약, 빌려줄 수 있는 Connection이 없다면 Connection 객체가 반환할 때 까지 클라이언트는 대기 상태로 전환
- 사용이 끝난 커넥션 객체는 다른 작업에서 다시 사용할 수 있도록 Pool에 반환
close를 통해 반환.
DBCP가 필요한 이유
웹 어플리케이션은 CRUD와 같은 작업을 처리할 때 주로 데이터베이스를 이용합니다.
DBMS나 기타 외부와의 접속이 빈번하게 필요한 시스템에는 반드시 존재해야 하는 기능인데 데이터베이스와 Connection을 맺는 작업은 매우 느리며 자원을 많이 소모하는 작업입니다.
이와 같이 서버가 물리적으로 데이터베이스 서버에 연결되어 Connection을 맺는 작업은 비용이 큰 부분 입니다.
만약, 다수의 사용자들이 동시다발적으로 데이터베이스의 Connection 연결을 요청한다면 최악의 경우 서버가 다운이 될 수 있습니다.
위 사진과 같이 Pool을 만들어서 미리 생성한 여러 Connection 객체를 담아두고 클라이언트가 요청할 때 마다 하나씩 빌려줍니다.
클라이언트가 사용을 마친 후에는 Pool에 다시 Connection 객체를 반환하기 때문에 데이터베이스 접근 요청이 존재하더라도 새로운 Connection 객체를 생성할 필요가 없습니다.
앞에서 말씀드린 대로 다수의 사용자들이 동시다발적으로 요청해서 Pool에 빌려줄 수 있는 커넥션이 존재하지 않는 경우에는 에러가 발생하지 않고 다른 클라이언트가 커넥션을 Pool에 반환할 때까지 요청한 클라이언트는 대기상태로 전환이 됩니다.
그 후 다른 클라이언트가 커넥션을 반환하면, 대기상태인 클라이언트가 해당 커넥션을 사용하는 구조로 되어있습니다.