41장. Single-document Atomicity를 먼저 활용한다
MongoDB의 단일 document update는 관련 필드를 한 번에 바꿀 수 있다. 여러 collection transaction을 기본으로 쓰기 전에 aggregate boundary를 다시 본다. 조건부 filter에 현재 state/version을 넣고 matched count가 1일 때만 전이를 성공시킨다. retry 가능한 write여도 업무 idempotency key를 둔다.
db.orders.updateOne(
{ _id: orderId, status: 'PAID', version: expectedVersion },
{ $set: { status: 'FULFILLING' }, $inc: { version: 1 },
$push: { audit: { eventId, type: 'FULFILLING_STARTED', at } } }
)
동시 worker 두 개를 barrier 뒤 시작해 matched count 1, audit 한 건, version 증가를 검증한다. 실패한 worker가 새 state를 덮지 않는다.