모르지 않다는 것은 아는것과 다르다.

Jdbc

Hikari

채마스 2022. 2. 27. 01:52

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

'Jdbc' 카테고리의 다른 글

HikariCP 코드 분석하기 1편 (HikariCP란?)  (0) 2023.01.21
JOOQ (Java Object Oriented Querying)  (0) 2022.03.24
Spring JDBC  (0) 2022.02.27
JPA vs MyBatis  (0) 2022.02.27
JDBC  (0) 2022.02.27