Header Banner
GG Logo

Future Engineering

기술의 최전선을 기록합니다.

기술 자료/FrontEnd/React 'use client'와 'use server'에 대해서 Canary

React 'use client'와 'use server'에 대해서 Canary

FrontEnd1년 이상 전

Next.js뿐 아니라, React 19에서 도입된 서버 Component와 Client Component를 구분하기 위한 지시어입니다.

서버 또는 클라이언트에서만 실행되어야 하는 걸 명시적으로 알릴 수 있기 때문에, 성능 최적화와 명확한 코드 구조를 달성할 수 있습니다.

 

(해당 기능은 2024년 03월 18일 기준 Canary지만, 2024년 5월부터 공식적으로 사용을 권장할 것으로 생각됩니다. React Conf 2024)

 

‘use server’

  • Component가 서버에서만 실행되어야 합니다. 데이터 가져오기, SSR 처리 등 서버에서만 실행되어야 하는 코드에 사용됩니다.

  • Server component는 Client로 전송되기 전 서버에서 렌더링되며, 클라이언트 사이드에서는 실행되지 않습니다. 따라서 서버 로직은 클라이언트에서 Import하게 될 경우, 문제를 발생시킵니다.

 

Next.js default ‘use server’

// app/components/UserProfile.server.jsx

export default function UserProfile({ userId }) {
  'use server'
  const userData = fetchUserData(userId);

  return (
    <div>
      <h1>{userData.name}</h1>
      <p>{userData.description}</p>
    </div>
  );
}
 

‘use client’

  • Component가 클라이언트에서만 실행되어야 합니다. CSR만 작업 가능합니다.
    (SSR, CSR에 대한 부분은 따로 내용을 정리하겠습니다.)

  • use client를 사용하게 될 경우, 브라우저에서 동적 렌더링되며, Server Side Rendering이 발생하지 않습니다.

 

default로 ‘use server’가 잡혀있기 때문에, client component의 경우에는 최상단에 반드시 ‘use client’를 작성해줘야 합니다. useState와 같은 Hooks를 사용하게 될 경우, Next.js가 client component로 인식해 Error를 발생시킵니다.

 

'use client';

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

  return (
    <div>
      <p>{count}</p>
      <button onClick={() => setCount(count + 1)}>Increase</button>
    </div>
  );
}