Spring JDBC 03 - JDBC DrivenManager

DrivenManager?

  • DrivenManger는 JDBC 드라이버를 통하여 커넥션을 만드는 클래스이다.
    • 쉽게 말하면 그냥 JDBC에서 커넥션을 위한 객체이다.
  • Class.forName()으로 특정 클래스를 로딩하면 자동으로 객체가 생성되고 DrivenManager에 등록된다.
  • 드라이버 클래스를 찾지 못한경우 ClassNotFoundException을 발생시키므로 반드시 예외처리를 해야한다.
  • 자바는 이렇게 표준 인터페이스를 정의해두었고 개발자는 이 표준 인터페이스만 사용해서 개발을 하면 된다.
  • 이것을JDBC 드라이버라고 한다. MySQL에 접근할 수 있는 것은 MySQL JDBC 드라이버라고 하고, Oracle DB에 접근할 수 있는 것은 Oracle JDBC 드라이버라고 한다.

공통화에 한계

  • JDBC의 등장으로 많은 것들이 편리해졌지만 각각의 데이터베이스마다 SQL, 데이터타입 등의 일부 사용법이 다르다.
  • ANSI SQL 표준이라는 것이 있긴 하지만.. 하지만 일반적인 부분만 공통화했어서 한계가 있다. 그래서 데이터베이스를 변경하면 JDBC 코드는 변경하지 않아도 되지만 SQL은 해당 데이터베이스에 맞도록 변경해야 한다.
    • 이 부분들을 또 공통화 시키기 위해서 JPA가 등장했다고 생각하면 된다.

DrivenManagerDataSource

대부분의 커넥션 풀은 DataSource 인터페이스를 이미 구현해두었다. 따라서 개발자는 DBCP2 커넥션 풀 , HikariCP 커넥션 풀 의 코드를 직접 의존하는 것이 아니라 DataSource 인터페이스에만 의존하도록 애플리 케이션 로직을 작성하면 된다. 커넥션 풀 구현 기술을 변경하고 싶으면 해당 구현체로 갈아끼우기만 하면 된다. DriverManagerDataSource 인터페이스를 사용하지 않는다. 따라서 DriverManager 는 직접 사용해야 한다. 따라서 DriverManager 를 사용하다가 DataSource 기반의 커넥션 풀을 사용하도록 변경하면 관련 코드를 다 고쳐야 한다. 이런 문제를 해결하기 위해 스프링은 DriverManagerDataSource 를 통해서 사용할 수 있도록 DriverManagerDataSource 라는 DataSource 를 구현한 클래스를 제공한다.

image

  • DriverManager 는 커넥션을 획득할 때 마다 URL , USERNAME , PASSWORD 같은 파라미터를 계속 전달해야한다. 반면에 DataSource 를 사용하는 방식은 처음 객체를 생성할 때만 필요한 파리미터를 넘겨두고, 커넥션을 획득할 때는 단순히 dataSource.getConnection() 만 호출하면 된다.

작은 단위로 분리

  • 설정과 사용이라는 관점으로 분리하는 것을 목표로 한다.
  • DataSource는 설정이라는 역할로 DataSource 를 만들어 두는 것을 말한다 (URL, USERNAME, PASSWORD와 같은 정보들을 말한다.
  • 설정은 신경쓰지 않고, DataSourcegetConnection() 만 호출해서 사용하면 된다.

Reference

김영한님의 스프링 강의 정리



© 2022. by taewoo

Powered by taewoo