javascript

NextJs의 use client

"use client"Next.js 13 이상에서 도입된 React Server Components (RSC) 환경에서 특정 컴포넌트를 클라이언트 컴포넌트로 명시하기 위해 사용하는 지시문입니다.


✅ 사용 이유 한줄 요약:

서버에서 렌더링되는 기본 동작을 클라이언트에서 실행되는 컴포넌트로 바꾸기 위해 사용합니다.


🔍 배경 설명

Next.js 13부터 app/ 디렉토리에서는 기본적으로 서버 컴포넌트로 동작합니다.
서버 컴포넌트는 다음과 같은 특징이 있습니다:

  • 브라우저에 자바스크립트가 전달되지 않음 (렌더링은 서버에서)
  • useState, useEffect 등 클라이언트 전용 훅 사용 불가
  • 인터랙션/이벤트 핸들링 불가능

🎯 그래서 "use client"는 언제 필요할까?

다음과 같은 경우에 사용합니다:

상황 이유 useState, useEffect, useRef 등 사용 서버 컴포넌트에서는 작동하지 않기 때문 클릭, 입력 등 브라우저 이벤트 처리 서버에서는 브라우저 이벤트를 받을 수 없기 때문 localStorage, window, document 사용 브라우저 전용 객체이기 때문


📌 예시

// app/components/Counter.tsx
"use client";

import { useState } from "react";

export default function Counter() {
    const [count, setCount] = useState(0);

    return <button onClick={() => setCount(count + 1)}>Count: {count}</button>;
}

이 컴포넌트는 useState를 사용하고 있기 때문에 반드시 "use client" 선언이 있어야 합니다.
또한 onClick은 브라우저에서 동작하기때문에 "use client" 선언이 필요함


📎 주의사항

  • "use client"파일 최상단가장 먼저 있어야 합니다.
  • 부모 컴포넌트가 서버 컴포넌트라도 자식에 "use client"가 있으면 해당 자식은 클라이언트 컴포넌트로 작동합니다.
  • app/ 디렉토리 구조에서만 사용됩니다 (pages/ 디렉토리에선 필요 없음).

✅ 요약

  • 기본은 서버 컴포넌트, 필요 시 "use client"로 클라이언트 전환
  • React 훅, 브라우저 API, 이벤트 핸들링을 위해 필요
  • 성능 최적화를 위해 가능한 최소한의 컴포넌트에만 사용