먼저 web.xml에 나는 이런이런 설정을 할꺼야 라고 선언해줌
해당 규칙에 맞게 설정파일 생성
https://gogoonbuntu.tistory.com/68
이거보면 몇몇 요소들을 설정할 수 있는지 알 수 있는데
여기서 중요한 것은
특정 시간마다 커넥션을 확인 하는 셋팅을 지정해야 한다는 것이다.
DB에 커넥션을 맺은후 사용이 없다 보니 데이터 베이스 커넥션이 끊기기 때문이다.
에러가 날 수 있기 때문에 이를 방지하는설정을 필수적으로 해줘야한다.
https://blog.naver.com/tyboss/70176230775
여기에 잘 나와있는데
validationQuery 를 설정하는 것이다.
DB에 접속중인 세션을 오랫동안 사용하지 않거나, 네트워크에 문제가 발생하는 경우 DB 세션이 끊어질 수 있다.
DB 세션이 끊어지는 경우 App 입장에서는 재접속 처리를 해주어야 다시 정상적인 서비스가 가능해 진다.
재접속 처리 방법 중에 JDBC에 autoReconnect=true
옵션을 주는 방법이 있는데, 이 옵션을 잘못 사용하는 경우 얘기치 않은 문제가 발생할 수 있다.
autoReconnect
옵션은 쿼리를 수행한 다음 DB 세션에 문제가 있으면 단순히 SQLException
리턴 후 재접속 처리를 한다.
문제는 트랜잭션 구동 환경에서 수행중이던 트랜잭션은 롤백이 되어야 하고, 남은 트랜잭션은 수행이 되지 않아야 되는데, autoReconnect 옵션은 이런 처리를 해주지 않기 때문이다.
그래서 트랜잭션을 사용하는 환경이라면 DB 세션의 재접속 처리는 JDBC의 autoReconnect 설정이 아닌 DBCP의 validationQuery 기능을 사용하는 것이 적합하다.
위와 같은 문제를 막기 위해서 autoReconnect=true인 환경에서는 SQLException이 발생하는 경우에, 해당 트랜잭션이 더 이상 진행되지 않도록 App 단에서 직접 예외 처리를 해줘야 하고, MySQL 레퍼런스 메뉴얼에서도 autoRecoonect 옵션 사용은 권장하지 않고 있다.