상품 이미지를 S3에 저장할 때, 아래 두 가지 방식 중 어떤 것을 선택할지 고민했다.
클라이언트 → (이미지 전송) → 서버 → (S3 업로드) → S3
1. 클라이언트 → (Presigned URL 요청) → 서버
2. ← (Presigned URL 발급) ←
3. 클라이언트 → (이미지 직접 업로드) → S3
4. 클라이언트 → (imageUrl 포함 상품 등록 요청) → 서버
presignedExpirationSeconds) 설정으로 유효기간 제한 가능| 단점 | 현재 대응 |
|---|---|
| 클라이언트에서 2번의 요청 필요 (URL 발급 + S3 업로드) | UX 영향 미미, 허용 가능한 수준으로 판단 |
| 서버가 실제 S3 업로드 여부를 확인하기 어려움 | 아래 내용 참고 |
클라이언트가 Presigned URL만 발급받고 실제로 업로드하지 않을 수 있다.
확장 시 해결 방법
현재 판단
imageUrl은 상품 등록 시에만 사용되므로, URL만 발급받고 업로드하지 않으면 해당 URL이 상품에 등록되지 않아 실질적인 문제가 발생하지 않는다. 현재 규모에서는 별도 검증 로직 없이도 충분하다고 판단하였다.