TIL

낙관적 락 (Optimistic Locking)

메커니즘 — version 컬럼

UPDATE account SET balance = ?, version = version + 1
WHERE id = ? AND version = :read_version;   -- affected rows = 0 이면 그새 누가 바꿈 → 충돌

JPA @Version

재시도와 결합

비관적 락과 비교

  낙관적 락 비관적 락
방식 진행 후 커밋 시 충돌 감지 미리 잠금
happy-path 비용 락 0 락 획득·대기
충돌 시 재시도 대기(블록)
적합 저경합 고경합
데드락 없음(락 미보유) 가능

한계와 함정

write-skew와 충돌 구체화(materializing conflicts)

요약

참고