Files
gbpark 00dd9e3a59 fix(frontend): disable standalone + webpackMemoryOptimizations in dev
next dev mode was throwing ENOENT for routes-manifest.json and other
chunk files, leaving /login and other routes permanently 404 after
the first compile. Root cause:

- output: "standalone" is a prod build option; combined with next dev
  it produces chunk paths and manifests that don't match what dev
  expects.
- experimental.webpackMemoryOptimizations evicts compiled modules to
  save memory, but in dev that includes already-served SSR chunks,
  so requests after the eviction window 404 even though the page
  compiled successfully.

Wrap both options in an isDev check so prod build behavior is
preserved while dev no longer self-destructs its own chunks.
Verified on the office Ubuntu invyone-frontend container: /, /login
return 200 and the chunk-loss errors are gone.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-07 23:32:31 +09:00

61 lines
1.9 KiB
JavaScript

/** @type {import('next').NextConfig} */
const isDev = process.env.NODE_ENV !== "production";
const nextConfig = {
// Leaflet 등 DOM 직접 조작 라이브러리와 Strict Mode 충돌 방지
reactStrictMode: false,
// Docker 빌드 최적화 (prod build 전용 — dev에서 켜면 청크 경로/매니페스트가 깨져 ChunkLoadError 발생)
...(isDev ? {} : { output: "standalone" }),
// ESLint 빌드 시 무시 (프로덕션 빌드 성공을 위해)
eslint: {
ignoreDuringBuilds: true,
},
// TypeScript 오류도 무시 (필요한 경우)
typescript: {
ignoreBuildErrors: true,
},
// 실험적 기능: dev에서는 webpackMemoryOptimizations 비활성화
// (Next 15에서 dev 중 컴파일된 청크가 evict되어 404 나는 이슈)
experimental: isDev ? {} : {
webpackMemoryOptimizations: true,
},
// API 프록시 설정 - 백엔드로 요청 전달
// Docker: SERVER_API_URL 사용. 로컬: 127.0.0.1 사용 (localhost는 IPv6 ::1 로 해석되어 ECONNREFUSED 나는 경우 있음)
async rewrites() {
const backendUrl = process.env.SERVER_API_URL || "http://127.0.0.1:8081";
return [
{
source: "/api/:path*",
destination: `${backendUrl}/api/:path*`,
},
];
},
// 개발 환경에서 CORS 처리
async headers() {
return [
{
source: "/api/:path*",
headers: [
{ key: "Access-Control-Allow-Origin", value: "*" },
{ key: "Access-Control-Allow-Methods", value: "GET,POST,PUT,DELETE,OPTIONS" },
{ key: "Access-Control-Allow-Headers", value: "Content-Type, Authorization" },
],
},
];
},
// 환경 변수 (런타임에 읽기)
env: {
// Docker 컨테이너 내부에서는 컨테이너 이름으로 통신
NEXT_PUBLIC_API_URL: process.env.NEXT_PUBLIC_API_URL || "http://localhost:8081/api",
},
};
export default nextConfig;