본문 바로가기
TECH

use server와 use client 📡

by Stella-Park 2025. 8. 14.
728x90

React (특히 Next.js 13 이후 버전이나 React Server Components 환경)에서 사용하는 use clientuse server컴포넌트가 실행될 위치 (브라우저 vs 서버)를 명시하기 위한 지시자를 말한다.

 

use client

  • 클라이언트 컴포넌트 선언
  • 브라우저에서 실행되어야 함을 명시하는 지시어
  • React 18부터 도입된  Server Components에서는 기본적으로 모든 컴포넌트가 서버에서 렌더링되는데 이때, use client가 있어야 브라우저 전용 기능들을 사용할 수 있다.

 

사용 시점

  • useState, useEffect, useRef 같은 React Hook을 쓰는 경우
  • window, document, localStorage등 브라우저 API를 쓰는 경우
  • 사용자 인터렉션이 필요한 컴포넌트 (버튼 클릭, 모달 등)
// Button.tsx
"use client";

import { useState } from "react";

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

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

 

 

use server

  • Next.js 14부터는 서버에서만 실행되는 함수를 명확히 표시하기 위해 use server 지시어가 도입
  • 브라우저로 보내지 말아야할 비즈니스 로직, DB요청, 인증 관련 등의 코드를 보호

 

사용 시점

  • 서버 액션을 정의할 때
  • 클라이언트에서 form action, onSubmit 등으로 서버 함수를 호출하려고 할 때
// actions.ts
"use server";

export async function submitForm(data: FormData) {
  // 서버에서만 동작하는 로직
  await saveToDatabase(data);
}


// ClientForm.tsx
"use client";

import { submitForm } from "./actions";

export default function ClientForm() {
  return (
    <form action={submitForm}>
      <input name="email" />
      <button type="submit">Submit</button>
    </form>
  );
}

 

use server가 없으면, 해당 함수가 클라이언트 번들로 전송될 수 있어 보안상 위험하다.

 

정리

구분 "use client" "use server"
역할 클라이언트 컴포넌트 선언 서버에서만 실행되는 함수 선언
위치 컴포넌트 파일 최상단 서버 액션 함수 최상단
사용 이유 React Hook, 브라우저 API 필요 DB 접근, 인증 보안 로직 실행
도입 시기 React 18 / Next.js 13 Next.js 14 이상

 

추가 팁

  • 기본은 서버 컴포넌트이다. 따라서 React Hooks를 쓰지 않는다면 굳이 use client는 필요 없다.
  • 서버 컴포넌트에서 클라이언트 컴포넌트를 import할 수 있지만, 반대는 불가하다.
  • 클라이언트 컴포넌트는 서버 액션을 props form action으로 받아 호출 있다.

 

이상 스텔라였습니다. ✍️

 

 

 

728x90

'TECH' 카테고리의 다른 글

Tailwind CSS 🪮  (1) 2025.09.03
의존성 분류에 대해서 ➗  (0) 2025.09.01
all: inherit; 속성 🤰🏻  (4) 2025.08.12
CSS 애니메이션 🙀  (2) 2025.07.31
개발하면서... 느끼는 부분 정리 👩🏻‍💻  (5) 2025.07.17