Skip to content

[Fix] 썸네일 READY 상태와 오브젝트 키 정합성 보장 #103

Description

@jaehunshin-git

📄 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

  • 기존 데이터에서 READY이면서 키가 null 또는 공백인 행이 있는지 점검하고 정리 방안을 수립한다.
  • Photo.markThumbnailReady()null·공백 키를 허용하지 않도록 도메인 불변식을 추가한다.
  • READY 상태와 thumbnail_object_key 관계를 보장하는 PostgreSQL check constraint 마이그레이션을 추가한다.
  • 썸네일 사용 가능 여부를 엔티티 메서드 또는 공통 정책으로 통일한다.
  • PhotoService, ReactionService, SharedGroupInviteService 등 모든 썸네일 URL 발급 경로에 공통 기준을 적용한다.
  • 엔티티 단위 테스트와 PostgreSQL 제약조건 테스트, 서비스 회귀 테스트를 추가한다.

📎 ETC

관련 이슈/PR: #101, #102

#101에서는 공유앨범 목록 API가 잘못된 상태의 사진을 방어적으로 제외하도록 처리한다. 이 후속 이슈에서는 잘못된 READY 상태 자체가 생성·저장되지 않도록 근본 원인을 해결한다.

DB 마이그레이션 적용 전 기존 데이터 점검이 필요하며, 이미 공유 환경에 적용된 마이그레이션은 수정하지 않고 timestamp 방식의 새 Flyway 스크립트를 추가한다.

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions