애플리케이션 서버에서 커넥션을 얻는 방법은 JDBC DriverManager를 직접 이용하여 사용할 때마다 커넥션을 얻는 방법, 커넥션 풀에서 커넥션을 가져다 쓰는 방법 등 여러 방법이 존재한다.
그렇다면 만약 내가 어플리케이션 서버에서 JDBC DriverManager를 사용하고 있다가 나중에 커넥션 풀을 이용한 방법으로 커넥션 획득 방법을 바꾸고자 한다면 어떻게 해야 할까?
아마 애플리케션 로직을 바꾸어야 할 것이다. JDBC DriverManager를 사용하는 방법과 커넥션 풀에서 커넥션을 가져오는 코드가 다르기 때문에 로직을 완전히 고쳐야 할 것이다. 이러한 문제를 해결하기 위해서 자바에서는 DataSource(javax.sql.DataSource)라는 인터페이스를 제공한다.
DataSource는 커넥션을 획득하는 방법을 추상화하는 인터페이스이다. 이 인터페이스의 핵심 기능은 커넥션 조회이다.
public interface DataSource extends CommonDataSource, Wrapper {
Connection getConnection() throws SQLException;
}
개발자는 DataSource 인터페이스에 의존하여 개발만 하면 된다. 커넥션 생성 방법을 바꾸고 싶을 때는 구현체만 갈아끼우면 된다. 그러나 DriverManager는 DataSource 인터페이스를 사용하지 않는다.
따라서 DriverManager를 사용하다가 DataSource 기반의 커넥션 풀을 사용하다록 변경하려면 관련코드를 다 고쳐야 하기 때문에 스프링은 DriverManager도 DataSource를 통해 사용할 수 있도록 DriverMangerDataSource라는 DataSource를 구현한 클래스를 제공한다.
개발자는 DataSource만 의존한 어플리케이션 로직을 구현하면 되기 때문에 커넥션 획득 방법이 바뀌어도 애플리케이션 로직을 바꿀 필요없이 구현체만 갈아끼우면된다.