오늘은 PessimisticLock에 대해서 알아보려고 한다.
회사에 큰 서비스 중 일부분이 EDA 기반 MSA로 구성되어 있다.
어느날 부터인가 PessimisticLockingFailureException 이 발생하기 시작했다.
해당 에러에 대해 검색을 하다보니 스택오버플로우에서 이와 비슷한 질문을 찾아볼 수 있었다.
이 글에서는 You are getting this exception because the lock wait timeout was reached. 라고 답해주고 있다.
해당 예외가 발생하는 프로세스를 확인 해봐야겠다.
프로세스는 대략 아래와 같다.
1. Client 에서 요청 메시지 전송
2. Agent 에서 메시지 수신
3. Agent 내부 비즈니스 로직 후 완료 처리
4. Agent 응답 메시지 전송
5. Client 메시지 수신 후 완료 처리
현재 비관적 락 예외는 Agent 에서 발생하고 있다.
그렇다면 내부 비즈니스 로직을 수행 후 완료 처리 시에 발생하는 것인데... 의심되는 것은 여러 번 요청이 있어서 중복 데이터의 업데이트가 발생하지 않았을까 의심이 된다. 일단은 로그를 더 찍어 모니터링을 해봐야겠다.