HikariCP의 데이터 누수 문제가 발생했다.
어떻게 알았냐고??
에러가 떴고 그 에러를 찾아봐서 알았다...
그래서 HikariCP가 무엇인가???
모르겠다.
업무중 에러가 발생해서 처음 접해본 친구다.
그러므로 이 글에서는 HikariCP가 무엇인지 보다는 해당 에러가 왜 발생하였는지 그리고 어떻게 처리하였는지를 정리해보도록 하겠다.
우선 아무리 모른다 해도 적어도 무엇을 하는 것인지 알아야겠지?
HikariCP는 Connection Pooling을 제공하는 JDBC DataSource의 구현체 이다.
즉 Java언어를 사용하는 애플리케이션에서 데이터베이스와의 연결을 관리하기 위한 빠르고 가벼운 JDBC커넥션 풀 라이브러리란 것이다.
좀 알아보니 사용하는 이유는 가볍고( 메모리 사용량 적은편 ), 성능이 좋기 ( 빠른 초기화 시간과 최소한의 락을 사용한다 ) 때문이라고 한다.
그럼 Apparent connection leak detected는 무슨 억하심정으로 발생한 오류일까???
확인해보니 여러 이유가 있었던거 같은데 필자가 주목한것은 이런 문제 였다.
leak-detection-threshold를 초가 하여 발생했다.
흠 그럼 저 설정을 늘려주면 괜찮지 않을까??
해당 설정의 단위는 밀리초다 즉 1000 = 1s이다.
기본적으로 default는 2s로 설정되어 있다고 한다.
마음 같아서는 1일로 설정해버리고 싶지만 그랬다가는 혼난다.
라고 퉁치고 싶지만 최대 설정 범위가 30분이기도 하고 누가 데이터베이스 연결해서 하루동안 작업하는것을 하겠는가...
우선 개인적인 생각으로 30초 정도가 괜찮다 생각하여
hikari:
leak-detection-threshold: 30000
로 설정 해봤다. ( 설정 파일과 주소는 application.yml의 spring.datasource.hikari.leak-detection-threshold이다. )
설정을 적용시키니 이게 웬걸 계속 뜬다.
하. 하. 하.
좀더 노력해서 알아보니 max-lifetime의 시간이 leak-detection-threshold를 초과하면 안된다고 한다.
초과하진 않을 것 같지만 그래도 혹시 몰라 설정을 수정해줬다.
hikari:
max-lifetime: 30000
leak-detection-threshold: 40000
잘 된다 나이스.