Connection Pool
DBCP (database connection pool)
웹 컨테이너(WAS)가 실행되면서 DB와 미리 연결해놓은 객체들을 pool에 저장해두었다가 클라이언트 요청이 오면 connection을 빌려주고 처리가 끝나면 다시 connecrion을 반납받아 pool에 저장하는 방식
왜 필요할까?
DB를 접속할때가 가장 부하가 많이 걸린다.
그래서 DB 접근할때마다 연결 / 연결끊기를 하는게 아니라 미리 Pool에다 여러개 연결을 해 놓은 후 필요할 때마다 연결을 빌린 후 반납 한다
특징
- 웹 컨테이너가 실행되면서 connection 객체를 미리 pool에 생성
- HTTP 요청에 따라 pool에서 connecrion 객체를 가져다 쓰고 반환
- 물리적인 db 연결 부하를 줄이고 연결을 관리한다
- pool에 미리 connecrion이 생성되어 있기 때문에 connecrion을 생성, 연결시간이 소비되지 않는다
- connecrion을 계속해서 재사용하기 때문에 생성되는 connecrion 수를 제한적으로 설정할 수 있다.
그럼 connecrion pool이 많으면 좋은걸까?
- pool에서 미리 생성된 connection을 제공하고 없을 경우는 사용자는 connection이 반환될 때까지 번호순대로 대기상태로 기다린다.
- 여기서 WAS에서 커넥션 풀을 크게 설정하면 메모리 소모가 큰 대신 많은 사용자가 대기시간이 줄어들고, 반대로 커넥션 풀을 적게 설정하면 그 만큼 대기시간이 길어진다.
종류
commons-dbcp
tomcat-jdbc-pool
- tomcat
- tomcat에 내장되어 사용되고 있다
- Apache Commons DBCP 라이브러리를 바탕으로 만들어짐
HikariCP
- HicariCP
- 스프링부트 2.0부터 default JDBC connecrion pool임
- zero-overhead
- overhead : 어떤 처리를 하기 위해 들어가는 간접저긴 처리시간 메모리
참고 사이트
[Spring] 커넥션 풀(Connection pool)이란?