From 8f4c486a00085aea7d2eef3c390170c3344a7676 Mon Sep 17 00:00:00 2001 From: umsangdon Date: Mon, 7 Sep 2026 10:50:36 +0900 Subject: [PATCH] =?UTF-8?q?fix(=EA=B0=9C=EB=B0=9C=ED=99=98=EA=B2=BD):=20vi?= =?UTF-8?q?te=20=ED=94=84=EB=A1=9D=EC=8B=9C=20=EB=8C=80=EC=83=81=EC=9D=84?= =?UTF-8?q?=20127.0.0.1=20=EB=A1=9C=20=EB=B0=95=EC=9D=8C=20=E2=80=94=20/ap?= =?UTF-8?q?i=20=EA=B0=80=20IPv6=20=EB=A1=9C=20=ED=97=9B=EC=A7=9A=EB=8D=98?= =?UTF-8?q?=20=EA=B2=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 계획서 7-1. 화면의 **모든 `/api` 요청이 「Failed to fetch」** 가 되는데 서버는 멀쩡한 증상이 하루 종일 있었음. 원인은 프록시 대상이 `http://localhost:<포트>` 인 것 — Node 18+ 는 `localhost` 를 **IPv6(::1) 먼저** 물고, 백엔드는 `SERVER_HOST=0.0.0.0` (IPv4 전용)으로 떠서 서로 못 만남. 실측 — `127.0.0.1:8001` 200 · `[::1]:8001` 연결 실패. 고친 뒤(vite 재기동 포함) 화면에서 `/api/health` **200**, 로그인 POST **200**. 오늘 겪은 「저장 Failed to fetch」 두 번과 「화면 백지」 세 번이 이것으로 설명됨 — 부팅 때 API 가 죽으면 앱이 아무것도 안 그리고 콘솔 오류도 안 남았음. 공용 파일이라 배분 창(claude-b1) 승인을 받고 고침. 5173·5174 양쪽에 같이 적용됨. Co-Authored-By: Claude Opus 5 (1M context) --- vite.config.ts | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/vite.config.ts b/vite.config.ts index 2dbf28fe..c7e98dd9 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -2,7 +2,12 @@ import { resolve } from "node:path"; import { fileURLToPath } from "node:url"; const __dirname = fileURLToPath(new URL(".", import.meta.url)); -const apiTarget = `http://localhost:${process.env.AISLO_API_PORT ?? "8000"}`; +// ⚠ `localhost` 로 두지 말 것 — Node 18+ 는 그것을 **IPv6(::1) 먼저** 물고, 백엔드는 +// `SERVER_HOST=0.0.0.0`(IPv4 전용)로 뜬다. 그러면 프록시가 `[::1]:<포트>` 로 붙으려다 +// 실패해 화면의 **모든 `/api` 요청이 「Failed to fetch」** 가 된다 — 서버는 멀쩡한데 +// 저장이 실패하고, 부팅 때 죽으면 화면이 통째로 백지가 된다(2026-09-07 실측: +// `127.0.0.1:8001` 200 · `[::1]:8001` 연결 실패). 숫자로 박아 그 갈림을 없앤다. +const apiTarget = `http://127.0.0.1:${process.env.AISLO_API_PORT ?? "8000"}`; /** * Vite 설정 — 임도 설계 웹앱 (Vanilla TS + Three.js)