반응형 낙관적 락2 @Version을 사용하지 않는데 ObjectOptimisticLockingFailureException 등장?! 예측하지 못한 예외 등장?! Kotlin + Spring Boot + Spring Data Jpa 등 다양한 기술을 사용한 프로젝트를 진행하고 있다. 어느 평화로운 날.. 갑자기 프로젝트의 스프링 부트 버전에서 Tomcat 취약점이 발견되어 최신 버전 3.4.1로 스프링 부트 버전을 올렸다. 버전을 올리고 테스트 코드를 실행하면서 잘 동작하던 코드에서 ObjectOptimisticLockingFailureException이 발생했다.로그를 보면 StateObjectStateException이 먼저 발생하고 해당 에러를 OptimisticLocking 예외로 감쌌다. 프로젝트에서는 현재 낙관적 락(@Version)을 사용하지 않고 있어서 당황했다.기존 스프링 부트 버전으로 다운 그레이드하면 예외를 던진 코.. 개발/JPA 2025. 1. 9. 낙관적 락, 비관적 락, 네임드 락 JPA는 데이터베이스 트랜잭션 격리 수준을 READ COMMITTED 정도로 가정한다. 만약 일부 로직에 더 높은 격리 수준이 필요하면 낙관적 락과 비관적 락 중 하나를 사용하면 된다. 추가적으로 네임드 락에 대해서도 다시 정리해보겠다. 낙관적 락 (OptimisticLock) 낙관적 락은 이름 그대로 트랜잭션 대부분은 충돌이 발생하지 않는다고 낙관적으로 가정하는 말이다. DB가 제공하는 락 기능을 사용하는 것이 아니라 JPA가 제공하는 버전 관리 기능을 사용한다. 즉 애플리케이션이 제공하는 락이다. 낙관적 락은 트랜잭션을 커밋하기 전까지는 트랜잭션의 충돌을 알 수 없다는 특징이 있다. 충돌이 빈번하지 않을 때 사용하는 것이 좋다. 충돌이 빈번하다면 비관적 락을 사용하는 것이 성능상 이점이 있다. 실패했.. 개발/JPA 2023. 6. 16. 이전 1 다음 반응형