서버에서 데이터베이스 커넥션을 얻는 과정은 복잡하고 시간이 많이 소모된다. DB와 애플리케이션 서버에서도 TCP/IP 커넥션을 새로 생성하기 위한 리소스를 매번 사용해야 한다.
따라서 클라이언트가 어플리케이션을 사용할 때, 요청한 sql 문을 실행하는 시간 + 커넥션을 만드는 시간이 들어 응답시간이 늘어난다.
이 문제를 커넥션 풀이라는 방법을 이용해 해결할 수 있다.
커네션 풀이란 커넥션을 미리 생성해두고 사용하는 방법이다. 애플리케이션을 시작하는 시점에 커넥션 풀은 필요한 만큼 커넥션을 확보해서 풀에 보관한다. 갯수는 서버마다 서비스마다 다르지만 기본값은 보통 10개이다.
커넥션 풀에 있는 커넥션은 DB와 커넥션이 연결되어 있는 상태이기 때문에 언제든지 즉시 SQL을 DB에 전달할 수 있다.
어플리케이션 로직에서 DB 드라이버를 통해 새로운 커넥션을 획득하는 것이 아니랄 이미 생성되어 있는 커넥션 풀에 있는 커넥션을 참조해서 사용하면 된다. 로직에서 커넥션 풀에 커넥션을 요청하면 풀에서 커넥션 하나를 반환해준다.
반환된 커넥션을 이용하여 SQL을 DB에 전달하고 결과를 받아 처리한다. 커넥션을 다 사용하고 나면 커넥션을 종료하는 것이 아니라 커넥션 풀에 다시 반납한다.
커넥션 풀을 기본으로 사용하는데 직접 구현해서 사용할 수도 있지만, 성능이 뛰어난 오픈소스가 많이 때문에 오픈소스를 사용한다.
대표적으로 commons-dbcp2, tomcat-jdbc pool, HikariCP 등이 있다. 이 중 HikariCP를 많이 사용하는데 스프링 부트 2.0부터는 기본으로 hikariCP를 제공한다.