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
를 제공한다.