프로젝트 진행 중 db로 mysql을 사용하는데 내가 직접 설치해서 써야하는 상황이라 직접 설치하고 개발하면서 테스트하던 도중 'communications link failure' 에러가 계속해서 발생했다.
해당 프로젝트에서 db는 mysql, jdbc data source 구현체는 hikariCP를 사용했는데 이 둘 간의 timeout 설정이 맞지 않아 발생했던 문제였다.
mysql은 connection pool 내 connection이 사용중이지 않으면 wait_timeout이 지날때 종료하고 hikariCP에는 connection의 수명시간인 maxLifeTime이 있다. 이 둘을 확인해본 결과 hikariCp의 maxTimeout은 default로 30분이었고 mysql의 wait_timeout은 설정파일을 보니 1분으로 되어있었다.
hikariCP가 mysql과 connection을 맺은 이후 connection이 mysql의 설정에 따라 사용하지 않으면 1분 후 종료되고 해당 connection을 hikariCP에선 그대로 사용하려 했기 때문에 발생한 문제였다.
(내가 설치할 때 왜 이 설정을 그냥 넘어갔지 ... ㅠㅠ 실수해버렸다.)
mysql의 wait_timeout을 늘려주었다. 추가로 찾아보니 보통 db의 wait_timeout을 hikariCP의 maxTimeout보다 길게 설정할 것을 권장한다고 한다.
이제 정상적으로 작동하는 것을 확인할 수 있었다. ^0^