SSG vs SSR in Next.js: 정적 생성과 서버 사이드 렌더링의 차이점과 적용 사례.

작성일 :

SSG vs SSR in Next.js: 정적 생성과 서버 사이드 렌더링의 차이점과 적용 사례

Next.js는 React 기반의 프레임워크로, 서버 사이드 렌더링(SSR)과 정적 사이트 생성(SSG)을 쉽게 구현할 수 있는 도구를 제공합니다. 이 두 가지 렌더링 방식은 각각의 장단점과 사용 사례가 다릅니다. 이번 글에서는 이 두 가지 렌더링 방식의 차이점과 실제 적용 사례를 살펴보겠습니다.

Static Site Generation (SSG)

Static Site Generation(SSG)은 빌드 타임에 HTML 파일을 생성하는 방식입니다. 이를 통해 최대한의 성능을 얻을 수 있으며, 정적인 콘텐츠를 미리 렌더링하여 제공하기 때문에 페이지 로딩 속도가 매우 빠릅니다. 어떠한 백엔드 서버 없이도 정적 파일을 배포할 수 있어 비용 절감에도 큰 도움이 됩니다.

특징

  • 빠른 로딩 속도: 미리 생성된 정적 파일을 제공하므로 로딩 속도가 빠릅니다.
  • SEO 친화적: 검색 엔진 최적화(SEO)에도 유리합니다. 모든 콘텐츠가 빌드 타임에 생성되기 때문에 검색 엔진이 쉽게 크롤링 할 수 있습니다.
  • 보안: 서버 없이 정적 파일만 제공하므로, 웹 서버의 보안 취약점을 줄일 수 있습니다.

사용 사례

  • 정적 블로그 또는 문서 사이트: 자주 변경되지 않는 콘텐츠로 구성된 블로그나 문서 사이트에 적합합니다. 예를 들어, 개인 블로그, 회사의 기술 문서 사이트 등이 이에 해당됩니다.
  • 마케팅 페이지: 특정 이벤트나 프로모션을 알리기 위한 사이트. 예를 들어, 제품 런칭 페이지와 같은 단일 페이지 애플리케이션(SPA)입니다.
javascript
// pages/index.js
export async function getStaticProps() {
  const data = await fetchData(); // 데이터를 가져오는 함수
  return {
    props: { data }, // 빌드 타임에 데이터 전달
  };
}

const HomePage = ({ data }) => {
  return (
    <div>
      <h1>Homepage</h1>
      <p>{data.description}</p>
    </div>
  );
};

export default HomePage;

Server-Side Rendering (SSR)

Server-Side Rendering(SSR)은 페이지 요청 시 서버에서 HTML을 생성하여 클라이언트에 전달하는 방식입니다. 매 요청마다 서버에서 새 HTML을 만들어 반환하므로 최신 데이터를 항상 보여줄 수 있지만, 서버의 부하가 높은 단점이 있을 수 있습니다.

특징

  • 실시간 데이터: 요청 시마다 최신 데이터를 제공할 수 있어, 실시간으로 변하는 데이터에 적합합니다.
  • SEO 친화적: 최초 페이지 로딩 시 서버에서 모든 HTML을 렌더링하여 보내므로, SEO에 유리합니다.
  • 복잡한 로직 처리: 서버 사이드에서 복잡한 연산이나 데이터 처리를 할 수 있습니다.

사용 사례

  • 커머스 사이트: 제품 정보와 재고 상태가 실시간으로 변할 수 있는 쇼핑몰 사이트에 적합합니다. 사용자의 요청마다 최신 정보를 반영할 수 있습니다.
  • 소셜 미디어 플랫폼: 사용자 간 실시간 상호작용이 필요한 소셜 미디어 애플리케이션에 유리합니다.
javascript
// pages/product/[id].js
export async function getServerSideProps(context) {
  const { id } = context.params;
  const res = await fetch(`https://api.example.com/products/${id}`);
  const product = await res.json();

  return {
    props: { product }, // 서버에서 데이터 전달
  };
}

const ProductPage = ({ product }) => {
  return (
    <div>
      <h1>{product.name}</h1>
      <p>{product.description}</p>
      <p>Price: {product.price}</p>
    </div>
  );
};

export default ProductPage;

결론

Next.js에서 제공하는 SSG와 SSR은 각각의 장단점을 가지고 있으며, 필요한 경우 혼합하여 사용할 수도 있습니다. SSG는 정적 콘텐츠와 빠른 로딩 속도에 적합하며, SSR은 실시간 데이터와 복잡한 로직을 처리하는 데 강점이 있습니다. 프로젝트의 요구에 맞게 이 두 가지 방식 중 하나를 선택하거나, 필요에 따라 혼합하여 효율적인 웹 애플리케이션을 구축할 수 있습니다.