jdbc
-
JDBC2023.10.25
JDBC
JDBC 이해
JDBC(Java Database Connectivity) : 자바에서 데이터베이스에 접속할 수 있도록 하는 자바 API 이다.
JDBC 가 등장한이유는 이전에는 각 DB를 사용하는 방법이 모두 달랐다.(커넥션 연결, SQL 전달, 결과 응답) 즉 Oracle DB를 사용하다 MySQL로 DB를 바꿔야 하면 애플리케이션 서버에 있는 코드또한 수정을 필요로했다.
따라서 JDBC를 활용해 자바에서 DB에 접근하는 방법을 통일했다.

즉 JDBC 표준 인터페이스를 정의한후 이 인터페이스만을 사용하여 DB에 접근하도록 했다.
이때 인터페이스의 구현체는 각 DB의 회사에서 라이브러리 형식으로 제공하며 이를 JDBC 드라이버 라고 한다.
❗️하지만 JDBC를 사용하더라도 SQL은 각각의 데이터베이스마다 사용법이 다르다. 즉 JDBC의 등장으로 JDBC코드는 변경을 하지 않아도 되지만, SQL은 해당 데이터 베이스에 맞도록 변경해야한다. SQL이 다른 문제는 JPA(Java Persistance API)를 사용하면 어느정도 해소가 가능하다.
최신 JDBC
최근엔 JDBC를 편리하게 사용하는 다양한 기술이 존재하며, 대표적으로 SQL Mapper와 ORM 기술이 있다.
- SQL MapperSQL Mapper를 사용하면 JDBC를 편리하게 사용할수 있지만, 개발자가 SQL을 직접 작성해야한다.
-
- ORM 기술ORM은 객체를 DB의 테이블과 매핑해준다. 이 덕에 개발자가 직접 SQL을 작성하지 않아도 ORM이 스스로 SQL을 동적으로 만들어 실행해준다. (DB마다 서로다른 SQL을 사용하는 문제도 중간에 해결해준다.)
-
❗️SQL Mapper 나 ORM을 사용하더라도 JDBC를 항상 사용한다. 따라서 JDBC의 기본 원리에 대해서 꼭 알아두어야 한다.
DB 연결및 DriverManager
DB에 연결하기 위해선 JDBC가 제공하는 DriverManager.getConnection(..)을 사용하면 된다.
public static Connection getConnection() {
try {
Connection connection = DriverManager.getConnection(URL, USERNAME, PASSWORD);
return connection;
} catch (SQLException e) {
throw new IllegalStateException(e);
}
}
이렇게 하면 라이브러리에 있는 DB 드라이버를 찾아 해당 드라이버가 제공하는 커넥션을 반환해 준다.
여기선 H2 DB 드라이버가 작동해 실제 DB와 커넥션을 맺고 그 결과를 반환한다.
즉 우리가 H2와 연결하기위해선 java.sql.Connection
interface를 구현하고있는 구현체(H2 커넥션)이 필요하다.
이 커넥션을 Connection connection = DriverManager.getConnection(URL, USERNAME, PASSWORD);
여기서 얻어온거고, 이 걸통해 db와 상호작용 할수 있는 것이다.
이때 어떻게 우리가 h2 의 드라이버를 로드할수 있을까? MySQL을 사용할수도 있고 그외 DB를 사용할수도 있다.
위 코드에서 우린 h2랑 연결한다는 어떠한 정보도 주지 않는것처럼 보인다.

JDBC가 제공하는 DriverManager는 라이브러리에 등록된 DB 드라이버를 관리하며, 커넥션을 획득하는 기능을 제공한다.
즉 DriverManager는 라이브러리에 등록된 드라이버 목록을 자동으로 인식하며, 이 드라이버들에게 정보를 넘겨 커넥션을 획득 할 수 있는지 확인한다.
아래와 같은 .yml
파일이 있다 가정한다.
spring.datasource.url=jdbc:h2:mem:testdb
spring.datasource.driver-class-name=org.h2.Driver
spring.datasource.username=sa
spring.datasource.password=
h2 DB를 사용한다는 가정하에 URL은 위에 보이는것 처럼 URL = "jdbc:h2:~~~"
이다. 이때 DriverManager는 해당 URL을 각각의 드라이버에게(h2, MySQL) 넘겨준후 해당 URL을 처리할수 있는 드라이버를 찾으면 해당 드라이버를 통해 실제 DB에 연결해 커넥션을 찾고 그 커넥션을 반환해 주는 것이다.
🙏Reference
'DB' 카테고리의 다른 글
트랜잭션(transaction) (1) | 2023.11.22 |
---|---|
커넥션 풀 및 데이터 소스 (0) | 2023.10.25 |
MySQL) 프로시저를 사용하여 더미 데이터 만들기 (0) | 2023.05.04 |
MySQL) 서버의 MySQL intellij로 연동하기 (0) | 2023.05.04 |
MySQL) ubuntu에 MySQL 설치 (0) | 2023.05.04 |