대책: 값 다시 읽기
값 다시 읽기(reread value)는 소실된 업데이트를 방지하는 대책입니다. 사가가 레코드를 업데이트하기 전에 값을 다시 읽어 값이 변경되지 않았는지 확인하는 것입니다. 값을 다시 읽었더니 변경되었다면 사가를 중단하고 나중에 재시작합니다. 이 대책은 일종의 낙관적 오프라인 락(Optimistic Offline Lock) 패턴입니다.14
이 대책을 주문 생성 사가에 적용하면 주문이 승인되는 도중 취소되는 불상사를 방지할 수 있습니다. 주문 승인 트랜잭션은 해당 주문이 처음 생성된 이후 이전 사가 단계에서 변경되었는지 체크합니다. 변경되지 않았으면 주문을 승인 처리하고, 주문이 취소되었으면 사가를 멈추고 보상 트랜잭션을 가동합니다.