CS 공부/렌더링 과정

(CS) [렌더링 과정] SSG

그린티_ 2025. 11. 3. 16:02
반응형

SSG란? (정적 사이트 생성)

페이지를 빌드 시점(build time)에 HTML 파일로 미리 생성해두고 요청 시에는 서버가 아닌 CDN이나 정적 호스팅을 통해 즉시 제공하는 방식

  • 사용자가 웹 사이트 접속 시 브라우저는 완성된 HTML을 그대로 제공
  • 추가 페이지 요청 시 미리 생성해 둔 해당 페이지의 HTML을 내보냄
  • 데이터가 자주 바뀌지 않는 페이지에 매우 적합
  • Next.js, Gatsby, Hugo 등에서 사용 가능

CDN

  • 분산된 서버 네트워크
  • 사용자에게 더 빠르게 콘텐츠 제공
    • ex) 한국 사용자가 미국에 있는 서버에서 사이트를 열면 거리만큼 느려짐
    • 그래서 CDN은 한국, 일본, 싱가포르 등 아시아 지역에도 서버가 있어서 가장 가까운 서버에서 콘텐츠를 전달함

정적 호스팅

  • 정적 호스팅은 정적인 파일(HTML, CSS, JS 등)을 직접 서빙하는 웹 호스팅 방식
  • 백엔드 로직이 따로 필요 없어서 HTML, CSS, JS 파일을 그대로 저장해 두고, URL 요청 시 그냥 바로 제공함

간단하게 보면

  • 정적 호스팅은 정적 파일을 저장하고 제공하는 공간
  • CDN은 그 파일을 더 빠르게 전 세계에 퍼뜨려주는 시스템
  • 실제로는 정적 호스팅 + CDN을 같이 씀

작동 흐름

프로젝트 빌드 시점 → 모든 페이지의 HTML 생성 → 정적 파일로 저장
↓
브라우저가 요청 → 미리 생성된 HTML을 그대로 응답
  • 서버는 실시간으로 HTML을 생성하지 않고 이미 생성된 정적 파일만 전달
  • 대부분 CDN에 캐시되어 있어 응답 속도가 매우 빠름

예제 코드 (Next.js)

// app/posts/[id]/page.tsx

type Props = {
  params: { id: string }
}

export async function generateStaticParams() {
  const res = await fetch("https://api.example.com/posts")
  const posts = await res.json()

  return posts.map((post: any) => ({
    id: post.id.toString(),
  }))
}

export default async function PostPage({ params }: Props) {
  const res = await fetch(`https://api.example.com/posts/${params.id}`, {
    cache: 'force-cache', // 기본값 → SSG
  })
  const post = await res.json()

  return <div>{post.title}</div>
}
  • Next.js App Router에서 /posts/[id] 형태의 동적 경로를 정적으로 생성하는 SSG 구조
  • generateStaticParams()를 통해 어떤 게시글 ID를 미리 빌드할지 정함
  • page.tsx에서 해당 ID에 대한 데이터를 fetch해서 정적 HTML을 생성
  • 그 후 사용자가 해당 페이지 요청 시 그대로 정적 HTML을 브라우저에서 보여줌

장점

  • 매우 빠른 응답 속도 (HTML이 미리 존재)
  • 서버 부하 없음 (서버 없이도 배포 가능)
  • SEO에 최적화 (크롤러가 정적 콘텐츠 바로 읽을 수 있음)
  • CDN을 통한 글로벌 배포 용이

단점

  • 데이터가 자주 바뀌는 페이지에는 부적합
  • 빌드 시간이 오래 걸릴 수 있음 (페이지 수가 많을 경우)
  • 실시간 요청 반영이 불가 → 업데이트하려면 다시 빌드 필요

실제 사용 사례

  • 회사 소개 페이지, 블로그, 마케팅 랜딩 페이지 등
  • 게시물이나 제품 정보가 자주 바뀌지 않는 정적 콘텐츠 중심의 사이트
반응형

'CS 공부 > 렌더링 과정' 카테고리의 다른 글

(CS) [렌더링 과정] ISR  (0) 2025.11.03
(CS) [렌더링 과정] SSR  (0) 2025.11.02
(CS) [렌더링 과정] CSR  (0) 2025.11.01