Prevention

갱신 분실은 “기다리게 하거나, 원자적으로 쓰거나, 버전으로 검증”한다

방지책의 선택은 충돌 빈도, 실패 비용, 재시도 가능성에 따라 달라진다.

SELECT FOR UPDATE먼저 잠근다

읽은 행을 다른 트랜잭션이 수정하지 못하게 기다리게 한다.

충돌이 잦고 손실 비용이 큰 업무에 맞다.

Atomic UPDATEDB가 계산하게 한다

`balance = balance - :amount`처럼 읽기와 쓰기를 한 문장으로 묶는다.

영향받은 행 수가 0이면 다시 확인한다.

Version Check나중에 검증한다

`WHERE version = :oldVersion`으로 읽은 전제가 아직 맞는지 검사한다.

충돌이 드물고 재시도가 쉬울 때 적합하다.

운영 규칙: 명시적 잠금은 짧게, 원자적 UPDATE는 영향받은 행 수 확인, 낙관적 잠금은 재시도 횟수와 backoff를 둔다.