DataSource 이해

Minseo Kang·2023년 3월 21일
0
post-thumbnail

01. 커넥션을 획득하는 다양한 방법



커넥션 획득

  • JDBC DriverManager 사용
  • 커넥션 풀 사용



02. DriverManager를 통한 커넥션 획득



DriverManager로 커넥션 획득하다가, 커넥션 풀을 사용하는 방법으로 변경한다면?




03. 커넥션 풀을 통한 커넥션 획득



문제 발생

  • 애플리케이션 로직에서 DriverManager 사용하여 커넥션 획득하다가 HikariCP 같은 커넥션 풀을 사용하도록 변경
  • 커넥션을 획득하는 애플리케이션 코드도 함께 변경해야 함
  • 의존관계가 DriverManger에서 HikariCP로 변경되기 때문



04. 커넥션을 획득하는 방법을 추상화



문제 해결

  • 자바는 이러한 문제를 해결하기 위해 javax.sql.DataSource 인터페이스 제공
  • DataSource는 커넥션을 획득하는 방법을 추상화하는 인터페이스
  • 이 인터페이스의 핵심 기능은 커넥션 조회 기능 하나
  • 다른 일부 가능도 존재하지만 크게 중요치 않음



05. 정리


DataSource

  • 대부분의 커넥션 풀은 DataSource 인터페이스를 이미 구현함
  • 개발자는 DBCP2 커넥션 풀, HikariCP 커넥션 풀의 코드에 직접 의존하는 것이 아니라 DataSource 인터페이스에만 의존하도록 애플리케이션 로직을 작성하면 됨
  • 커넥션 풀 구현 기술을 변경하고 싶으면 해당 구현체로 바꾸면 됨
  • DriverManagerDataSource 인터페이스를 사용하지 않음
  • DriverManager은 직접 사용해야 함
  • DriveerManager를 사용하다가 DataSource 기반의 커넥션 풀을 사용하도록 변경하면 관련 코드를 모두 고쳐야 함
  • 이런 문제를 해결하기 위해 스프링은 DriverManagerDataSource를 통해서 사용할 수 있도록 DriverManagerDataSource라는 DataSource를 구현한 클래스를 제공
  • 자바는 DataSource를 통해 커넥션을 획득하는 방법을 추상화 함
  • 애플리케이션 로직은 DataSource 인터페이스에만 의존하면 됨
  • DriverManagerDataSource를 통해 DriverManger를 사용하다가 커넥션 풀을 사용하도록 코드를 변경해도 애플리케이션 로직은 변경하지 않아도 됨

0개의 댓글