최근 DB Connection으로 인해 어려움을 겪었었다.
어려움을 겪으면서 Connection에 대해서 공부를 하던 중 JDBC와 DBCP 2개의 키워드를 알게 되었다.
JDBC에 대한 개념은 이전부터 많이 들었었는데, DBCP란 어떠한 개념인지 그리고 이 둘은 어떠한 차이점을 가지고 있는지를 중점으로 글을 작성 해보고자 한다.

JDBC(Java Database Connectivity)란 자바에서 데이터베이스에 접근할 수 있도록 해주는 API이다.
해당 API에서는 RDBMS에서 데이터를 쿼리하거나 업데이트 하는 방법을 제공한다.
JAVA 프로그램에서는 위 사진에서와 같이 JDBC 드라이버를 통해 데이터베이스에 연결하고 이 드라이버는 데이터베이스에 대한 모든 세부 사항을 처리한다.
이로써 DB에 대한 추상화가 가능하다.
spring-boot-starter-jdbc→ Spring boot에서 JDBC를 더 쉽게 사용할 수 있게 도와주는 starter이다.
→ 이를 통해 데이터베이스 Connection Pool과 같은 JDBC 관련된 빈들을 자동으로 설정해준다.
JDBC 주요 객체
DatasourceConnectionStatementResultSet처리 과정


DBCP는 애플리케이션이 시작될 때 미리 여러 개의 데이터베이스 커넥션을 커넥션풀(Connection Pool)에 생성해 놓고 필요할 때마다 사용 후 반환하여 이를 재사용 할 수 있게 해준다.
→ 실제 DB와 커넥션을 맺는 작업은 비용이 큰 작업이다.
이 때 애플리케이션은 Spring을 칭한다.
최초 커넥션 풀 생성시 처리 과정

Spring boot에서는 DBCP인 HikariCP가 수행되어서 ConnectionPool을 생성한다.
spring-boot-starter-data-jdbc를 통해 데이터베이스와 통신을 한다. 또한 JDBC 내장으로 DBCP(=HikariCP)를 포함하고 있다.
2. Connection Pool을 생성한다.
DBCP에서는 JDBC를 사용하여 데이터베이스와 연결하고, 연결을 관리한다.
JDBC만 사용할 경우에는 DB 접속 시에 JDBC 드라이버 로드, DB 커넥션 획득 등의 과정을 거쳐야 하는데 DBCP의 커넥션 풀을 통해 이 과정을 효율적으로 줄일 수 있다.