다른 팀은 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 이상을 사용하면 설정하지 않는 것을 권장한다고 한다. 공식문서
공식문서의 설명만으로는 이해되지 않아, 설명해놓은 몇 가지 글을 읽었다.
hikari는 Connection.isValid() API를 이용하여 더 작은 네트워크 트래픽으로 헬스 체크를 수행한다. 참조
PoolBase.java 소스코드에 isConnectionAlive 라는 메서드가 있고,
이 메서드가 주기적으로 실행되어서 헬스체크를 수행한다. 참조
Hikari는 tomcat-DBCP와 달리 사용하지 않는 Connection을 회수하도록 설계된다는 점에서 차이가 있다. 참조
우리가 쓰는 TbDriver(tibero6-jdbc.jar)의 JDBC 버전을 확인해보았다.
공식문서에 따르면 tbJDBC는 4.0 표준을 준수한다. 참조
따라서 connectionTestQuery는 굳이 설정하지 않아도 될 것 같아 제외하기로했다.