import { cache } from 'react'; import { ResultDto } from '@/types/response/common'; import { fetchPublicJson } from '@/lib/utils/publicFetch'; import Config, { NavMenuLink } from '@/types/config'; // 전역 익명 설정 — 모든 사용자 공통이라 Data Cache 안전. React.cache(요청 내 dedupe) + tag 'site-config'(요청 간). // 60s 로 짧게 유지 → Admin 설정 변경(예: OAuth on/off, 메뉴)이 ~1분 내 프론트 반영. TTFB 이득은 대부분 유지. // 즉시 반영이 필요하면 POST /api/revalidate?tag=site-config (REVALIDATE_SECRET 설정 시). const CONFIG_REVALIDATE = 60; const CONFIG_TAGS = ['site-config']; // Config 값 조회 export const fetchConfig = cache(async (): Promise> => { return await fetchPublicJson('/api/config', { revalidate: CONFIG_REVALIDATE, tags: CONFIG_TAGS }); }); // 관리자 관리형 상단 메뉴 조회 (노출 항목만 정렬순) export const fetchNavMenu = cache(async (): Promise> => { return await fetchPublicJson<{ items: NavMenuLink[] }>('/api/config/nav-menu', { revalidate: CONFIG_REVALIDATE, tags: CONFIG_TAGS }); });