Frontend Academy · 강의

SSG, SSR 및 ISR

빌드 시점에 페이지를 정적으로 생성하거나 요청마다 서버에서 렌더링하거나, 증분 정적 재생성을 사용해 일정에 따라 캐시된 페이지를 재검증합니다.

레슨 3/414개 단계

SSG, SSR 및 ISR은(는) CoddyKit의 무료 Frontend Academy 강의입니다. 이것은 4개 중 3번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Frontend Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Frontend Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

세 가지 렌더링 전략

Next.js는 페이지를 렌더링하는 세 가지 방식을 지원합니다: SSG(정적 사이트 생성), SSR(서버 측 렌더링), ISR(증분 정적 재생성)입니다. 각각 서로 다른 장단점이 있습니다.

SSG — 빌드 시 생성

페이지는 빌드 시 정적 HTML로 생성되고 CDN에서 제공됩니다. 가능한 가장 빠른 전달 방식입니다. 다음에 적합합니다: 마케팅 페이지, 블로그, 문서.

페이지 라우터에서의 SSG

페이지에서 getStaticProps를 내보냅니다. 이 함수는 빌드 시 실행되고 컴포넌트에 props를 제공합니다.

// pages/blog/[slug].tsx
export async function getStaticPaths() {
  const slugs = await fetchAllSlugs();
  return { paths: slugs.map(s => ({ params: { slug: s } })), fallback: false };
}

export async function getStaticProps({ params }) {
  const post = await fetchPost(params.slug);
  return { props: { post } };
}

앱 라우터에서의 SSG

기본적으로 비동기 서버 컴포넌트는 빌드 시 데이터를 가져옵니다. 동적 라우트에는 generateStaticParams를 사용하십시오.

// app/blog/[slug]/page.tsx
export async function generateStaticParams() {
  const posts = await fetchAllPosts();
  return posts.map(p => ({ slug: p.slug }));
}

export default async function Post({ params }) {
  const post = await fetchPost(params.slug);
  return <article>{post.body}</article>;
}

SSR — 요청별 생성

페이지는 모든 요청마다 렌더링됩니다. 사용자별 콘텐츠이거나 캐시하기에는 너무 자주 변경되는 콘텐츠에 사용하십시오.

페이지 라우터에서의 SSR

getServerSideProps를 내보냅니다.

// pages/dashboard.tsx
export async function getServerSideProps({ req }) {
  const userId = req.cookies.userId;
  const data = await fetchUserDashboard(userId);
  return { props: { data } };
}

앱 라우터에서의 SSR

dynamic = 'force-dynamic'을 사용하거나 쿠키/헤더를 읽어 요청마다 렌더링하도록 강제하십시오. 쿠키나 헤더를 읽으면 정적 렌더링에서 자동으로 제외됩니다.

// app/dashboard/page.tsx
import { cookies } from 'next/headers';

export default async function Dashboard() {
  const userId = cookies().get('userId')?.value;
  const data = await fetchUserDashboard(userId);
  return <pre>{JSON.stringify(data, null, 2)}</pre>;
}

// Or explicit:
export const dynamic = 'force-dynamic';

ISR — 두 방식의 장점

ISR은 정적 페이지를 제공하면서 N초마다 백그라운드에서 페이지를 재생성합니다. SSG의 속도와 최신에 가까운 데이터를 결합합니다.

페이지 라우터에서의 ISR

getStaticProps에 revalidate를 추가하십시오.

export async function getStaticProps() {
  const posts = await fetchPosts();
  return {
    props: { posts },
    revalidate: 60  // regenerate at most every 60 seconds
  };
}

앱 라우터에서의 ISR

가져오기 옵션에 next: { revalidate: N }을 사용하거나 페이지에 export const revalidate = N을 설정하십시오.

// Option A: per fetch
const posts = await fetch('https://api/posts', { next: { revalidate: 60 } })
  .then(r => r.json());

// Option B: whole page
export const revalidate = 60;

export default async function Page() {
  const posts = await fetch('https://api/posts').then(r => r.json());
  return <Feed posts={posts} />;
}

주문형 재검증

시간 간격을 기다리지 않고 수동으로 재생성을 실행할 수 있습니다(예: CMS 웹훅에서 실행).

// pages/api/revalidate.ts (Pages) or app/api/revalidate/route.ts (App)
import { revalidatePath, revalidateTag } from 'next/cache';

export async function POST(req) {
  const { slug } = await req.json();
  revalidatePath(`/blog/${slug}`);
  return Response.json({ revalidated: true });
}

올바른 전략 선택하기

데이터가 거의 변경되지 않으면 SSG를 사용하십시오(마케팅 페이지, 문서, 블로그). 데이터가 가끔 업데이트되면 ISR을 사용하십시오(CMS 기반 사이트, 전자상거래 목록). 사용자별 콘텐츠에는 SSR을 사용하십시오(대시보드, 계정 페이지).

빠른 확인

ISR(증분 정적 재생성)은 순수한 SSG와 달리 어떤 작업을 수행합니까?

복습: SSG, SSR, ISR

SSG: 빌드 시 생성되며 가장 빠르지만 콘텐츠가 고정됩니다. SSR: 요청마다 생성되며 동적이지만 더 느립니다. ISR: SSG에 예약된 백그라운드 재생성을 더한 방식으로, 최신에 가까운 데이터와 속도를 모두 제공합니다. 페이지 라우터는 getStaticProps/getServerSideProps를 사용합니다. 앱 라우터는 revalidate를 사용하는 비동기 서버 컴포넌트 또는 페이지 수준의 revalidate 상수를 사용합니다. 주문형 업데이트에는 revalidatePath/revalidateTag를 사용합니다.

무료로 시작

AI 튜터와 함께 HTML을(를) 배우세요 — 무료

브라우저에서 실제 코드를 작성하고 실행하며, 24/7 AI 튜터로부터 즉각적인 도움을 받고, 웹이나 앱에서 중단한 부분부터 계속 학습하세요.

코스
41
레슨
163

자주 묻는 질문

“SSG, SSR 및 ISR” 강의는 무료인가요?

네 — “SSG, SSR 및 ISR” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Frontend Academy 강의 전체를 잠금 해제할 수 있습니다. Frontend Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

“SSG, SSR 및 ISR”에서 뭘 배우나요?

빌드 시점에 페이지를 정적으로 생성하거나 요청마다 서버에서 렌더링하거나, 증분 정적 재생성을 사용해 일정에 따라 캐시된 페이지를 재검증합니다. 브라우저에서 직접 실행하는 실습 코드로 Frontend Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.

Frontend Academy을(를) 시작하는 데 경험이 필요한가요?

사전 경험은 필요하지 않습니다. CoddyKit의 Frontend Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 3번째 강의입니다.

“SSG, SSR 및 ISR” 강의는 얼마나 걸리나요?

대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.

이 Frontend Academy 강의에서 코드를 작성하고 실행할 수 있나요?

네. 모든 Frontend Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.

이 강의의 모든 강의

  1. Pages Router와 App Router 비교
  2. 서버 컴포넌트와 클라이언트 컴포넌트
  3. SSG, SSR 및 ISR
  4. Next.js API 경로와 미들웨어
← Frontend Academy(으)로 돌아가기