← 홈으로

CSR (Client-Side Rendering)

클라이언트에서 JavaScript가 실행된 후 데이터를 가져오는 방식

CSR 방식 코드
1// CSR (Client-Side Rendering) 방식
2'use client';
3 
4import { useQuery } from '@tanstack/react-query';
5 
6export default function CSRPage() {
7 const { data, isLoading, error } = useQuery({
8 queryKey: ['posts'],
9 queryFn: () => fetch('/api/posts').then(res => res.json()),
10 });
11 
12 if (isLoading) return <div>로딩 중...</div>;
13 if (error) return <div>에러 발생!</div>;
14 
15 return (
16 <ul>
17 {data.posts.map(post => (
18 <li key={post.id}>{post.title}</li>
19 ))}
20 </ul>
21 );
22}

💡CSR 동작 원리

  1. HTML 전송: 서버가 빈 HTML (또는 스켈레톤) 전송
  2. JS 다운로드: 브라우저가 JavaScript 번들 다운로드
  3. 컴포넌트 마운트: React 컴포넌트가 마운트됨
  4. useQuery 실행: 마운트 후 API 호출 시작
  5. 데이터 렌더링: 응답 수신 후 UI 업데이트

언제 CSR을 사용하나요?

  • SEO가 중요하지 않은 대시보드, 관리자 페이지
  • 사용자 인터랙션에 따라 데이터가 자주 바뀌는 경우
  • 초기 로딩 속도보다 인터랙티브함이 중요한 경우
  • 인증이 필요한 개인화된 데이터
실행 결과

데이터를 가져오는 중...

(클라이언트에서 API 호출 중)

타이밍

컴포넌트 마운트
-
API 데이터 로딩
-

⚠️CSR의 단점

  • 초기 로딩 지연: JS 실행 + API 호출 대기 시간
  • SEO 불리: 검색엔진이 빈 HTML을 볼 수 있음
  • Layout Shift: 데이터 로드 후 화면이 변경됨
  • 워터폴: HTML → JS → API 순차 실행