단북
프론트엔드 기술 면접·Next.js 핵심 개념

서버 컴포넌트와 클라이언트 컴포넌트의 차이는 무엇인가요?

앱 라우터에서 기본인 서버 컴포넌트와, 상호작용을 담당하는 클라이언트 컴포넌트('use client')의 역할 차이를 정리합니다.

앱 라우터에서는 컴포넌트가 서버 컴포넌트(RSC, 기본)클라이언트 컴포넌트로 나뉩니다. 어디서 렌더링되고 무엇을 할 수 있는지가 다릅니다.

서버 컴포넌트 (기본)

서버에서만 실행되고, 결과 HTML(과 직렬화된 데이터)만 클라이언트로 전송됩니다. 컴포넌트 코드 자체는 번들에 포함되지 않습니다.

  • DB·파일시스템·서버 환경 변수에 직접 접근 가능
  • async/await로 데이터를 직접 패칭
  • 클라이언트 번들 크기를 줄임 (라이브러리 코드가 안 실려감)
  • 단, useState·useEffect·이벤트 핸들러·브라우저 API는 사용 불가
// 기본이 서버 컴포넌트
async function Page() {
  const data = await db.query(); // 서버에서 직접 패칭
  return (
    <ul>
      {data.map((d) => (
        <li key={d.id}>{d.name}</li>
      ))}
    </ul>
  );
}

클라이언트 컴포넌트

파일 맨 위에 'use client' 를 선언합니다. 브라우저에서 하이드레이션되어 상호작용(state·effect·이벤트) 을 담당합니다.

'use client';
import { useState } from 'react';
 
export default function Counter() {
  const [n, setN] = useState(0);
  return <button onClick={() => setN(n + 1)}>{n}</button>;
}

어떻게 나누나

기본은 서버 컴포넌트로 두고, 상호작용이 필요한 말단 컴포넌트만 클라이언트로 분리하는 것이 권장 패턴입니다. 서버 컴포넌트가 클라이언트 컴포넌트를 자식으로 포함할 수 있습니다.

구분서버 컴포넌트클라이언트 컴포넌트
실행 위치서버서버(초기) + 브라우저
state/effect불가가능
데이터 패칭async/await 직접훅/패칭 라이브러리
번들 포함안 됨

서버 컴포넌트(React Server Component)에 대한 설명으로 옳은 것은?

이 레슨을 다 읽으셨나요?

완료 표시는 이 브라우저에 저장됩니다.