Hikari - connectionTestQuery

zuckerfrei·2023년 8월 28일
1

Hikari

목록 보기
1/1

배경

다른 팀은 JEUS를 WAS로 사용한다.

주말 아침에 앱을 실행시킨 경우, 정상 작동하지 않다가 두 번째 요청부터는 정상적으로 작동하는 경우가 종종 발생했다고 한다.
이 팀에서는 해당 에러가 WAS-DB 간에 통신하지 않는 텀이 긴 경우에 발생한다고 판단했고
(아직 오픈하지 않은 서비스라 그런지)

JEUS 에 Connection Validation 설정을 걸어놓아서 일정기간(60초) 마다
SELECT 1 FROM DUAL 쿼리로 커넥션에 대한 헬스체크를 수행하는 조치를 해놓았다.

그리고 Tomcat을 WAS로 사용하는 우리 팀에도 같은 설정을 하라고 지시하셔서 관련 설정을 찾아봤다.
구글링으로 몇 가지 글을 읽어보니 아래처럼 설정할 수 있을 것이라 생각했다.

application.yaml

datasource:
  ...
  dbcp2:
      validation-query: "SELECT 1 FROM DUAL"
      validation-interval: 60000
  
  # 또는
  tomcat:
      validation-query: "SELECT 1 FROM DUAL"
      validation-interval: 60000

  
  # 또는
  hikari:
    connection-test-query: ~~~

그런데

HikariCP는 커넥션풀 관리를 효율적으로 해준다고 하는데, JEUS 와 동일한 설정을 하는 것이 맞는 것일까? 의문이 들어 조금 더 찾아보게 되었다.


찾아보니

찾아보니 hikari.connection-test-query 는 JDBC 4.0 이상을 사용하면 설정하지 않는 것을 권장한다고 한다. 공식문서

설정을 권장하지 않는 이유

공식문서의 설명만으로는 이해되지 않아, 설명해놓은 몇 가지 글을 읽었다.

  1. hikari는 Connection.isValid() API를 이용하여 더 작은 네트워크 트래픽으로 헬스 체크를 수행한다. 참조

  2. PoolBase.java 소스코드에 isConnectionAlive 라는 메서드가 있고,
    이 메서드가 주기적으로 실행되어서 헬스체크를 수행한다. 참조

  3. Hikari는 tomcat-DBCP와 달리 사용하지 않는 Connection을 회수하도록 설계된다는 점에서 차이가 있다. 참조


그래서..

우리가 쓰는 TbDriver(tibero6-jdbc.jar)의 JDBC 버전을 확인해보았다.
공식문서에 따르면 tbJDBC는 4.0 표준을 준수한다. 참조

따라서 connectionTestQuery는 굳이 설정하지 않아도 될 것 같아 제외하기로했다.

profile
무설탕 음료를 좋아합니다

0개의 댓글