SSR이란 무엇인가

SSR 동작 원리

  1. 사용자 요청: 사용자가 웹 브라우저에서 특정 URL을 요청

  2. 서버 처리: 서버는 해당 요청을 처리해 필요한 데이터를 가져오고, HTML 페이지를 생성

  3. HTML 전달: 생성된 HTML 페이지가 클라이언트(브라우저)로 전달됨

  4. 클라이언트 렌더링: 브라우저는 전달받은 HTML을 렌더링하고, 이후 Javascript가 활성화되어 페이지와 상호 작용이 가능해짐

SSR 장점과 단점

ISR?

ISR 활용 사례

ISR vs SSG vs SSR

방식설명장점단점
SSG빌드 시 정적 HTML 생성빠르고 안정적빌드 이후 업데이트 불가
SSR요청 시 서버에서 HTML 생성실시간 데이터 반영느리고 서버 부하
ISR빌드 시 정적 HTML 생성 + 정기적 재생성SSG와 SSR의 장점 결합복잡도 증가

HydrateRoot

사용하는 부분

1. 서버 사이드 렌더링: 서버에서 HTML을 렌더링하여 브라우저에 전달하고, 클라이언트에서 React 애플리케이션으로 동작을 이어갈 때 사용됨

2. React의 동적 기능 활성화: 서버에서 생성된 HTML에는 React 상태 관리, 이벤트 핸들러가 포함되지 않음

3. 클라이언트에서 추가적인 렌더링 방지: hydrateRoot는 서버에서 생성된 HTML과 클라이언트의 React 트리를 비교하며, 재렌더링을 최소화 (초기 로딩 성능을 개선 가능)

4. React 18의 새로운 동시성 기능 활용: React의 Concurrent Mode를 지원 (동시성 활용해 UI 업데이트를 더 효율적으로 처리 가능)

사용 시 주의 사항

1. 서버에서 제공된 HTML과 클라이언트 React 상태 일치: 서버에서 렌더링된 HTML과 클라이언트에서 초기화된 React 상태가 다르면, React는 이를 경고하고 DOM을 수정

2. Strict Mode 사용하기

import { hydrateRoot } from "react-dom/client";
import App from "./App";

const container = document.getElementById("root");
hydrateRoot(
  container,
  <React.StrictMode>
    <App />
  </React.StrictMode>,
);

3. 동적 데이터: 서버에서 렌더링된 데이터가 시간이 지나면서 변경될 경우, 클라이언트와 동기화하는 추가 로직이 필요


SSR를 직접 구현할 필요가 있을까?