뒤로가기

웹 렌더링 전략: SSR, CSR, SSG, ISR 비교

rendering

웹 애플리케이션의 렌더링 전략은 성능, SEO, 사용자 경험에 직접적인 영향을 미칩니다. SEO 요구사항이 증가하고 Core Web Vitals와 같은 성능 지표가 중요해지면서, 상황에 맞는 적절한 렌더링 전략을 선택하는 것이 필수적입니다.

이 글에서는 주요 렌더링 전략인 SSR, CSR, SSG, ISR의 특징과 차이점을 살펴보고, 각 전략이 적합한 상황을 파악하겠습니다.

SSR (Server Side Rendering)

동작 방식

SSR은 서버에서 HTML을 생성하여 클라이언트에 전달하는 가장 고전적인 렌더링 방식입니다. 사용자가 페이지를 요청할 때마다 서버에서 동적으로 HTML을 렌더링합니다.

과거에는 Spring Boot와 같은 백엔드 프레임워크에서 템플릿 언어를 사용하여 HTML을 생성했습니다. Next.js와 같은 현대 프레임워크는 프론트엔드에 특화된 SSR을 제공하며, 서버와 클라이언트 렌더링을 분리할 수 있게 합니다.

핵심 특징

Next.js의 SSR은 서버와 클라이언트 간의 렌더링을 분리합니다. 서버에서 초기 HTML을 생성하고, 클라이언트에서 인터랙션을 처리하는 하이드레이션을 수행합니다. 이를 통해 서버 부하를 최적화하고 빠른 초기 로딩을 제공할 수 있습니다.

SSR을 효과적으로 사용하려면 모든 것을 서버에서 렌더링하거나 클라이언트에서만 렌더링해서는 안 됩니다. 각 컴포넌트의 역할에 따라 서버와 클라이언트 렌더링을 적절히 분배해야 합니다.

CSR (Client Side Rendering)

동작 방식

CSR은 클라이언트에서 JavaScript를 실행하여 화면을 렌더링하는 방식입니다. 서버는 최소한의 HTML과 JavaScript 번들을 전달하고, 브라우저에서 실제 렌더링이 수행됩니다.

핵심 특징

React의 등장과 함께 대중화된 CSR은 현대 웹 애플리케이션 개발 방식을 근본적으로 변화시켰습니다. 클라이언트에서 화면을 동적으로 생성함으로써 풍부한 사용자 인터랙션과 SPA(Single Page Application) 경험을 제공할 수 있습니다.

CSR의 주요 장점은 서버 부하 감소와 빠른 페이지 전환입니다. 하지만 초기 로딩 시간이 길고 SEO에 불리하다는 단점이 있습니다.

SSG (Static Site Generation)

동작 방식

SSG는 빌드타임에 HTML을 미리 생성하여 정적 파일로 제공하는 방식입니다. 서버는 빌드된 HTML을 그대로 반환하므로 런타임 렌더링 비용이 없습니다.

SSR과의 차이점

SSR은 요청마다 서버에서 HTML을 새로 생성하지만, SSG는 빌드타임에 한 번만 생성합니다. 정적인 컨텐츠의 경우 매 요청마다 동일한 HTML을 생성하는 것은 불필요한 작업입니다. SSG는 이러한 비효율을 제거하여 서버 부하를 대폭 줄입니다.

자동 최적화

Next.js는 컴포넌트를 분석하여 SSG가 가능한 컴포넌트는 자동으로 빌드타임에 렌더링하고, 동적 데이터가 필요한 컴포넌트는 SSR로 처리합니다. 이를 통해 개발자가 명시적으로 지정하지 않아도 최적의 렌더링 전략을 적용할 수 있습니다.

ISR (Incremental Static Regeneration)

동작 방식

ISR은 SSG와 SSR의 장점을 결합한 방식입니다. 빌드타임에 정적 HTML을 생성하지만, 일정 간격으로 백그라운드에서 새로운 데이터를 반영하여 페이지를 재생성합니다.

SSG와 SSR의 균형

SSG는 빠른 로딩과 낮은 서버 부하를 제공하지만 최신 데이터를 반영하지 못합니다. SSR은 최신 데이터를 제공하지만 요청마다 렌더링 비용이 발생합니다.

정적 컨텐츠가 시간에 따라 조금씩 변하는 경우, 매번 동적으로 렌더링하는 것은 비효율적이지만 최신 데이터 반영은 필요합니다. ISR은 이러한 요구사항을 해결합니다.

재생성 전략

ISR은 설정된 재검증(revalidation) 간격에 따라 백그라운드에서 페이지를 재생성합니다. 사용자는 항상 빠른 정적 페이지를 받으면서도, 일정 시간이 지나면 최신 데이터가 반영된 페이지를 받게 됩니다.

ISR은 Next.js에서 처음 도입된 개념으로, 현재 많은 프레임워크에서 지원하고 있습니다.

렌더링 전략 비교

전략 렌더링 시점 서버 부하 최신 데이터 초기 로딩 SEO
SSR 요청마다 높음 [지원] 항상 최신 빠름 [지원] 우수
CSR 클라이언트 낮음 [지원] 최신 가능 느림 [미지원] 불리
SSG 빌드타임 매우 낮음 [미지원] 빌드 시점 매우 빠름 [지원] 우수
ISR 빌드타임 + 재검증 낮음 [지원] 주기적 업데이트 매우 빠름 [지원] 우수

적합한 사용 사례

SSR

  • 사용자별로 다른 컨텐츠를 제공하는 대시보드
  • 실시간 데이터가 중요한 서비스
  • 인증이 필요한 개인화된 페이지

CSR

  • 인터랙션이 많은 SPA
  • SEO가 중요하지 않은 관리자 페이지
  • 클라이언트에서 복잡한 상태 관리가 필요한 경우

SSG

  • 블로그, 문서 사이트
  • 마케팅 랜딩 페이지
  • 거의 변경되지 않는 정적 컨텐츠

ISR

  • 전자상거래 상품 목록
  • 뉴스 사이트
  • 자주 변경되지 않지만 주기적 업데이트가 필요한 컨텐츠

프레임워크 선택

Next.js는 SSR, CSR, SSG, ISR을 모두 지원하여 상황에 맞는 전략을 유연하게 선택할 수 있습니다. 하나의 애플리케이션 내에서도 페이지별로 다른 렌더링 전략을 적용할 수 있어 효율적입니다.

특정 렌더링 방식만 사용하는 경우, 해당 방식에 특화된 프레임워크를 선택하는 것도 고려할 수 있습니다. 예를 들어 순수 SSG만 필요하다면 Astro나 Eleventy 같은 정적 사이트 생성기가 더 적합할 수 있습니다.

결론

렌더링 전략의 선택은 서비스의 특성, SEO 요구사항, 성능 목표에 따라 결정되어야 합니다. 각 전략의 특징과 트레이드오프를 이해하고, 페이지별로 적절한 전략을 적용하는 것이 중요합니다.

현대 프레임워크들은 여러 렌더링 전략을 유연하게 조합할 수 있게 지원하므로, 하나의 전략에 국한되지 않고 상황에 맞는 최적의 조합을 선택할 수 있습니다.