34장. 카메라에서 서버 영수증까지 추적한다
촬영 전에 목적과 권한을 설명한다. 결과 URI를 받으면 decode 가능 여부, pixel·byte 한도, orientation, MIME/magic bytes를 확인한다. EXIF 위치·기기 정보는 정책에 따라 제거하고 원본을 그대로 gallery에 남기지 않는다. 정규화한 파일에 SHA-256과 local asset id를 부여한다.
점검 metadata를 먼저 local DB에 transaction으로 저장하고 사진은 app private storage에 둔다. queue에는 inspection id, asset id, checksum, size, retry와 upload 상태를 기록한다. presigned upload 뒤 완료 API가 object checksum·사용자·site ownership을 확인하고 receipt를 반환한다. receipt 전에는 local 파일을 지우지 않는다.
실패 실습은 촬영 취소, 권한 거부, 저장 공간 부족, 앱 종료, 깨진 JPEG, 업로드 99% network 단절, 서버 성공 뒤 응답 단절이다. 재실행 뒤 사진은 한 번만 연결되고 orphan object가 없어야 한다. UI에는 “사진 있음”이 아니라 local·upload·server confirmed 상태를 구분해 보여 준다.