- 충돌이 드물다고 가정하고 동시성을 관리하는 방법
- 버전 번호나 타임 스탬프를 사용하여 데이터가 수정되었는지 검사
- 장점
- 충돌이 드문 경우 성능에 큰 부담 없이 동시성 제어
- 락을 별도로 유지하지 않아서 데이터베이스 락 경합이 적다
- 단점
- 충돌 발생 시에 이를 처리하기 위한 추가 로직 필요 (재시도 처리 같은)
- 사용 : JPA의 낙관적 락:
@Version어노테이션을 사용하여 엔티티의 버전을 관리.
만약 두 개의 트랜잭션이 같은 productId에 대해 동시에 데이터를 수정하려고 할 때, 첫 번째 트랜잭션이 완료된 후 두 번째 트랜잭션이 OptimisticLockException을 발생
- 상품
id = 1의 데이터 조회 (버전 1) - 수량을 10 증가시킴 (버전 1에서 버전 2로 증가)
- 트랜잭션 커밋
- 상품
id = 1의 데이터 조회 (버전 1) - 수량을 5 증가시킴 (버전 1에서 버전 2로 증가 시도)
- 트랜잭션 커밋 시 버전 충돌 발생 (첫 번째 트랜잭션의 버전 2와 두 번째 트랜잭션의 버전 1이 다르므로
OptimisticLockException이 발생)
-> 이런 흐름으로 적용되는 것














