48장. 장애 훈련 — 동기화는 성공인데 사진이 없다
먼저 Answer receipt와 Asset receipt를 분리해 본다. metadata가 server에 있고 object가 없거나 checksum이 다르면 완료 화면을 내리지 않는다. queue command, presigned upload log, object metadata, completion API, server attachment를 correlation id와 asset id로 대사한다. 사용자의 local 원본을 즉시 삭제하지 않는다.
재현은 object upload 성공 뒤 completion 응답 단절과, completion 성공 뒤 app 종료 두 경우다. 같은 command 재실행은 checksum으로 기존 object·attachment를 찾아 한 번만 연결한다. orphan object cleanup은 충분한 유예와 reference scan을 거친다. 실패를 수동 DB insert로 덮지 않는다.
복구 완료는 inspection 답·사진 수, checksum, server receipt, 두 번째 기기 download가 일치하는 시점이다. runbook에는 영향 query, upload 재개, 금지 작업, 사용자 안내, 보존과 개인정보 담당자를 둔다.