### 📌 이슈 종류 - [x] ✨ 기능 추가 (Feature) ### 📝 작업 내용 식당·메뉴에서 최적화 이미지의 asset ID를 저장하고, 화면 용도에 맞는 이미지 후보를 응답하도록 연결합니다. 이를 위해 공통 MediaPort에 이미지 연결·해제와 용도별 조회 기능을 추가합니다. 기존 imageKeys·imageKey와 URL 응답은 유지합니다. 식당 이미지 ID와 표시 순서도 restaurant에서 계속 관리합니다. ### ✅ 체크리스트 - [x] MediaPort와 공통 이미지 응답·ImageReference 추가 - [x] READY 이미지 연결과 기존 연결 해제를 같은 트랜잭션에서 처리하고, asset 잠금 순서 통일 - [x] 용도별 파생본을 한 번에 조회해 CloudFront URL로 응답 - [x] 식당 이미지·메뉴에 nullable asset ID를 추가하는 V18·V19 migration 작성 - [x] 식당 생성에 imageAssetIds, 수정에 순서가 있는 images 입력 추가 - [x] 메뉴 생성·수정에 imageAssetId 입력 추가 - [x] 유지하는 식당 이미지의 ID를 보존하면서 추가·삭제·순서 변경 처리 - [x] 식당 목록·요약·어드민 응답에 thumbnailImage·cardImages·heroImages 추가 - [x] 메뉴 목록·상세·어드민 응답에 listImage·detailImage 추가 - [x] RestaurantPort의 대표 이미지를 ImageReference로 전달하고 예약·리뷰에서 필요한 이미지를 한 번에 조회 - [x] 기존 이미지·READY·PROCESSING·FAILED·조회 불일치 시 fallback 규칙 테스트 - [x] MySQL migration·모듈 경계·조회 횟수·트랜잭션 rollback 테스트 추가 - [x] 일괄 연결 시 전체 소유권을 먼저 검증하고, 업로드 완료와 연결 요청 사이 잠금 경쟁 테스트 추가 - [x] 선행 기능 브랜치 대상 PR에도 CI를 실행하고 실제 테스트 실행 여부 확인 - [x] 현재 커밋의 로컬 전체 빌드와 GitHub CI 확인 ### 💬 참고 사항 - 선행: #180, #182, #184, #186, #188. 선행 PR: #189. 구현 PR: #191. - `6ce5bfd` 기준으로 로컬 UTC 테스트와 [GitHub CI](https://github.com/TEAM-HASHI/HASHI-SERVER/actions/runs/33889356099)에서 각각 371개 테스트를 통과했습니다. 실패·오류·건너뛴 테스트는 없습니다. - 이미지 작업 발급 설정인 `media_pipeline_config.issuance_enabled=false`는 유지합니다. - 클라이언트 변경, 리뷰 자체 이미지, 프로필·매거진, 기존 이미지 일괄 전환과 실제 AWS 적용·운영 활성화는 별도 작업입니다. - 구현 검증과 운영 적용은 별개입니다. 선행 PR 통합과 운영 검증은 아직 남아 있습니다.
📌 이슈 종류
📝 작업 내용
식당·메뉴에서 최적화 이미지의 asset ID를 저장하고, 화면 용도에 맞는 이미지 후보를 응답하도록 연결합니다. 이를 위해 공통 MediaPort에 이미지 연결·해제와 용도별 조회 기능을 추가합니다.
기존 imageKeys·imageKey와 URL 응답은 유지합니다. 식당 이미지 ID와 표시 순서도 restaurant에서 계속 관리합니다.
✅ 체크리스트
💬 참고 사항
6ce5bfd기준으로 로컬 UTC 테스트와 GitHub CI에서 각각 371개 테스트를 통과했습니다. 실패·오류·건너뛴 테스트는 없습니다.media_pipeline_config.issuance_enabled=false는 유지합니다.