From a5e54e1ac6eb10d49a135d4ab4fc2193fde51648 Mon Sep 17 00:00:00 2001 From: caadiq Date: Wed, 31 Dec 2025 19:42:05 +0900 Subject: [PATCH] =?UTF-8?q?fix:=20=EB=A1=9C=EA=B7=B8=20=EC=82=AD=EC=A0=9C?= =?UTF-8?q?=20=EC=8B=9C=20RustFS(S3)=EC=97=90=EC=84=9C=EB=8F=84=20?= =?UTF-8?q?=ED=8C=8C=EC=9D=BC=20=EC=82=AD=EC=A0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - deleteFromS3 함수 import 추가 - s3_key 또는 s3_url에서 키 추출하여 S3에서 삭제 - S3 삭제 실패해도 DB 레코드는 삭제되도록 처리 --- backend/routes/admin.js | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/backend/routes/admin.js b/backend/routes/admin.js index 73201b7..75973de 100644 --- a/backend/routes/admin.js +++ b/backend/routes/admin.js @@ -7,6 +7,7 @@ import express from "express"; import jwt from "jsonwebtoken"; import { pool, loadTranslations } from "../lib/db.js"; +import { deleteFromS3, s3Config } from "../lib/s3.js"; const router = express.Router(); @@ -316,11 +317,21 @@ router.delete("/logfile", async (req, res) => { const file = rows[0]; - // S3에서 파일 삭제 (선택적 - 실패해도 DB 레코드는 삭제) + // S3에서 파일 삭제 try { - // S3 삭제는 복잡하므로 일단 DB만 삭제 + // s3_key가 있으면 해당 키로, 없으면 URL에서 추출 + const s3Key = + file.s3_key || + (file.s3_url + ? file.s3_url.replace(`${s3Config.publicUrl}/${s3Config.bucket}/`, "") + : null); + if (s3Key) { + await deleteFromS3(s3Config.bucket, decodeURIComponent(s3Key)); + console.log(`[Admin] S3에서 로그 파일 삭제 완료: ${s3Key}`); + } } catch (s3Error) { - console.error("[Admin] S3 삭제 실패:", s3Error); + console.error("[Admin] S3 삭제 실패:", s3Error.message); + // S3 삭제 실패해도 DB 레코드는 삭제 진행 } // DB에서 레코드 삭제