
Connection을 통해 DB에 전달한다.
JDBC API는 자바에서 DB에 접속할 수 있도록하는 자바 API, 즉 JDBC를 쉽게 사용할 수 있도록 한 클래스와 라이브러리의 집합이다. 사실 JDBC API를 JDBC라고 통칭하여 부르기도 한다.
JDBC는 DB 접근 방법을 표준화해서 DB Driver가 변경되더라도 코드단에는 영향을 주지 않는다. 개발자는 JDBC Interface에만 의존해서 코드를 작성하면 되기 때문이다. JDBC Interface의 구현체는 각 DB가 라이브러리로 제공하는데, 이를 DB Driver라고 한다.
📌DB Driver?
DB Driver는 DBMS와 통신을 담당하며, DBMS별로 각각 다른 DB Driver가 존재한다.
DB Driver 라이브러리를 추가하면 JDBC Driver Manager가 해당 드라이버를 찾아 Connection을 연결해준다.
정리하자면 개발자는 JDBC 표준 인터페이스에만 의존하여 코드를 작성하고, DB를 변경하려면 변경할 DB Drvier 라이브러리를 추가하기만 하면 된다.
대표적으로 다음 3가지 JDBC 표준 인터페이스가 있다.
java.sql.Connection- 연결java.sql.Statement- SQL을 담은 내용java.sql.ResultSet- SQL 요청 응답
JDBC Driver Manager는 라이브러리로 등록된 DB Driver를 관리하고, DB Connection을 획득하는 역할을 한다. Driver Manager는 라이브러리에 등록된 Driver 목록을 자동으로 인식하고, 이 드라이버들에게 순서대로 DB 접속 정보(URL, USERNAME, PASSWORD 등)를 전달해 커넥션을 획득할 수 있는지 확인한다. 적절한 Driver를 찾아 그 구현체를 클라이언트에게 반환한다.
(현실에서 JDBC를 직접 사용하는 건 복잡하기 때문에, JDBCTemplate, MyBatis, JPA(ORM)를 사용한다.)
위에서 언급했듯이 JDBC를 직접 사용하는 것은 매우 복잡하다.
JDBC Template, MyBatis가 있다.
H2 Database로 DB 연결하는 과정을 코드로 살펴보겠다.
public static Connection getConnection() {
try {
Connection connection = DriverManager.getConnection(URL, USERNAME, PASSWORD);
log.info("get connection={}, class={}", connection, connection.getClass());
return connection;
} catch (SQLException e) {
throw new IllegalStateException(e);
}
}
Connection을 반환Connection은 인터페이스이고, getConnection()을 통해 가져온 것은 Connection의 구현체이다.
java.sql.Connection 인터페이스를 정의한다. (java.sql.Connection JDBC API 중 하나의 인터페이스이다.)H2 DB Driver는 java.sql.Connection 인터페이스를 구현한 org.h2.jdbc.JdbcConnection를 제공한다.
앞서 다뤘듯이, `DriverManager`는 라이브러리에 등록된 `DB Driver`를 관리하고, 커넥션을 웹서버에 제공한다.