React Server Components: Boost Full Stack React Performance

React Server Components: The Future of Full Stack React

카테고리

프로그래밍/소프트웨어 개발

서브카테고리

웹 개발

대상자

  • React 개발자 및 풀스택 엔지니어
  • 성능 최적화와 서버-클라이언트 협업에 관심 있는 개발자
  • 난이도: 중간 (기존 SPA 개념 이해 필요)

핵심 요약

  • React Server Components(RSCs)는 서버에서 데이터를 직접 가져와 HTML을 렌더링하여 useEffect 및 API 라우트를 제거함
  • 성능 향상: FCP(0.4s → 1.2s), TTI(0.8s → 2.8s), JavaScript 번들 크기(23KB → 147KB)
  • 서버/클라이언트 혼합 아키텍처: 'use client' 지시어를 통해 클라이언트 컴포넌트를 분리 가능
  • 핵심 용어: use client, Promise.all, First Contentful Paint, Time to Interactive

섹션별 세부 요약

1. 전통적인 API 라우트 대비 RSCs의 혁신

  • 기존 방식: API 라우트를 통해 데이터를 가져오는 useEffect 사용
  • RSCs 방식: 서버에서 직접 데이터를 가져와 HTML 렌더링 (API 레이어 제거)
  • 코드 예시:

```jsx

// app/posts/page.jsx - Server Component

async function PostsPage() {

const posts = await db.posts.findMany()

return (

{posts.map(post => (
)

}

```

2. 서버/클라이언트 컴포넌트의 협업

  • 서버 컴포넌트: 데이터 fetching, 정적 렌더링, 'use client' 지시어 없음
  • 클라이언트 컴포넌트: 'use client' 지시어 필요, 상태 관리 및 이벤트 핸들링 가능
  • 예제:

```jsx

// app/dashboard/RecentOrders.jsx - Client Component

'use client'

export function RecentOrders({ initialOrders }) {

const [orders, setOrders] = useState(initialOrders)

}

```

3. 성능 향상 분석

  • RSCs 적용 전: JavaScript 번들 147KB, FCP 1.2s, TTI 2.8s
  • RSCs 적용 후: JavaScript 번들 23KB, FCP 0.4s, TTI 0.8s
  • 이유: 정적 콘텐츠는 HTML로 전송, 클라이언트에서만 hydrate

4. 주의사항 및 제약

  • 서버/클라이언트 간 데이터 전달 제한: 함수/복잡한 객체 전달 불가
  • 환경 변수 처리: 'use client' 지시어가 있는 컴포넌트에 process.env.SECRET_API_KEY 노출 위험
  • 예시:

```jsx

// ✅ Safe - server component

const secret = process.env.DATABASE_URL

// ❌ Dangerous if this becomes client-side

const apiKey = process.env.SECRET_API_KEY

```

5. RSCs의 적합한 활용 사례

  • 좋은 사례: 블로그, 문서, 대시보드, 전자상거래 페이지
  • 부적합한 사례: 게임, 실시간 협업 도구, 대부분 클라이언트 상태 기반 앱

결론

  • 실무 적용 팁:
  1. Next.js 13+부터 시작 (RSCs 지원 최적)
  2. 간단한 프로젝트부터 시작 (프로덕션 마이그레이션은 후순위)
  3. 서버-최우선 사고방식 ('use client' 지시어는 필요한 경우만 사용)
  4. 데이터 fetching 실험 (RSCs의 핵심 강점)
  • 핵심 메시지: RSCs는 React의 풀스택 프레임워크 성숙화의 핵심이며, 성능과 개발자 경험을 근본적으로 개선함.