JDBC란?
- 자바 어플리케이션과 데이터베이스 DBMS는 엄연히 다른 프로그램이다
- 다른 프로그램간에 데이터를 주고받기 위해서는, 통신과 프로토콜에 대한 정의가 필요하다
- Java 소스코드에서 관계형 데이터베이스에 SQL을 전달하고 결과를 받을 수 있게 표준 API 명세
- DBMS 종류에 관계없는 표준화된 API 제공
- 해당 명세를 실제 라이브러리로 구현한 것이
java.sql 라이브러리
- Mybatis 나 Hibernate ORM등의 라이브러리를 사용하더라도, DB에 접근할 때는 결국 내부적으로 JDBC API를 호출해 접근한다
Spring에서의 JDBC
<aside>
💡 Spring JDBC와 Spring Data JDBC는 완전히 다릅니다
Spring JDBC는 저수준 JDBC API를 쓰기 편하게 추상화한 것입니다. ORM은 아니고, 날쿼리를 그대로 문자열로 DB에 전달합니다
Spring Data JDBC는 ORM입니다
</aside>
-
JDBC 라이브러리인 java.sql 를 사용하기 위해서는, 개발자가 소스코드 내에서 연결 수행 및 해제를 전부 수행해야 합니다
- JDBC 드라이버 파일을 소스코드 내에 불러옴 → 연결을 획득하고(getConnection 호출) → Statement를 생성하고(createStatement 호출) → 쿼리 실행(executeQuery) → 연결 종료 (connection.close 호출)
-
스프링에서는 JDBC API를 추상화하여 JdbcTemplate 클래스를 제공한다.
- 번거로운 절차를 거칠 필요없이
JdbcTemplate.query() , JdbcTemplate.execute()메서드를 호출하기만 하면 쿼리가 수행된다
class CustomDao {
private JdbcTemplate jdbcTemplate
// 생성자 주입 방식으로 JdbcTemplate를 주입
public CustomDao(JdbcTemplate jdbcTemplate) {
this.jdbcTemplate = jdbcTemplate;
}
public List<Person> selectPersonOlderThan (int age){
String sql = "SELECT * FROM person WHERE age = ";
sql += age;
// query()메서드로 쉽게 쿼리 수행
List<Person> result = jdbcTemplate.query(sql,
new RowMapper( //... ));
return result;
}
}
- 그러나 여전히 쿼리를 소스코드 내에 작성해야 하고, 관리가 어렵다
Spring JDBC 실행 흐름
어플리케이션 실행 흐름

- 어플리케이션 전체 관점에서는, 위와 같은 순서로 DB에 접근하게 된다
- DAO
- 소스코드의 DAO에서 JDBC API Interface를 호출한다
- JDBC API Interface(=Spring JDBC)
- JDBC 드라이버의 메서드들을 추상화한 Java Interface 파일
- DAO소스코드와 JDBC 드라이버를 연결해 준다
- JDBC 드라이버
- JDBC API를 구현한 클래스 파일
- DBMS 회사별 구현체가 다를 수 있음! (Oracle JDBC, MySQL JDBC 등)
- DB에 쿼리를 전달하는 역할
JDBC 드라이버의 실행 흐름
- JDBC 드라이버는 쿼리를 DB에 전달하기 위해 아래와 같은 순서로 동작한다