Repository navigation
fix(afternote): 추모 영상 썸네일 실패에 재시도 수단이 없다 — 결손이 저장으로 영구 확정된다 (#705 5번 분리) #1550
Copy link
Copy link
Closed
Labels
Description
작업 유형
bug — 버그·오동작
주 담당 모듈
afternote — 애프터노트
개요
#705 의 5번 항목을 착수 단위로 분리한다. 우산의 나머지(목록 refresh 무음 · 상세 재조회 부재 · prefill 실패 빈 폼 · 진행 상태 미전달 · LoadState 계측)는 #705 에 남는다.
추모 영상 썸네일이 실패하면 되돌릴 수단 없이 결손이 저장으로 확정된다. 실패는 두 갈래이고 둘 다 복구 경로가 없다.
1. 프레임 추출 실패 — 완전 무음
MemorialVideoUpload L89-L128 이 MediaMetadataRetriever 로 프레임 0 을 못 뽑으면 onMemorialThumbnailExtractionFailed L353-L361 이 ErrorReporter(MEMORIAL_THUMBNAIL_EXTRACT) 에 기록만 한다. 화면에는 스낵바조차 없다.
2. 업로드 실패 — 액션 없는 스낵바 한 줄
uploadMemorialThumbnail L332-L351 의 실패는 AfternoteEditorError.Upload(Target.THUMBNAIL) 로 오류 이벤트에 실리고, NavGraph L188-L205 가 액션 없는 스낵바 한 줄로 흘린다. 그동안 편집기에는 로컬에서 뽑은 비트맵이 그대로 떠 있어 «썸네일이 붙었다» 로 읽힌다 — 저장하면 사라진다.
결손은 영구다
- 재시도 트리거가 없다. 추출은
LaunchedEffect(videoUrl)키라 같은 영상이 폼에 있는 한 다시 돌지 않는다. 영상을 처음부터 다시 골라야 썸네일이 생긴다. - 저장하면 확정된다. payload 의
memorialThumbnailUrl이 null 인 채로 나가고, 서버는 채워 주지 않는다 — BEAfternotePlaylist.MemorialVideo는videoUrl·thumbnailUrl두 칸을 nullable 로 저장만 하고 영상에서 프레임을 뽑는 로직이 없다(2026-08-30Afternote-BEorigin/main 실측). - 재편집으로도 못 고친다. prefill 된 영상은 원격 URL 이라
MemorialVideoUpload가isLocalContentUri()검사 L95 에서 추출 자체를 건너뛴다. - 결과는 시안에 없는 상태다. 수신자 상세
ReceiverMemorialVideoThumbnailL302 는AsyncImage를 건너뛰고 회색 그라디언트 + 재생 아이콘만 그린다. 시안에는 «영상 있음(썸네일 채워짐)» 과 «영상 없음(+ 카드)» 두 상태뿐이다 — 서버 실패가 무음·빈 정상 화면으로 수렴 — 목록·상세·에디터 복구 수단 부재 #705 에서 2026-08-24 대조 완료.
필요한 동작
- 업로드 실패 시 추출한 바이트를 유지하고, 영상 재선택 없이 재업로드하는 사용자 액션을 준다.
- 추출 실패도 같은 재시도 경로에 태운다. 바이트가 없으므로 재추출부터 다시 돌아야 한다(
LaunchedEffect재발화 키 추가). - 저장 시점에 미해결 썸네일이 남아 있으면 자동으로 한 번 더 시도한다. 영상은 이미 저장 시점에 업로드하므로(
resolveMemorialMediaForSave) 이 편이 대칭이다. 실패해도 저장 자체는 막지 않는다. - 회귀 테스트로 고정한다 — 업로드 실패 후 재시도 성공 시 저장 payload 에
thumbnailUrl이 실리는 것, 추출 실패 후 재시도로 추출이 다시 도는 것.
자식 이슈
No response
참고
- 처방은 서버 실패가 무음·빈 정상 화면으로 수렴 — 목록·상세·에디터 복구 수단 부재 #705 에서 확정된 (a)「영상 재선택 없이 썸네일만 재시도」를 따른다. (b) 저장 전 확인 다이얼로그는 시안에 없는 상태를 사용자 동의로 확정시켜 차선이고, (c) 저장 차단은 영상 업로드 성공분까지 버려 과하다.
- 서버 실패가 무음·빈 정상 화면으로 수렴 — 목록·상세·에디터 복구 수단 부재 #705 본문 5번은 현행 코드와 두 군데 어긋난다 —
thumbnailUploadFailed=true플래그는 [refactor] #601 저장 검증과 에디터 오류 상태 통합 #831 로AfternoteEditorError.Upload(Target.THUMBNAIL)에 흡수돼 더는 없고, 위 1번(추출 실패) 갈래가 본문에 빠져 있다. 같은 내용을 서버 실패가 무음·빈 정상 화면으로 수렴 — 목록·상세·에디터 복구 수단 부재 #705 에 코멘트로 남긴다. - 서버 몫은 없다. 썸네일 생성을 서버로 옮기려면 presigned URL + 클라이언트 직업로드 구조 밖에 S3 이벤트·변환 파이프를 신설해야 해서 이 처방과 비용이 맞지 않는다. 미디어 삭제 계약 구멍(생략·null 을 모두 «유지» 로 흡수)은 별개 축이고 Afternote-BE#259 로 이미 열려 있다.
- 영상을 바꿀 때 썸네일을 함께 비우는 규칙 자체는 의도된 것이다(
withMemorialVideo) — 이 이슈는 그 뒤 다시 채우는 경로가 실패했을 때의 복구를 다룬다. fix(afternote): 수정 모드 서버 영상→로컬 교체 후 삭제는 여전히 거짓 삭제 — 폼은 비지만 저장 후 서버 영상 잔존 #1406(수정 모드 거짓 삭제)과는 다른 갈래다.
Activity
github-actions commentedon Aug 30, 2026
bug 이슈는 사이드바 Fields > Priority 로 심각도를 지정해야 합니다. 판정 기준:
값이 비어 있어도 이슈를 닫지는 않습니다. 이 안내는 이슈당 한 번만 답니다.
github-actions commentedon Aug 30, 2026
이 이슈를 맡은 PR 은 #1567 다 (base
refactor/1561-memorial-media-value-object).base 가 기본 브랜치(
develop)가 아니라서 GitHub 은 이 이슈의 Development 칸에아무것도 표시하지 않는다. 본문에
Closes #N이 있어도 마찬가지다 — 그 링크는 기본 브랜치를target 하는 PR 에서만 만들어진다.
PR 이 닫히거나 머지되면 이 이슈의
pr-open라벨은 다음 리컨사일에서 떨어진다.fix(afternote): 추모 영상 썸네일 실패에 재시도 수단을 준다 (#1550)
fix(afternote): 추모 영상 썸네일 실패에 재시도 수단을 준다 (#1550)
fix(afternote): 썸네일 재시도 액션을 별도 상태가 아니라 오류 자체로 판정한다 (#1550)
docs(afternote): 저장 직전 썸네일 재업로드의 «태운다» 표현을 뜻이 드러나게 고친다 (#1550)