공간정보아카데미

[JDBC 커넥션 풀] DBCP2 vs hikariCP vs c3p0

minjava 2025. 9. 2. 19:12

서버와 DB 연결 방식

1. 요청마다 새 커넥션 맺는 방법

2. 커넥션 풀링 : 서버가 미리 DB와 연결해놓고 연결해놓은 커넥션을 하나씩 맺어주는 방법

 

커넥션 풀

- 웹서버에서 DB를 사용하기 위해 DB를 연결해놓은 커넥션들을 저장해놓은 장소

- 서버 시작시 DB와 미리 일정 개수의 연결을 확보해 둠. -> 요청이 들어오면 풀에 있는 커넥션 하나 빌려줌. -> 작업 끝나면 커넥션 닫지 않고 반환 -> 다시 풀에 보관

 

왜쓰냐?

성능, 안정성, 비용 때문에

 

DataSource (JDBC)

- "DB 커넥션을 어떻게 얻어올까?" 라는 계약(규칙)만 정의하고, 실제 구현은 여러 방식이 가능함.

- JDBC에서는 커넥션 풀을 직접 만들지 않고, DataSource라는 인터페이스를 제공해 추상화함. -> 각 풀 라이브러리가 DataSource를 구현해서 스프링/애플리케이션 서버에서 통일된 방식으로 사용 가능함.

 

DataSource (JDBC)  구현 방식 3가지

1. 기본 구현 : 단순 커넥션 오브젝트 생성(DriverManager 대체)

2. 연결 풀링 구현 : 연결풀링에 자동으로 참여하는 연결 오브젝트 생성 (HikariCP, DBCP 등)

3. 분산 트랜잭션 구현 : 거의 항상 연결 풀링에 참여하는 연결 오브젝트 생성 (대규모 엔터프라이즈 환경)

 

커넥션 풀 라이브러리

- DBCP2 (Apache) : 전통적, 안정적, Spring Boot 1.x 기본

- HikariCP (현재표준) : 가장 빠르고 경량, Spring Boot 2.x 기본

- c3p0 (구버전) : 기능은 다양하지만 성능, 안정성 부족, 사실상 유지보수 거의 없음

 

흐름도

 

 

1. 요청 -> 서버에서 커넥션 풀로부터 하나 빌림.

2. SQL 실행 -> 결과 반환

3. 커넥션을 닫지 않고 풀에 반