들어가며 @Transactional을 주의깊게 보게 된 계기는 배치 서버의 데이터 업데이트 때문이었다. 일별로 업데이트 해야 하는 데이터의 양이 증가하게 되면서, 스케쥴러들의 실행 시간이 겹치게 되었다. 이전에는 3:00AM, 4:00AM 등 한 시간 간격으로 스케쥴러 시간을 설정하였어도 충분히 스케쥴러를 겹치지 않게 돌릴 수 있었다. 하지만 데이터의 양이 증가하며 스케쥴러 실행 시간이 한시간이 넘어가게 되며 문제가 시작되었다. 여러 스케쥴러들의 실행 시간이 겹치고, 겹치게 실행되는 스케쥴러들이 동일한 DB table을 업데이트 하려다보니 업데이트 중 table lock이 걸려 timeout에러를 자주 맞이하게 되었다. table lock 이슈 때문에 timeoutException이 발생하는 이유는 트랜..