/** * .next 빌드 캐시 무결성 검증 * * macOS 26 파일시스템 이슈로 .next/ 내 JSON 파일이 손상될 수 있음. * (atomic write 실패 → 데이터 중복 기록) * dev 서버 시작 전 자동 검증하여 손상 시 .next 삭제. */ import { readFileSync, rmSync, existsSync, readdirSync } from 'fs'; import { join } from 'path'; const NEXT_DIR = '.next'; if (!existsSync(NEXT_DIR)) { process.exit(0); } const jsonFiles = []; try { // .next/ 루트의 JSON 파일들 for (const f of readdirSync(NEXT_DIR)) { if (f.endsWith('.json')) jsonFiles.push(join(NEXT_DIR, f)); } // .next/server/ 의 JSON 파일들 const serverDir = join(NEXT_DIR, 'server'); if (existsSync(serverDir)) { for (const f of readdirSync(serverDir)) { if (f.endsWith('.json')) jsonFiles.push(join(serverDir, f)); } } } catch { // 디렉토리 읽기 실패 시 무시 } let corrupted = false; for (const file of jsonFiles) { try { const content = readFileSync(file, 'utf8'); JSON.parse(content); } catch (e) { console.warn(`⚠️ 손상된 캐시 발견: ${file}`); console.warn(` ${e.message}`); corrupted = true; } } if (corrupted) { console.warn('🗑️ .next 캐시를 삭제하고 재빌드합니다...'); rmSync(NEXT_DIR, { recursive: true, force: true }); }