From 654b8d6e08361105d7542476ea648614657a83bb Mon Sep 17 00:00:00 2001 From: sangwook yoo Date: Tue, 2 Jun 2026 17:52:20 +0900 Subject: [PATCH] =?UTF-8?q?fix(gemini):=20=EB=9D=BC=EC=9A=B0=ED=8A=B8=20?= =?UTF-8?q?=EC=A0=95=EB=A6=AC(deleteFile)=EB=A5=BC=20=EC=9D=91=EB=8B=B5?= =?UTF-8?q?=EC=97=90=EC=84=9C=20=EB=B6=84=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit finally 에서 await fileManager.deleteFile(...) 가 catch 의 return 을 게이팅해, 정리용 네트워크 호출이 행되면 500 응답조차 클라이언트로 송신되지 않던 문제를 해소한다. - deleteFile 을 await 하지 않고 fire-and-forget + .catch 로 분리해 응답을 정리 완료에 묶지 않음 - 상주 Node 서버(PM2 next start)이므로 응답 후에도 detached 삭제가 정상 완료되며, 미삭제 시에도 Gemini 측에서 자동 만료 - 클라이언트 120s 타임아웃과 짝을 이뤄 한쪽이 행되어도 스피너에 갇히지 않음 Co-Authored-By: Claude Opus 4.8 (1M context) --- src/app/api/gemini/floor-plan/route.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/app/api/gemini/floor-plan/route.js b/src/app/api/gemini/floor-plan/route.js index 8299b07f..6b50d5ae 100644 --- a/src/app/api/gemini/floor-plan/route.js +++ b/src/app/api/gemini/floor-plan/route.js @@ -225,11 +225,11 @@ export async function POST(req) { return NextResponse.json({ error: { code: 'GEMINI_FAILED', message: error?.message || 'Gemini 호출에 실패했습니다.' } }, { status: 500 }) } finally { if (uploadedFileName) { - try { - await fileManager.deleteFile(uploadedFileName) - } catch (deleteError) { + // temp 파일 삭제는 응답을 지연시키지 않도록 await 하지 않고 분리(fire-and-forget)한다. + // 정리용 네트워크 호출이 행(hang)되더라도 클라이언트 응답이 막히지 않는다(미삭제 시 Gemini 측에서 자동 만료). + fileManager.deleteFile(uploadedFileName).catch((deleteError) => { logger.warn('[gemini/floor-plan] deleteFile failed', deleteError?.message || deleteError) - } + }) } } }