

처음엔 Server Action으로 구현했는데, Route Handler로 바꾸면서 둘의 차이점이 궁금했다.
현재 구현에는 Route Handler가 더 적합하다.
export async function GET(request: NextRequest) {
return Response.json(data, {
status: 200,
headers: {
'Cache-Control': 'public, max-age=86400'
}
});
}'use server'
async function handleSubmit(formData: FormData) {
// 폼 처리 로직
}const res = await fetch(apiUrl, {
next: { revalidate: 86400 }
});const cachedData = cache(async () => {
const res = await fetch(apiUrl);
return res.json();
});if (!res.ok) {
return Response.json(
{ error: '데이터 조회 실패' },
{ status: 500 }
);
}try {
const data = await getCampingData();
} catch (error) {
throw new Error('데이터 조회 실패');
}Route Handler에서도 캐싱하는 코드, React Query에서도 캐싱하는 코드가 중복되어 보이는데 문제가 없을까?
둘 다 캐싱을 유지하는 것이 권장된다.
Next.js의 revalidate와 React Query의 staleTime 캐싱은 서로 다른 레벨에서 동작한다.
서버 사이드 캐싱 (revalidate)
서버에서 외부 API 응답을 캐시하여 서버 부하를 줄임
클라이언트 사이드 캐싱 (staleTime)
브라우저에서 데이터를 캐시하여 사용자 경험을 개선
두 캐싱 전략은 각기 다른 레벨에서 작동하며, 함께 사용될 때 최적의 성능과 사용자 경험을 제공한다.
자주 변경되지 않는 데이터(예: 캠핑장 데이터)의 경우, 이러한 이중 캐싱 전략이 매우 효과적이다.