DBCP
- DataBase Connection Pool 의 약자이다.
- DataSource는 Connection pool을 관리하고 연동할 수 있게 하는 표준 인터페이스다.
- 다시말해서 DBCP는 DB Connection 객체를 미리 만들어 Connection Pool에 보관하고 필요할 때마다 DB에 연결된 Connection을 꺼내 사용하는 것을 의미합니다.
- Connection pool 를 만들지 않는다면? -> 매번 Connection 객체를 만들어야 할 것이다. -> 큰 비용낭비가 발생한다.
- 미리 만들어진 Connection을 재사용하여 CPU의 부담과 Connection을 생성하는데 필요한 시간을 줄일 수 있다.
- DBCP 의 기본 옵션은 아래와 같다.
- maxActice : 유휴 상태와 사용중인 커넥션을 포함해서 pool이 허용하는 최대 커넥션 개수
- maxIdle : pool에서 유지할 유휴 상태의 커넥션 최대 개수
- minIdle : pool에서 유지할 유휴 상태의 커넥션 최소 개수
- initialSize : 초기 connection pool의 connection 개수
- maxActive >= initialSize, maxActive = maxIdle 를 만족해야 한다.
hikariCP
- SpringBoot2.0부터 default JDBC connection pool로 지정된 DBCP 이다.
- hikariCP는 다른 DBCP보다 성능이 좋다고 한다.
- 스프링에서 DBCP 는 아래와 같이 설정할 수 있습니다.
spring:
datasource:
hikari:
connectionTimeout : 50000
maximumPoolSize : 50
maxLifetime : 1800000
poolName : HikariCP
readOnly : false
connectionTestQuery : SELECT 1
- connectionTimeout
- 클라이언트가 pool 에 connection 을 요청하는데 기다리는 최대시간을 말한다.
- default 는 30000(30초) 이다.
- 설정한 시간을 초과하면 SQLException 이 발생한다.
- 최소 연결 시간은 250ms 이다.
- maximunPoolSize
- 유휴 및 사용중인 connection 을 포함해서 pool 에 보관할 수 있는 최대 커넥션 수를 말한다.
- default 는 10 이다.
- 사용할 수 있는 커넥션이 없다면, connection Timeout 시간 만큼 대기한다. -> 시간을 초과한다면 SQLException 이 발생한다.
- minimumIdle
- pool 에서 유지가능한 최소 커넥션 갯수를 말한다.
- default 는 maximumPoolSize 와 동일하다.
- 특별한 이유가 없다면 설정하지 않는 것이 성능적인 측면에서 좋다.
- idleTimeout
- pool 에 유휴 상태로 유지시킬 수 있는 최대 시간을 말한다.
- default 는 600000(10분) 이다.
- minimumIdle이 maximumPoolSize보다 작은 경우에만 사용 가능하다.
- pool 에 있는 connection 수가 minimumIdle 에 도달했을 때, 이후에 반환되는 connection 에 대해서 바로 반환되지 않고, idleTimeout 만큼 유휴 상태로 있다가 폐기된다.
- maxLifeTime
- connection 의 최대 유지 시간을 말한다.
- default 는 1800000(30분) 이다.
- connection 이 maxLifeTime 지났을 때, 사용중인 connection 은 바로 폐기되지 않고, 작업이 완료되면 폐기된다. -> 하지만 유휴 커넥션은 바로 폐기된다.
- readOnly
- pool 에서 얻은 connection 이 기본적으로 readOnly 로 설정될지를 결정한다.
- default 는 false 이다.
- 물론 데이터베이스가 readOnly 속성을 지원할 경우에만 사용할 수 있다.
- connectionTestQuery
- 데이터베이스 연결이 여전히 활성화 되어있는지 확인하기 위한 쿼리이다.
REFERENCES