Skip to content

이미지 등록 v1(multipart) 경로 삭제, v2 presign/confirm 으로 단일화 #967

Description

@m-a-king

이미지 등록 경로가 둘로 공존한다.

  • 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 문서에서도 함께 빠진다.

Metadata

Metadata

Assignees

Labels

refactor구조 개선, 외부 동작 불변

Type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions