[Spring] 커넥션 풀과 DataSource
커넥션 풀
DB에서 커넥션 요청이 들어올 때마다 새 커넥션을 생성해서 반환해주는 과정을 거치면 생성부터 반환까지 전과정을 거치는데 시간이 오래 걸린다. 요청마다 새 커넥션을 만들지 말고 미리 여러개 만들어두고 요청이 들어올 때마다 제공할 수 있는데, 이렇게 커넥션을 관리하는 곳을 커넥션 풀이라고 한다. 모두 사용한 커넥션은 커넥션 풀에 반환하고 이렇게 반환된 커넥션은 재사용 가능하다.
DataSource
JDBC에서 커넥션을 얻을 때 DriverManager
을 거치는 방법이 있다. 이 때 커넥션 풀을 사용한다면 DBCP2
, HikariCP
등을 사용할 수 있겠으나 애플리케이션 로직을 각각에 의존하는 코드로 수정해줘야 한다는 번거로움이 존재한다. 이런 수고를 덜기 위해서 자바에서는 DataSource라는 인터페이스를 제공해 커넥션을 얻는 방법을 추상화했다.
public interface DataSource {
Connection getConnection() throws SQLException;
}
getConnection()
: 커넥션을 얻는 함수
때문에 DBCP2
, HikariCP
모두 DataSource
를 구현해 커넥션을 얻을 때는 getConnection()
를 호출해서 얻을 수 있다!
그래서 다른 커넥션 풀로 바꿔갈 때 애플리케이션 로직을 각 커넥션 풀에 의존하는 코드로 수정할 필요가 없게된다.
참고로 위에서 언급한 DriverManager
는 DataSource
를 구현하지 않았기 때문에 getConnection()
으로 커넥션을 얻지 못한다.
대신에 DriverManagerDataSource
는 DataSource
를 구현한 클래스로 DBCP2
, HikariCP
처럼 같은 방식으로 커넥션을 얻을 수 있다.
댓글남기기