Static Site Generation(SSG)에서 콘텐츠가 늘어날수록 빌드 시간은 기하급수적으로 증가합니다. 특히 상세 페이지의 개수가 늘어날수록 빌드 시간이 15분까지 늘어나면서 개발 경험에 심각한 악영향을 미쳤습니다.
이러한 비효율적인 개발 워크플로우를 개선하기 위해 고심한 끝에 App Router가 제공하는 SSR + 데이터 캐싱 패턴을 활용하여 빌드 시간을 2분까지 줄인 경험을 이야기하고자 합니다.
Next.js pages router에서 제공하는 SSG는 정적 웹 페이지를 생성하는 데 매우 효과적입니다. 특히 Vercel로 Next.js 애플리케이션을 관리하게 된다면, 캐시 정책과 같은 것들을 자동으로 설정해주어 사용자 네트워크 환경에 관계없이 굉장히 빠른 HTML 서빙 속도를 보장할 수 있었습니다.
그래서 저는 app router를 사용하면서도 SSG를 사용했는데요. app router에서 SSG를 사용하는 방법도 역시 간단합니다.
// somethings/[somethingId]/page.tsx
export async function generateStaticParams() {
const response = await fetch("https://.../somethings");
if (!response.ok) {
throw new Error();
}
// ...
const somethingIds = somethings.map((something) => {
return { somethingId: something.id };
});
return somethingIds;
}
export default function Page({ params }: { params: { somethingId: string } }) {
// ...
return <div>...</div>;
}
Next.js의 훌륭한 API 덕분에 개발자 경험도, 사용자 경험도 좋았습니다.
하지만, 마냥 좋기만 했다면 제가 이 글을 작성하지는 않았을 겁니다.
