⚡ 성능 · 캐시 설계

앱 캐시 설계 — 페이지별 데이터 페칭·렌더링 최적화

app.mealfred.com 6개 영역을 멀티에이전트로 감사해 느린 근본원인을 찾고, 캐시 처방을 impact/effort로 우선순위화했다. P0(즉시·큰효과)는 구현·검증 완료. 자가검증으로 오탐(이미 처리됨/정상)도 정리했다.

← 문서 허브 · 2026-06-15 · 감사 7에이전트
1

느린 근본원인 Top 3

① 홈(/) 자녀전환 워터폴 = 단일 최악. app/page.tsxgetUser→children→meal_logs 순차 await + ingredients-light.json(45KB) 2회 fetch + meal_logs를 7·56·90일 3개 윈도 따로 풀스캔. 'use client'라 전부 브라우저에서 직렬.
② care/page.tsx 무제한 meal_logs. 날짜 상한 없이 전체 이력 풀로드 + children 테이블 3~4회 따로 쿼리. 기록 쌓일수록 선형 증가.
③ 코치 크론 per-child 직렬 루프(장애 아님 — 50s 가드+라운드로빈 有, 자녀↑시 처리량 한계만).
2

P0 처방 — 구현·배포 완료

P0처방파일상태
P0-1ingredients-light 중복 fetch 제거 + catMap 메모이즈app/page.tsx완료
P0-2meal_logs 7·56·90일 3윈도 동시 발사(await 전 트리거)app/page.tsx완료
P0-3care meal_logs 365일 상한(다년 누적 차단·미래 식단표 유지)app/care/page.tsx완료
P0-4children 3쿼리→1보류 컬럼 부재시 메인로드 실패 위험 = 의도된 안전패턴(홈도 분리). 미적용.
P0-5정적 JSON 모듈스코프 1회 로더 신설·공용lib/staticData.ts (신규) · 홈·care·report완료

검증: tsc --noEmit 내 파일 0 에러 · next build 통과 · 코칭 세션 파일(coach*.ts·food-graph.json) 무변경.

3

P1 / P2 — 구현·배포 완료

⚠️ Next 16 핵심: cookies()를 읽는 페이지는 무조건 동적 → revalidate 무효. 그래서 ISR은 쿠키 안 읽는 공개 페이지만 적용.

항목적용
blog/[slug]SSG+ISR ● 쿠키無 admin 클라(공개글 필터)+generateStaticParams+revalidate=1d. 빌드 확인 ● 1d 1y
recipe/[id]getUser(쿠키)라 ISR 무효 → 중복쿼리 cache() dedup + getUser 병렬(force-dynamic 유지)
plancomposePlan(DB) unstable_cache 입력별 1h 캐시
tipsallSeeds() 모듈 호이스팅(렌더마다 재계산 제거)
홈(P2-2)코치편지 크론 fetch 5s AbortController 타임아웃 → 초과 시 어제 편지 즉시(30s 멈춤 제거)
admin(P2-1)보류 전부 auth 동적+모더레이션 실시간 필요 → ISR 무효·부적합

tsc 0에러 · next build 통과 · 코칭 세션 파일 무변경.

4

정적 데이터 전략 + 오탐 정정

데이터처리
ingredients-light.json 45KBHTTP Cache(next.config) 이미 有 + P0-5 모듈캐시로 중복·재파싱 제거
food-graph.json 156KB서버 lib importgraphSource.ts만 경유(클라 노출 금지·SQL 전환 단일 진입점). 신규 로더는 클라 /public 전용

오탐 정정: next.config Cache-Control 이미 있음 · health force-dynamic 정상 · NUTRI_MAP 이미 모듈상수 · 홈 Server Component 전환은 회귀위험 커 비권장.

5

안전수칙 — 코칭 세션 충돌 회피

코칭 세션이 같은 레포에서 활발히 작업(food-graph.json·gen-food-graph.py·coach-data.test.ts·dietary4u 스크립트). 캐시 작업은 겹치는 파일 0 확인 후 진행했다.

lib/coach*.ts·app/api/cron/coach 본문 로직 건드리지 않음food-graph.json·graphSource.ts 수정 금지(데이터/코칭 소유) ③ 새 로더는 클라 /public JSON 전용 ④ 모든 변경 additive·폴백 보존.
← 문서 허브로 · 앱 캐시 설계 (2026-06-15)