현재 모든 업로드 파일이 public/uploads/ 디렉토리에 혼재되어 저장되고 있습니다. 추후 데이터 관리가 용이하도록 파일 유형 및 목적에 따라 서브 디렉토리에 저장되도록 구조를 개편하고, 게시물이나 설정이 삭제될 때 관련된 파일(첨부파일, 썸네일, 본문 삽입 이미지 등)도 서버에서 물리적으로 삭제되도록 개선합니다.

변경되는 업로드 디렉토리 구조

새로운 파일이 업로드될 때 목적에 맞는 디렉토리가 없으면 자동으로 생성(mkdir)한 후 저장합니다. 기존에 업로드된 파일들은 호환성을 위해 이동하지 않고 그대로 둡니다.

  • 에디터 삽입 이미지: public/uploads/editor_images/
  • 에디터 오디오 파일: public/uploads/audio/
  • 게시판 첨부파일 및 썸네일: public/uploads/board_attachments/
  • 프로필 이미지: public/uploads/profile_images/
  • 사이트 설정 에셋 (로고, 파비콘, 배너, 팝업 등): public/uploads/site_assets/

파일 삭제 연동 처리 (Cascading Deletion)

게시물, 팝업, 게시판 등이 삭제될 때 연관된 파일들을 식별하여 서버 저장소에서 함께 삭제합니다.

  1. 게시물 삭제 시 (PostController / AdminController)
    • 게시물에 등록된 썸네일 이미지 삭제
    • 게시물에 첨부된 일반 파일들 (post_files 테이블 연동) 삭제
    • 게시물 본문(content)에 삽입된 에디터 업로드 이미지 및 오디오 URL을 추출하여 물리 파일 삭제
  2. 팝업 삭제 시 (AdminController::popupsDelete)
    • 팝업에 등록된 이미지 파일 삭제
  3. 게시판 삭제 시 (AdminController::boardsDelete)
    • 해당 게시판에 속한 모든 게시물을 순회하며 관련 파일 일괄 삭제 후 게시물 삭제

작업 대상 컴포넌트

1. src/Controllers/AdminController.php

[MODIFY] AdminController.php

  • uploadImage(): 확장자를 체크하여 이미지면 editor_images/, 오디오면 audio/ 디렉토리에 저장되도록 수정합니다.
  • uploadFile(): 저장 위치를 board_attachments/ 로 변경합니다.
  • handleFileUploads(): 다중 첨부파일을 board_attachments/에 저장하도록 변경합니다.
  • delete($id): 삭제 전 해당 Post의 썸네일, post_files, 그리고 content 내의 업로드 파일 URL 정규식 추출을 통한 물리 파일 삭제 로직을 추가합니다.
  • boardsDelete($id): 게시판 삭제 시 단순 쿼리가 아닌 소속 게시물별로 파일 삭제 로직을 먼저 수행하도록 수정합니다.
  • popupsSave() & popupsDelete(): 팝업 이미지 업로드 경로를 site_assets/로 변경하고 삭제 시 파일 삭제 로직을 추가합니다.

2. src/Controllers/TenantAdminController.php (및 _recovered.php)

[MODIFY] TenantAdminController.php

  • uploadFile(): 로고, 파비콘, 슬라이드 이미지 등이 저장되는 경로를 public/uploads/site_assets/로 변경합니다.
  • 삭제 기능이 존재할 경우 파일 삭제 로직을 보완합니다.

3. src/Controllers/AuthController.php

[MODIFY] AuthController.php

  • 회원정보 수정 시 업로드되는 프로필 이미지를 public/uploads/profile_images/ 디렉토리로 저장하도록 변경합니다.

User Review Required

IMPORTANT

기존 파일 호환성: 디렉토리 구조가 변경된 이후에 새로 업로드되는 파일들에 대해서만 새 디렉토리에 저장됩니다. 기존 파일들은 경로를 강제로 바꾸지 않으므로 사이트 운영상 깨지는 이미지는 발생하지 않습니다. 

본문 에디터 이미지 삭제 로직: 게시물 삭제 시 본문에 포함된 editor_images/ audio/ 파일들이 함께 삭제됩니다. 만약 동일한 이미지를 여러 게시물에서 복사&붙여넣기로 공유해서 쓰고 계신다면 삭제 시 다른 게시물에서도 보이지 않게 될 수 있습니다.

일반적인 에디터 사용 패턴(게시물마다 개별 업로드)을 따른다면 문제가 없습니다.