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 스크립트를 추가한다.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

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