중급GoogleNaver
렌더링 패턴별 SEO (CSR vs SSR vs SSG vs ISR) 장단점 비교
핵심 요약 (TL;DR)
다양한 웹 렌더링 방식이 크롤 버짓과 인덱싱 속도에 미치는 영향을 비교 분석하고, 서비스 아키텍처별 최적의 SEO 렌더링 전략을 제안합니다.
웹 렌더링 패턴 전체 지도
웹 페이지가 브라우저에 표시되기까지 "어디서, 언제 HTML을 생성하는가"가 SEO에 결정적 영향을 미칩니다. 렌더링 패턴은 크게 6가지로 분류됩니다.
| 패턴 | 약자 | HTML 생성 위치 | HTML 생성 시점 | 대표 프레임워크 |
|---|---|---|---|---|
| Client-Side Rendering | CSR | 브라우저 (클라이언트) | 사용자 방문 시 | React+Vite, Vue+Vite, Angular |
| Server-Side Rendering | SSR | 서버 | 사용자 요청 시 (런타임) | Next.js, Nuxt.js, Remix |
| Static Site Generation | SSG | 빌드 서버 | 배포 시 (빌드 타임) | Next.js, Astro, Gatsby, Hugo |
| Incremental Static Regeneration | ISR | 서버 + CDN | 빌드 타임 + 주기적 재생성 | Next.js |
| Streaming SSR | - | 서버 | 요청 시 (청크 단위 전송) | Next.js App Router, Remix |
| Partial Hydration / Islands | - | 서버 (정적) + 클라이언트 (인터랙티브) | 빌드/요청 시 | Astro, Fresh(Deno) |
CSR (Client-Side Rendering): 클라이언트 렌더링
동작 원리
- 서버가 빈 HTML 셸 + JS 번들 링크를 반환
- 브라우저가 JS를 다운로드·파싱·실행
- JS가 API를 호출하여 데이터를 가져옴
- JS가 DOM을 구성하고 화면에 콘텐츠 렌더링
SEO 영향 분석
| 항목 | 영향 | 상세 |
|---|---|---|
| 크롤 가능성 | ❌ 매우 나쁨 | 초기 HTML에 콘텐츠 없음. Googlebot만 JS 렌더링 가능하나 지연 있음 |
| 인덱싱 속도 | ❌ 느림 | 렌더링 큐 대기 (수초~수주). 신규 콘텐츠가 적시에 인덱싱되지 않음 |
| 크롤 버짓 | ❌ 비효율적 | JS 렌더링에 5~10배 리소스 소비. 대규모 사이트에서 크롤 버짓 고갈 |
| LCP | ❌ 느림 (3~6초+) | JS 다운로드 → 실행 → API 호출 → 렌더링까지 전체가 LCP |
| FCP | ❌ 느림 | 빈 HTML이므로 JS 실행 전까지 아무것도 표시되지 않음 |
| 비Google 크롤러 | ❌ 인식 불가 | 네이버, Bing(제한적), 소셜 미디어, AI 크롤러 전부 미지원 |
적합한 경우
- ✅ 로그인 후 대시보드, 관리자 패널, 내부 도구
- ✅ SEO가 필요 없는 웹 앱 (Figma, Google Docs 같은 도구형)
- ❌ 공개 콘텐츠, 블로그, 이커머스, 마케팅 사이트에는 부적합
SSR (Server-Side Rendering): 서버 렌더링
동작 원리
- 사용자(또는 크롤러)가 URL을 요청
- 서버가 React/Vue 컴포넌트를 실행하여 완성된 HTML을 생성
- 완성된 HTML을 응답 (크롤러에게 즉시 콘텐츠 전달)
- 브라우저에서 JS가 다시 실행되어 인터랙티브하게 만듬 (Hydration)
SEO 영향 분석
| 항목 | 영향 | 상세 |
|---|---|---|
| 크롤 가능성 | ✅ 우수 | 모든 크롤러에게 완성된 HTML 전달. JS 실행 불필요 |
| 인덱싱 속도 | ✅ 빠름 | 1단계 크롤에서 즉시 콘텐츠 인식 → 렌더링 큐 대기 없음 |
| 크롤 버짓 | ✅ 효율적 | HTML 파싱만으로 충분. JS 렌더링 리소스 불필요 |
| LCP | 🟡 보통~좋음 | 서버 응답 시간(TTFB)에 따라 결정. 서버 부하가 높으면 TTFB 증가 |
| TTFB | ⚠️ 변동 | 매 요청마다 HTML 생성 → 서버 부하에 따라 TTFB가 느려질 수 있음 |
| 비Google 크롤러 | ✅ 완벽 호환 | 네이버, Bing, 소셜 미디어, AI 크롤러 전부 동작 |
SSR의 단점
- 서버 비용: 매 요청마다 HTML을 생성하므로 서버 리소스 필요. 트래픽이 급증하면 서버 비용도 급증
- TTFB 지연: 복잡한 페이지나 외부 API 의존 시 서버 응답이 느려짐
- Hydration Mismatch: 서버 렌더링 결과와 클라이언트 실행 결과가 다르면 에러 발생
적합한 경우
- ✅ 사용자별 개인화된 페이지 (마이페이지, 검색 결과 등)
- ✅ 실시간으로 데이터가 변하는 페이지 (주가, 뉴스 등)
- ✅ SEO + 최신 데이터가 동시에 필요한 경우
SSG (Static Site Generation): 정적 생성
동작 원리
- 빌드 시점에 모든 페이지의 HTML을 미리 생성
- 생성된 HTML 파일을 CDN에 배포
- 사용자 요청 시 CDN이 이미 만들어진 HTML을 즉시 응답
- 서버 연산 없음 → 극도로 빠른 응답
SEO 영향 분석
| 항목 | 영향 | 상세 |
|---|---|---|
| 크롤 가능성 | ✅ 최우수 | 순수 HTML. 모든 크롤러에서 완벽 인식 |
| 인덱싱 속도 | ✅ 가장 빠름 | 완성된 HTML → 1단계 크롤에서 즉시 인덱싱 |
| 크롤 버짓 | ✅ 최효율 | 가벼운 HTML → 빠른 크롤 완료 → 더 많은 페이지 크롤 가능 |
| LCP | ✅ 매우 빠름 | CDN 에지에서 즉시 응답 → TTFB 극도로 낮음 → LCP 우수 |
| TTFB | ✅ 최우수 (~50ms) | CDN 캐시에서 직접 응답. 서버 연산 없음 |
| 비Google 크롤러 | ✅ 완벽 호환 | 순수 HTML이므로 모든 크롤러·봇·프리뷰 정상 작동 |
SSG의 단점
- 빌드 시간: 페이지 수 × 빌드 시간. 10만 페이지 사이트는 빌드에 수십 분~수 시간 소요
- 데이터 최신성: 빌드 시점의 데이터로 고정. 업데이트하려면 전체 재빌드 필요
- 동적 콘텐츠 불가: 사용자별 개인화, 실시간 데이터는 CSR로 보완 필요
적합한 경우
- ✅ 블로그, 문서 사이트, 가이드 (콘텐츠 변경 빈도 낮음)
- ✅ 마케팅 사이트, 랜딩 페이지
- ✅ 포트폴리오, 소규모 이커머스 (상품 수 제한적)
- ❌ 대규모 이커머스(수만 개 페이지), 뉴스 사이트에는 부적합 (빌드 시간 + 최신성 문제)
ISR (Incremental Static Regeneration): 점진적 정적 재생성
동작 원리
- 빌드 시점에 주요 페이지의 HTML을 생성 (SSG와 동일)
- 각 페이지에 재검증 주기(revalidate)를 설정 (예: 60초)
- 재검증 주기가 지난 후 요청이 들어오면 백그라운드에서 새 HTML을 재생성
- 재생성 완료 시까지 기존 캐시된 HTML을 응답 → Stale-While-Revalidate 패턴
- 빌드 시 생성하지 않은 새 페이지도 첫 요청 시 생성하고 이후 캐싱
SEO 영향 분석
| 항목 | 영향 | 상세 |
|---|---|---|
| 크롤 가능성 | ✅ 최우수 | SSG와 동일. 완성된 HTML 응답 |
| 인덱싱 속도 | ✅ 매우 빠름 | 캐시된 HTML → 1단계 크롤에서 즉시 인덱싱 |
| 데이터 최신성 | ✅ SSG보다 우수 | revalidate 주기에 따라 자동 업데이트. 전체 재빌드 불필요 |
| 빌드 시간 | ✅ SSG보다 짧음 | 모든 페이지를 빌드할 필요 없음. 주요 페이지만 빌드하고 나머지는 On-Demand |
| LCP/TTFB | ✅ 매우 빠름 | CDN 캐시 + 백그라운드 재생성. 사용자는 항상 캐시된 빠른 응답을 받음 |
| 비Google 크롤러 | ✅ 완벽 호환 | SSG와 동일 |
ISR의 주의사항
- 데이터 지연: revalidate 주기만큼의 데이터 지연이 있음 (예: 60초 설정 시 최대 60초 이전 데이터)
- 캐시 관리: CDN 캐시 무효화(Purge)가 필요한 경우 복잡해질 수 있음
- 실시간 불가: 주가, 채팅 등 완전 실시간 데이터에는 SSR이 적합
ISR이 가장 적합한 경우
- ✅ 대규모 이커머스: 10만+ 상품 → 인기 상품만 빌드, 나머지는 On-Demand 생성
- ✅ 뉴스/블로그: 기사는 자주 업데이트되지만 실시간은 아닌 경우
- ✅ 상품 카탈로그: 가격·재고가 주기적으로 변하는 경우
Streaming SSR과 Partial Hydration: 차세대 렌더링
Streaming SSR (React Server Components + Suspense)
전통적인 SSR은 전체 HTML을 서버에서 생성한 후 한 번에 응답합니다. Streaming SSR은 HTML을 청크(Chunk) 단위로 쪼개서 점진적으로 전송합니다.
| 전통 SSR | Streaming SSR |
|---|---|
| 전체 페이지 HTML을 생성 완료 후 한 번에 응답 | 헤더·네비게이션 →(즉시 전송)→ 메인 콘텐츠 →(전송)→ 사이드바 →(전송) |
| 느린 API가 하나 있으면 전체 응답이 지연 | 느린 부분은 나중에 도착하고, 빠른 부분은 먼저 표시 (Suspense Fallback) |
| TTFB = 전체 페이지 생성 시간 | TTFB = 첫 청크 생성 시간 (매우 빠름) |
SEO에서의 장점: Googlebot은 Streaming 응답을 완전히 처리할 수 있습니다. 최종 HTML은 전통 SSR과 동일한 완성된 문서이므로 크롤 가능성은 동일하면서 TTFB와 LCP가 개선됩니다.
Partial Hydration / Islands Architecture
Astro가 대표하는 패턴입니다. 페이지의 대부분을 순수 HTML로 전송하고, 인터랙티브한 부분(Island)만 JS를 로드합니다.
| 전통 SSR + Full Hydration | Islands Architecture |
|---|---|
| 서버에서 HTML 생성 → 클라이언트에서 전체 페이지를 다시 Hydrate | 서버에서 HTML 생성 → 인터랙티브 컴포넌트만 Hydrate |
| 전체 React/Vue 번들 다운로드 필요 | 필요한 Island의 JS만 다운로드 (나머지는 0 JS) |
| JS 번들: 수백 KB | JS 번들: 수십 KB (또는 0 KB) |
SEO에서의 장점: JS를 거의 사용하지 않으므로 Core Web Vitals가 극도로 우수합니다. 콘텐츠 중심 사이트(블로그, 문서, 마케팅)에서 최적의 SEO 성능을 제공합니다.
렌더링 패턴별 SEO 종합 비교표
| 항목 | CSR | SSR | SSG | ISR | Streaming SSR | Islands |
|---|---|---|---|---|---|---|
| 크롤 가능성 | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ |
| 인덱싱 속도 | ❌ 느림 | ✅ 빠름 | ✅ 가장 빠름 | ✅ 빠름 | ✅ 빠름 | ✅ 가장 빠름 |
| TTFB | ✅ 빠름(빈HTML) | ⚠️ 변동 | ✅ 매우 빠름 | ✅ 매우 빠름 | ✅ 매우 빠름 | ✅ 매우 빠름 |
| LCP | ❌ 느림 | 🟡 보통 | ✅ 빠름 | ✅ 빠름 | ✅ 매우 빠름 | ✅ 가장 빠름 |
| JS 번들 크기 | ❌ 큼 | ⚠️ 큼(Hydration) | ⚠️ 큼(Hydration) | ⚠️ 큼(Hydration) | 🟡 보통(RSC) | ✅ 매우 작음 |
| 데이터 최신성 | ✅ 실시간 | ✅ 실시간 | ❌ 빌드 시점 | 🟡 주기적 | ✅ 실시간 | ❌ 빌드 시점 |
| 서버 비용 | ✅ 없음(CDN) | ❌ 높음 | ✅ 없음(CDN) | ✅ 낮음 | ⚠️ 중간 | ✅ 없음(CDN) |
| 빌드 시간 | ✅ 빠름 | ✅ 빠름 | ❌ 페이지 수 비례 | ✅ 빠름 | ✅ 빠름 | 🟡 보통 |
| 네이버 호환 | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ |
| AI 크롤러 호환 | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ |
| SEO 종합 등급 | 🔴 F | 🟢 A | 🟢 A+ | 🟢 A+ | 🟢 A+ | 🟢 S |
서비스 유형별 추천 렌더링 패턴
| 서비스 유형 | 1순위 추천 | 2순위 대안 | 이유 |
|---|---|---|---|
| 블로그/문서/가이드 | SSG (Astro, Next.js) | ISR | 콘텐츠 변경 빈도 낮음 + 빠른 속도가 핵심 |
| 이커머스 (대규모) | ISR (Next.js) | SSR | 상품 수 많고 가격/재고 업데이트 있음 |
| 이커머스 (소규모) | SSG | ISR | 상품 수 적어 빌드 시간 문제 없음 |
| 뉴스/미디어 | SSR (Streaming) | ISR (짧은 revalidate) | 콘텐츠 최신성이 가장 중요 |
| SaaS 마케팅 사이트 | SSG (Astro) | SSG (Next.js) | 변경 빈도 극히 낮고 속도가 핵심 |
| SaaS 앱 내부 | CSR | - | SEO 불필요, 인터랙티브 UX가 핵심 |
| 커뮤니티/포럼 | SSR | ISR | UGC가 실시간으로 추가되고 검색 트래픽이 중요 |
콘텐츠 중심 사이트 (정적)
- SSG 또는 ISR 선택
- CDN에서 즉시 응답
- Core Web Vitals 최상급
- 서버 비용 거의 없음
- 블로그·문서·랜딩 페이지에 최적
vs
데이터 중심 사이트 (동적)
- SSR 또는 Streaming SSR 선택
- 서버에서 실시간 HTML 생성
- TTFB 관리 필요
- 서버 비용 + 스케일링 필요
- 이커머스·뉴스·커뮤니티에 최적
자주 묻는 질문 (FAQ)
Q. Next.js에서 SSR과 SSG를 페이지마다 다르게 적용할 수 있나요?
네, 이것이 Next.js의 가장 큰 강점입니다. Next.js App Router에서는 각 페이지(route segment)마다 독립적으로 렌더링 전략을 선택할 수 있습니다:
export const dynamic = 'force-static'(SSG), export const dynamic = 'force-dynamic'(SSR), export const revalidate = 60(ISR). 예를 들어 블로그 글은 SSG, 상품 검색 결과는 SSR, 상품 상세는 ISR로 혼합 적용이 가능합니다. 이런 하이브리드 렌더링이 실무에서 가장 많이 사용되는 패턴입니다.Q. ISR에서 revalidate 시간은 어떻게 설정해야 하나요?
콘텐츠 변경 빈도에 따라 다릅니다. 블로그/문서: 3600초(1시간) 이상 — 변경이 드물므로 캐시 효율 극대화. 이커머스 상품: 60~300초 — 가격/재고 변동을 반영하면서도 서버 부하 관리. 뉴스: 10~60초 — 최신성이 중요하지만 SSR보다 효율적. 핵심 원칙: "이 페이지의 데이터가 X초 이전의 것이어도 사용자가 불편하지 않은가?"를 기준으로 설정하세요. SEO 크롤러는 보통 수시간~수일 간격으로 크롤하므로, SEO만 고려하면 revalidate이 긴 것이 효율적입니다.
Q. SSG 사이트에서 빌드 시간이 너무 길면 어떻게 해야 하나요?
3가지 해결책이 있습니다: (1) ISR로 전환 — 인기 페이지만 빌드하고 나머지는 On-Demand 생성. 빌드 대상을 1,000개로 제한하면 빌드 시간을 수분으로 줄일 수 있습니다. (2) Incremental Build (Gatsby/Next.js) — 변경된 페이지만 재빌드하는 기능. (3) 빌드 인프라 업그레이드 — Vercel/Netlify의 병렬 빌드, 대용량 메모리 머신 사용. 일반적으로 10만 페이지 이상이면 SSG 단독보다 ISR이 현실적입니다.
Q. Streaming SSR이 SEO에 문제를 일으킬 수 있나요?
일반적으로는 아닙니다. Googlebot은 Streaming 응답을 올바르게 처리합니다. 최종적으로 전송되는 HTML이 완성된 형태이면 SSR과 동일하게 인덱싱됩니다. 다만 주의할 점이 있습니다: Suspense Fallback이 실제 콘텐츠 대신 인덱싱되지 않도록 해야 합니다. 크롤러가 Streaming을 너무 일찍 포기하면 로딩 스피너가 콘텐츠로 인덱싱될 수 있습니다. 중요한 SEO 콘텐츠(제목, 메타데이터, 본문)는 첫 번째 청크에 포함시키고 비핵심 요소(댓글, 추천)만 Suspense로 지연시키세요.
Q. Astro가 SEO에 가장 좋다면 왜 Next.js가 더 많이 쓰이나요?
Astro는 콘텐츠 중심 정적 사이트에서 SEO 최적입니다 (JS 0에 가까운 출력). 하지만 Next.js가 더 범용적인 이유는: (1) 풀스택 기능 — API Routes, 서버 액션, 미들웨어 등 백엔드 로직을 같은 프레임워크에서 처리. (2) 하이브리드 렌더링 — SSR/SSG/ISR/CSR을 페이지별로 선택 가능, 복잡한 앱에 유연. (3) 생태계 — React 생태계의 거의 모든 라이브러리를 사용 가능. Astro는 블로그, 문서 사이트, 마케팅 사이트에 최고이고, Next.js는 이커머스, SaaS, 웹 앱 등 복잡한 서비스에 적합합니다. 둘 다 SEO 관점에서 우수하며, 선택 기준은 프로젝트의 인터랙티비티 수준입니다.