fix(gemini): 라우트 정리(deleteFile)를 응답에서 분리

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) <noreply@anthropic.com>
This commit is contained in:
sangwook yoo 2026-06-02 17:52:20 +09:00
parent 49b2d0940f
commit 654b8d6e08

View File

@ -225,11 +225,11 @@ export async function POST(req) {
return NextResponse.json({ error: { code: 'GEMINI_FAILED', message: error?.message || 'Gemini 호출에 실패했습니다.' } }, { status: 500 }) return NextResponse.json({ error: { code: 'GEMINI_FAILED', message: error?.message || 'Gemini 호출에 실패했습니다.' } }, { status: 500 })
} finally { } finally {
if (uploadedFileName) { if (uploadedFileName) {
try { // temp 파일 삭제는 응답을 지연시키지 않도록 await 하지 않고 분리(fire-and-forget)한다.
await fileManager.deleteFile(uploadedFileName) // 정리용 네트워크 호출이 행(hang)되더라도 클라이언트 응답이 막히지 않는다(미삭제 시 Gemini 측에서 자동 만료).
} catch (deleteError) { fileManager.deleteFile(uploadedFileName).catch((deleteError) => {
logger.warn('[gemini/floor-plan] deleteFile failed', deleteError?.message || deleteError) logger.warn('[gemini/floor-plan] deleteFile failed', deleteError?.message || deleteError)
} })
} }
} }
} }