현재 대체로 서버사이드 렌더링이 되어 있지만, api/search, /new, /search의 경우 static하게 되어 있는 걸 확인할 수 있습니다.
→ 우리가 원하는 형태가 아님.
→ 그렇다면 왜 static 하게 되어 있을까?
import { NextResponse } from 'next/server';
import { searchUsers } from '@/service/user';
export async function GET() {
return searchUsers().then((data) => NextResponse.json(data));
}
현재 GET에 다른 request를 받지 않고, 그에 기반해서 무언가를 다르게 처리하지 않으며 항상 동일한 함수(searchUsers)를 호출함으로 + Next에서 제공해주는 fetch를 사용하지 않으니깐
Next.js에서 제공해주는 fetch를 이용해서 별도로 cache컨트롤을 해주지 않는 이상, 이렇게 정적인 코드는 무조건 SSG로 행동을 하게 됩니다.
따라서 아래와 같이 처리를 해주어야합니다.
//app>api>search>route.ts
import { NextResponse } from 'next/server';
import { searchUsers } from '@/service/user';
export const dynamic = 'force-dynamic';
export async function GET() {
return searchUsers().then((data) => NextResponse.json(data));
}
//src > app > search > page.tsx
import React from 'react';
import UserSearch from '@/components/UserSearch';
import { Metadata } from 'next';
export const dynamic = 'force-dynamic';
export const metadata: Metadata = {
title: 'User Search',
description: 'Search users to follow',
};
export default function SearchPage() {
return <UserSearch />;
}
라우트 핸들러는 별도로 동적인 걸 검사하거나 데이터를 쓰지는 않지만 그렇지만 항상 요청이 오면 그때 항상 수행을 해야한다고 판단을 합니다.