현재 모든 업로드 파일이 public/uploads/ 디렉토리에 혼재되어 저장되고 있습니다. 추후 데이터 관리가 용이하도록 파일 유형 및 목적에 따라 서브 디렉토리에 저장되도록 구조를 개편하고, 게시물이나 설정이 삭제될 때 관련된 파일(첨부파일, 썸네일, 본문 삽입 이미지 등)도 서버에서 물리적으로 삭제되도록 개선합니다.
변경되는 업로드 디렉토리 구조
새로운 파일이 업로드될 때 목적에 맞는 디렉토리가 없으면 자동으로 생성(mkdir)한 후 저장합니다. 기존에 업로드된 파일들은 호환성을 위해 이동하지 않고 그대로 둡니다.
- 에디터 삽입 이미지:
public/uploads/editor_images/ - 에디터 오디오 파일:
public/uploads/audio/ - 게시판 첨부파일 및 썸네일:
public/uploads/board_attachments/ - 프로필 이미지:
public/uploads/profile_images/ - 사이트 설정 에셋 (로고, 파비콘, 배너, 팝업 등):
public/uploads/site_assets/
파일 삭제 연동 처리 (Cascading Deletion)
게시물, 팝업, 게시판 등이 삭제될 때 연관된 파일들을 식별하여 서버 저장소에서 함께 삭제합니다.
- 게시물 삭제 시 (
PostController/AdminController)- 게시물에 등록된 썸네일 이미지 삭제
- 게시물에 첨부된 일반 파일들 (
post_files테이블 연동) 삭제 - 게시물 본문(
content)에 삽입된 에디터 업로드 이미지 및 오디오 URL을 추출하여 물리 파일 삭제
- 팝업 삭제 시 (
AdminController::popupsDelete)- 팝업에 등록된 이미지 파일 삭제
- 게시판 삭제 시 (
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/ 파일들이 함께 삭제됩니다. 만약 동일한 이미지를 여러 게시물에서 복사&붙여넣기로 공유해서 쓰고 계신다면 삭제 시 다른 게시물에서도 보이지 않게 될 수 있습니다.
일반적인 에디터 사용 패턴(게시물마다 개별 업로드)을 따른다면 문제가 없습니다.
댓글 0