Java 기반 애플리케이션의 코드 레벨에서 사용하는 데이터를 데이터베이스에 저장 및 업데이트 하거나 반대로 데이터베이스에 저장된 데이터를 Java 코드 레벨에서 사용할 수 있도록 해주는 Java에서 제공하는 표준 사양(명세,스펙)이다.
JDBC API를 사용하여 다양한 데이터베이스와 연동할 수 있다.
JDBC는 Java 기반의 애플리케이션에서 사용하는 데이터 엑세스 기술의 기본이 되는 저수준 API다.
직접 JDBC를 사용할 일은 거의 없지만 Spinrg data JDBC, JPA를 사용해서 데이터베이스와 연동하기 위해서는 내부적으로 JDBC를 이용하기 때문에 동작 흐름 정도는 이해하는 것이 좋다.
JDBC API를 사용하기 위해서 JDBC 드라이버를 먼저 로딩한 후에 데이터베이스와 연결한다.
데이터베이스와의 통신을 담당하는 인터페이스
Oracle, MySQL 같은 다양한 벤더에서, 해당 벤더에 맞는 JDBC 드라이버를 구현해서 제공하고, 이 JDBC 드라이버의 구현체를 이용해서 특정 벤더의 데이터베이스에 엑세스 할 수 있다.
DriverManager
클래스를 통해서 로딩된다.Connection
객체 생성DirverManager
를 통해 데이터베이스와 연결되는 세션인 Connection
객체를 생성한다.Statement
객체 생성Statement
객체는 작성된 SQL 쿼리문을 실행하기 위한 객체로, 객체 생성 후에 정적인 SQL 쿼리 문자열을 입력으로 가진다.Statement
객체를 이용해 입력한 SQL 쿼리를 실행한다.ResultSet
객체로부터 데이터 조회ResultSet
Statement
Connection
각 객체 closeJDBC API를 사용해서 데이터베이스와의 연결을 위한 Connection 객체를 생성하는 작업은 비용이 많이 드는 작업 중 하나이다.
따라서 애플리케이션 로딩 시점에 Connection 객체를 미리 생성해두고 애플리케이션에서 데이터베이스 연결이 필요한 경우, Connection 객체를 따로 생성하는 것이 아니라 미리 만들어 둔 Connection 객체를 사용함으로써 애플리케이션의 성능을 향상 시킬 수 있다.
데이터베이스 Connection을 미리 만들어서 보관하고 제공 및 관리 역할을 하는 관리자가 Connection Pool 이다.
Spring Boot 2.0부터는 HikariCP를 기본 DBCP로 채택했다.
Thread Pool 에서 클라이언트의 요청을 처리할 때 사용할 Thread들을 미리 만들어두었다가 요청이 오면 Thread를 제공, 다 쓰면 반환 하는 것과 비슷하다.