Spring DB : DataSource 이해

    이 글은 인프런 김영한님의 강의를 복습하며 작성한 글입니다. 

    커넥션을 얻는 방법의 추상화

    앞서서 DB와 통신을 하는데 있어서 반드시 커넥션이 필요하다는 것을 확인했다. 그리고 그 커넥션을 얻기 위해 Driver Manager를 통해서 얻는 방법, 커넥션 풀을 통해서 얻는 방법이 있는 것도 확인했다. 그리고 커넥션 풀 인터페이스를 구현한 수많은 커넥션 풀 구현체들이 있다. 이 이야기를 하는 이유는 커넥션을 얻는 방법이 너무나 다양하다는 것이다.

    커넥션을 얻는 방법이 여러가지이기 때문에 각 방법마다 커넥션을 얻기 위해 다른 코드가 요구된다. 이런 경우 내가 사용하고 있는 기술이 조금만 변경될 경우, 매번 코드를 수정해야 하는 일이 발생한다. 이것을 개선하기 위해 커넥션을 얻는 방법의 추상화가 필요하다. 

     

    DataSoruce 

    DataSource 들어가기 전

    앞서 이야기 한 것처럼 커넥션을 얻는 방법은 다양한 방법이 존재한다. 따라서 커넥션을 얻는 방법의 추상화가 필요하다. 위의 그림을 한번 보자

    1. DriverManager를 통해 커넥션을 생성해서 가져온다.
    2. 커넥션 풀에서 커넥션을 조회해서 사용한다.

    위의 두 가지 방법은 커넥션을 얻기 위한 과정도 다르고, 그 과정이 다르기 때문에 코드까지 달라진다. 즉, 사용하는 기술이 바뀌게 되면 어플리케이션에서 커넥션을 얻기 위한 코드까지 수정이 되어야 한다는 점이다. 이처럼 커넥션을 획득 하는 방법의 추상화가 필요하다. 

     

    DataSource : 커넥션 획득 방법의 추상화 

    커넥션 획득 방법의 추상화가 필요했다. 그래서 자바는 'DataSource'라는 인터페이스를 도입해서 커넥션 획득 방법을 추상화시켰다. 어플리케이션 로직은 DataSource 인터페이스를 의존성 주입받고 getConnection()이라는 메서드를 이용해 커넥션을 받아오는 방법을 추상화 시킨 것이다. 

     

    DataSource 정리

    1. 대부분의 커넥션 풀은 DataSource 인터페이스를 이미 구현해두었다. 따라서 개발자는 DataSource 인터페이스에 의존하면 된다.
    2. DrvierManager는 DataSource를 구현하지 않았다. 이 문제를 해결하기 위해 Spring은 DriverManagerDataSource라는 구현 클래스를 제공해준다. 
    3. 자바는 DataSource 인터페이스를 제공해 커넥션을 얻는 방법을 추상화했다. 이제 커넥션을 이용하는 방법을 바꾸더라도 어플리케이션 로직에 코드를 변경하지 않아도 되게 되었다. 

    댓글

    Designed by JB FACTORY