feat: Objectoptimisticlockingfailureexception 핸들러 추가 #1073
Merged
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
🔥 연관 이슈
🚀 작업 내용
💬 리뷰 중점사항
한 주간 발생한
Objectoptimisticlockingfailureexception
예외는StaleObjectStateException
라는 예외를 매핑한 예외임을 확인했습니다.Objectoptimisticlockingfailureexception
예외는 낙관적 락 충돌 시 JPA 발생하는 예외,StaleObjectStateException
는 하이버네이트에서 발생하는 예외라고 합니다.코인에서는
@Version
혹은@Lock
어노테이션을 통해 낙관적 락을 설정하는 부분이 잘 보이지 않았습니다. 관련해서 찾아보니StaleObjectStateException
예외는존재하지 않는 행을 삭제하거나 업데이트하려고 시도하는 경우에도 발생합니다.
라고 합니다. 문서해당 예외를 처리하는 방법에는 재시도 로직, 에러로 처리하는 방법 그리고 네이티브 쿼리로 처리하는 방법이 있다고 합니다.
참고 자료
현재 코인에서 재시도 로직을 넣을 만큼 크리티컬한가?
라는 의문에는아니다
라고 생각을 했습니다. 재시도 로직이 필요하면, 해당 로직에 비관적 락 혹은 분산 락을 도입하는 방법이 더 낫다고 생각했기 때문입니다. 또한, 코인에서는 현재 사용자가 사용자의 데이터에 대한 수정 및 삭제가 주로 이뤄지기 때문에 큰 문제가 없다고 생각했습니다.관련해서 의견 주시면 감사하겠습니다.