프론트엔드와 Next.js를 공부하며, 기본 개념이지만 자주 헷갈리는 렌더링 방식을 정리해보자.
Next.js 의 다양한 렌더링 개념에 앞서 React 앱의 디폴트 랜더링 방식인 CSR에 대해 알아보자.
<body>
태그가 비어 있음💡 FCP (First Contentful Paint) 가 느린데 이는 접속 요청부터 처음 브라우저에 컨텐츠가 렌더링 되기까지 걸리는 시간을 말한다
최소한의 HTML 을 반환하기에 SEO 최적화가 안된다
CSR 렌더링의 특징 중 하나는 초기에 빈 HTML 페이지에서 브라우저가 동적으로 다른 페이지들도 렌더링 한다.
Next 에서 제공하는 SSR 는 CSR 의 단점을 보완하면서도 빠른 클라이언트 라우팅을 유지하는 방식이다.
💡 요청 페이지와 관련된 JS 리소스만을 실행하고 전달하기 때문에 FCP 와 TTI 가 CSR 방식보다 훨씬 빠르다!
이미 렌더링 되어 완성된 HTML 페이지를 서버에서 보내기 때문에 SEO (Search Engine Optimization) 가 뛰어나다.
HTML이 렌더링된 후 hydration을 통해 상호작용이 가능한 상태가 되었을 때를 TTI(Time To Interactive)라고 한다.
렌더링 방식 | FCP (최초 콘텐츠 렌더링 시점) | TTI (상호작용 가능 시점) |
---|---|---|
CSR | 느림 | 느림 (FCP = TTI) |
SSR | 빠름 | FCP보다 약간 느림 |
CSR과 SSR은 페이지 요청 시마다 서버에서 데이터를 받아오므로 서버 상태에 따라 페이지 로딩 속도가 느려지거나 오류가 발생할 수 있다. SSG 는 이런 문제를 해결하면서 SSR 의 장점을 가지고 있다.
💡 미리 생성된 정적 HTML을 제공해서 실시간 서버 렌더링에 비해 서버 부하가 적다.
빌드 시점에 데이터가 고정되기 때문에 동적 컨텐츠를 가진 페이지에는 적합하지 않다.
Next.js 에서 SSG 의 단점인 데이터 고정을 보완하기 위해 도입된 방식이다.
💡 ISR은 HTML을 미리 생성해두기 때문에 빠르면서 데이터가 자동으로 주기적 갱신이 된다.
렌더링 방식 | FCP | TTI | 페이지 이동 속도 | SEO | 데이터 최신성 | 서버 부하 |
---|---|---|---|---|---|---|
CSR | 느림 | 느림 | 빠름 | 낮음 | 최신 | 낮음 |
SSR | 빠름 | 중간 | 중간 | 높음 | 최신 | 높음 |
SSG | 매우 빠름 | 중간 | 중간 | 높음 | 오래됨 | 낮음 |
ISR | 매우 빠름 | 중간 | 중간 | 높음 | 주기적 최신 | 낮음 |
types | use case | 예시 |
---|---|---|
CSR | 유저 상호작용이 많고 SEO가 중요하지 않을 때 | 채팅 앱, 어드민 대시보드 |
SSR | 검색엔진 최적화가 중요하고 실시간 데이터가 필요할 때 | 블로그, 뉴스, 상품 디테일 |
SSG | 변경이 거의 없는 정적인 컨텐츠를 제공할 때 | 랜딩 페이지, 문서 사이트 |
ISR | 컨텐츠가 주기적으로 업데이트 될 때 | 블로그, 뉴스, 상품 리스트 |
Next.js의 가장 큰 강점 중 하나는 CSR, SSR, SSG, ISR 등 다양한 렌더링 방식을 자유롭게 조합할 수 있다는 점이다. Hybrid Rendering 을 활용하여 페이지의 특성과 목적에 맞춰서 사용자에게는 더 빠르고 안정적인 웹 경험을 제공할 수 있다.