왜
이미지 등록 경로가 둘로 공존한다.
- v1: 클라가 multipart 로 바이트를 보내면 서버가 받아 S3 에 올린다.
- v2: 서버가 presigned URL 을 발급하고, 클라가 S3 에 직접 올린 뒤 confirm 한다.
v1 은 요청이 두 번 도착했을 때 그것이 재시도인지 새 등록인지 구분할 수단이 없다. raw key 를 매 요청 새 UUID 로 만들기 때문에, 응답 유실 후 클라가 재시도하면 같은 사진으로 item 과 wish 가 하나 더 생기고 등록 한도도 그만큼 더 깎인다. 사용자가 위시는 지울 수 있어도 한도는 되돌아오지 않는다.
v2 는 imageKey 가 그 요청의 자연 키라 이 문제가 없다. confirm 과 폴링 백스톱이 같은 key 를 다퉈도 pending_uploads claim(FOR UPDATE 삭제)이 한쪽만 승리시킨다.
클라 전환도 끝났다. 웹이 v2 로 넘어갔고, 앱은 react-native-webview 래퍼라 웹 배포와 함께 자동으로 넘어간다. 스토어 배포를 기다릴 필요가 없다.
prod nginx access log 실측(2026-08-21):
- v2 presigned/confirm 호출 확인
- v1 마지막 호출은 2026-08-20 15:19 UTC. 이력상 v1 호출은 전부 PIKI_APP UA 로, 앱 안의 웹이 부른 것이다.
무엇을
v1 경로를 삭제하고 이미지 등록을 v2 하나로 단일화한다. deprecated 단계는 두지 않는다.
삭제 대상
- WishlistController.registerFromImages + WishlistApi 선언 + WishlistApiExamples 분기
- TournamentItemController.addItemsFromImages + TournamentItemApi 선언 + TournamentItemApiExamples 분기
- WishlistService.registerFromImages, TournamentItemService.addItemsFromImages, 양쪽 uploadRaw
- WishPersistenceService.persistPendingImages, TournamentItemPersistenceService.persistPendingImageItems
- 위 경로를 검증하던 테스트
- v1 을 참조하는 주석(ProfileUpdateService 등)
엔드포인트가 사라지므로 OpenAPI 문서에서도 함께 빠진다.
왜
이미지 등록 경로가 둘로 공존한다.
v1 은 요청이 두 번 도착했을 때 그것이 재시도인지 새 등록인지 구분할 수단이 없다. raw key 를 매 요청 새 UUID 로 만들기 때문에, 응답 유실 후 클라가 재시도하면 같은 사진으로 item 과 wish 가 하나 더 생기고 등록 한도도 그만큼 더 깎인다. 사용자가 위시는 지울 수 있어도 한도는 되돌아오지 않는다.
v2 는 imageKey 가 그 요청의 자연 키라 이 문제가 없다. confirm 과 폴링 백스톱이 같은 key 를 다퉈도 pending_uploads claim(FOR UPDATE 삭제)이 한쪽만 승리시킨다.
클라 전환도 끝났다. 웹이 v2 로 넘어갔고, 앱은 react-native-webview 래퍼라 웹 배포와 함께 자동으로 넘어간다. 스토어 배포를 기다릴 필요가 없다.
prod nginx access log 실측(2026-08-21):
무엇을
v1 경로를 삭제하고 이미지 등록을 v2 하나로 단일화한다. deprecated 단계는 두지 않는다.
삭제 대상
엔드포인트가 사라지므로 OpenAPI 문서에서도 함께 빠진다.