Skip to content

media 버킷 고아 파일 주기 청소 — 작성 이탈 업로드의 최후 안전망 (pmdart #233 후속) #149

Description

@seizeh

pmdart #233(2026-08-03 잠재 결함 리뷰)의 서버측 몫.

배경

앱은 첨부 시점에 업로드하고 제출 시점에 DB 를 쓴다. pmdart#249 로 앱측 보상(채팅 INSERT 실패 시 삭제, 프로필·펫 사진 교체 시 구 파일 삭제)은 들어갔지만, 작성형 화면(게시글·후기·돌봄기록·아지트·업체 대표사진)에서 업로드 후 이탈하면 공개 URL 파일이 고아로 남는다. 제출 실패 시 지우면 재시도가 죽은 URL 을 참조하므로 앱에서는 못 지우고, 앱 종료·프로세스 킬은 어차피 클라이언트가 커버 불가 — 서버측 주기 청소가 유일한 안전망.

제안

  • 주기(예: 주 1회) 작업: media 버킷 객체 목록 vs 참조 URL 대조 후 미참조 + 생성 N일(예: 7일) 경과 파일 삭제
    • 유예 기간 필수 — 작성 중(아직 제출 전)인 첨부를 지우면 안 된다
  • 참조 소스 전수(누락 시 정상 파일 삭제 사고): posts.image_url·image_thumbnail_url, chat_messages.image_url·image_thumbnail_url, facility_reviews 사진 배열·p_videos jsonb(url·thumb·path), users.profile_image_url, pets.image_url, business_profiles 대표사진, 그 외 media 공개 URL 저장 컬럼 grep 로 확정
  • 실행 위치: pg_cron + storage API 또는 Edge Function 스케줄
  • 삭제 전 드라이런(목록만 산출) 1회 돌려 참조 소스 누락 검증

참고

  • 앱측 삭제 헬퍼: pmdart lib/services/storage_service.dart 의 discardByUrl/mediaPathFromUrl (경로 규약 //.)

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions