데이터베이스 커넥션을 매번 획득
애플리케이션 로직을 수행할 때마다 DB 커넥션을 새로 생성하는 것은 시간을 너무 많이 소모하고 리소스도 너무 많이 소모한다.
커넥션 풀을 사용하면 이런 문제를 해결할 수 있다.
커넥션 풀
애플리케이션 시작 시점에 미리 여러 개의 커넥션을 생성하여 풀에 저장해둔다.
애플리케이션은 필요에 따라 풀에서 커넥션을 꺼내서 사용한다.
사용을 마친 커넥션은 다시 풀에 반납한다.
HikariCP
만약, DriverManager를 사용해 커넥션을 획득하다가 커넥션 풀을 사용해 커넥션을 획득하는 방식으로 변경하면 어떻게 될까?
DriverManager에 의존하던 애플리케이션 서버 코드를 커넥션 풀에 의존하도록 모두 다 바꿔야 한다.
커넥션 획득 방식의 추상화
javax.sql.DataSource
라는 인터페이스를 통해 커넥션 획득 방식을 추상화 해두었다.public interface DataSource {
Connection getConnection() throws SQLException;
} // 커넥션 조회가 DataSource 인터페이스의 핵심
DriverManager 사용법
DriverManager.getConnection(URL, USERNAME, PASSWORD);
DriverManager.getConnection(URL, USERNAME, PASSWORD);
DriverManagerDataSource 사용법
DriverManagerDataSource dataSource = new DriverManagerDataSource(URL, USERNAME, PASSWORD);
Connection con1 = dataSource.getConnection();
Connection con2 = dataSource.getConnection();
DriverManager vs DriverManagerDataSource
설정과 사용의 분리