📄 Description
Photo.markThumbnailReady(String thumbnailObjectKey)가 null 또는 공백 키를 허용하므로, 썸네일 상태는 READY지만 실제 URL 발급에 사용할 수 있는 오브젝트 키가 없는 잘못된 상태가 만들어질 수 있다.
현재 DB 제약조건은 thumbnail_status의 enum 값만 검증하고 READY 상태와 thumbnail_object_key의 관계는 보장하지 않는다. 또한 PhotoService, ReactionService, SharedGroupInviteService 등 썸네일 URL을 발급하는 경로마다 사용 가능 여부 판단이 분산되어 있고, 일부 경로는 null만 확인해 공백 키로 URL 발급을 시도할 수 있다.
기대 동작은 다음과 같다.
READY 상태는 비어 있지 않은 유효한 thumbnail_object_key를 반드시 가진다.
- 썸네일 사용 가능 여부 판단을 공통화해 모든 API가 같은 기준을 적용한다.
- 애플리케이션과 PostgreSQL 양쪽에서 상태·키 정합성을 보장한다.
✅ Tasks
📎 ETC
관련 이슈/PR: #101, #102
#101에서는 공유앨범 목록 API가 잘못된 상태의 사진을 방어적으로 제외하도록 처리한다. 이 후속 이슈에서는 잘못된 READY 상태 자체가 생성·저장되지 않도록 근본 원인을 해결한다.
DB 마이그레이션 적용 전 기존 데이터 점검이 필요하며, 이미 공유 환경에 적용된 마이그레이션은 수정하지 않고 timestamp 방식의 새 Flyway 스크립트를 추가한다.
📄 Description
Photo.markThumbnailReady(String thumbnailObjectKey)가null또는 공백 키를 허용하므로, 썸네일 상태는READY지만 실제 URL 발급에 사용할 수 있는 오브젝트 키가 없는 잘못된 상태가 만들어질 수 있다.현재 DB 제약조건은
thumbnail_status의 enum 값만 검증하고READY상태와thumbnail_object_key의 관계는 보장하지 않는다. 또한PhotoService,ReactionService,SharedGroupInviteService등 썸네일 URL을 발급하는 경로마다 사용 가능 여부 판단이 분산되어 있고, 일부 경로는null만 확인해 공백 키로 URL 발급을 시도할 수 있다.기대 동작은 다음과 같다.
READY상태는 비어 있지 않은 유효한thumbnail_object_key를 반드시 가진다.✅ Tasks
READY이면서 키가null또는 공백인 행이 있는지 점검하고 정리 방안을 수립한다.Photo.markThumbnailReady()가null·공백 키를 허용하지 않도록 도메인 불변식을 추가한다.READY상태와thumbnail_object_key관계를 보장하는 PostgreSQL check constraint 마이그레이션을 추가한다.PhotoService,ReactionService,SharedGroupInviteService등 모든 썸네일 URL 발급 경로에 공통 기준을 적용한다.📎 ETC
관련 이슈/PR: #101, #102
#101에서는 공유앨범 목록 API가 잘못된 상태의 사진을 방어적으로 제외하도록 처리한다. 이 후속 이슈에서는 잘못된
READY상태 자체가 생성·저장되지 않도록 근본 원인을 해결한다.DB 마이그레이션 적용 전 기존 데이터 점검이 필요하며, 이미 공유 환경에 적용된 마이그레이션은 수정하지 않고 timestamp 방식의 새 Flyway 스크립트를 추가한다.