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 동작 원리
- HTML 전송: 서버가 빈 HTML (또는 스켈레톤) 전송
- JS 다운로드: 브라우저가 JavaScript 번들 다운로드
- 컴포넌트 마운트: React 컴포넌트가 마운트됨
- useQuery 실행: 마운트 후 API 호출 시작
- 데이터 렌더링: 응답 수신 후 UI 업데이트
✅언제 CSR을 사용하나요?
- SEO가 중요하지 않은 대시보드, 관리자 페이지
- 사용자 인터랙션에 따라 데이터가 자주 바뀌는 경우
- 초기 로딩 속도보다 인터랙티브함이 중요한 경우
- 인증이 필요한 개인화된 데이터
실행 결과
데이터를 가져오는 중...
(클라이언트에서 API 호출 중)
타이밍
컴포넌트 마운트
-
API 데이터 로딩
-
⚠️CSR의 단점
- 초기 로딩 지연: JS 실행 + API 호출 대기 시간
- SEO 불리: 검색엔진이 빈 HTML을 볼 수 있음
- Layout Shift: 데이터 로드 후 화면이 변경됨
- 워터폴: HTML → JS → API 순차 실행