0Pricing
React Academy · 강의

비동기 리소스를 위한 use() 훅

React 19에서 use() 훅을 사용해 렌더링 중 프로미스와 컨텍스트를 읽습니다.

비동기 리소스를 위한 use() 훅은(는) CoddyKit의 무료 React Academy 강의입니다. 이것은 4개 중 2번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 React Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. React Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

환영합니다

이 수업에서는 React 19의 use() 훅을 사용해 렌더링 함수 안에서 프로미스와 컨텍스트 값을 직접 읽고 비동기 데이터 접근을 단순화합니다.

use()란 무엇인가요

use()는 렌더링 함수에서 리소스, 즉 프로미스나 컨텍스트를 동기적으로 읽는 React 19 훅입니다. 프로미스가 대기 중이면 컴포넌트가 일시 중단되고 가장 가까운 Suspense 경계가 대체 화면을 표시합니다.
import { use } from 'react';

function UserProfile({ userPromise }) {
  const user = use(userPromise); // suspends if pending
  return <h1>{user.name}</h1>;
}

프로미스를 속성으로 전달하기

React 19의 일반적인 패턴은 서버 컴포넌트가 프로미스(예: 데이터베이스 쿼리)를 만들고 클라이언트 컴포넌트에 전달하면 클라이언트 컴포넌트가 use()로 이를 읽는 것입니다. Suspense 경계는 그보다 상위 어디에든 둘 수 있습니다.
// Server Component
export default function Page() {
  const userPromise = fetchUser(1); // NOT awaited
  return (
    <Suspense fallback={<Spinner />}>
      <Profile userPromise={userPromise} />
    </Suspense>
  );
}

// Client Component
'use client';
export function Profile({ userPromise }) {
  const user = use(userPromise);
  return <p>{user.name}</p>;
}

데이터에 use()와 useEffect 중 무엇을 사용할까요

데이터를 가져오는 데 useEffect를 사용하면 로딩 및 오류 상태를 수동으로 관리해야 합니다. Suspense와 함께 use()를 사용하면 이런 반복 코드가 모두 사라지고, 컴포넌트 본문에서 동기적으로 처리되는 것처럼 데이터를 읽을 수 있습니다.

컨텍스트에 use() 사용하기

use()는 useContext처럼 컨텍스트 값을 읽을 수도 있습니다. 차이점은 use()는 조건문이나 반복문 내부에서 조건부로 호출할 수 있다는 점입니다. useContext는 훅 규칙을 따르므로 그렇게 사용할 수 없습니다.
import { use } from 'react';
import { ThemeContext } from './ThemeContext';

function Button({ danger }) {
  if (danger) {
    const theme = use(ThemeContext); // conditional — allowed with use()!
    return <button style={{ color: theme.red }}>Delete</button>;
  }
  return <button>Click</button>;
}

ErrorBoundary를 사용한 오류 처리

use()에 전달한 프로미스가 거부되면 React가 오류를 발생시킵니다. 컴포넌트를 ErrorBoundary로 감싸 오류를 포착하고 대체 화면을 표시합니다.
<ErrorBoundary fallback={<Error />}>
  <Suspense fallback={<Loading />}>
    <Profile userPromise={fetchUser(id)} />
  </Suspense>
</ErrorBoundary>

클라이언트 컴포넌트에서만 use() 사용하기

프로미스와 함께 사용하는 use()는 클라이언트 컴포넌트에서 작동합니다. 서버 컴포넌트에서는 async/await를 직접 사용하세요. 서버에서 프로미스와 함께 use()를 사용할 필요는 없습니다.

프로미스 캐싱

컴포넌트가 다시 렌더링될 때 다시 가져오기를 방지하려면 동일한 프로미스 참조를 받아야 합니다. 컴포넌트 외부나 안정적인 위치(서버, 캐시 또는 상태)에 프로미스를 만들고 속성으로 전달하세요.

use()를 사용한 스트리밍

use()와 스트리밍 SSR을 함께 사용하면 React가 페이지 HTML을 스트리밍하고 Suspense 대체 화면을 표시한 다음, 프로미스가 해결되면 해결된 콘텐츠를 스트리밍할 수 있습니다. 이 모든 작업은 하나의 HTTP 연결에서 이루어집니다.

중복 제거를 위한 React.cache()

서버에서는 React.cache() 또는 Next.js의 unstable_cache가 한 번의 렌더링 안에서 동일한 비동기 함수에 대한 여러 호출을 중복 제거하므로, 여러 컴포넌트가 동일한 프로미스를 사용하더라도 데이터베이스는 한 번만 조회됩니다.

빠른 확인

use(promise)가 호출되었는데 프로미스가 아직 대기 중이면 클라이언트 컴포넌트는 어떻게 동작하나요?

복습

use(promise)는 렌더링 중에 비동기 데이터를 동기적으로 읽으며, 대기 중이면 일시 중단됩니다. use(context)는 useContext와 달리 조건부로 사용할 수 있습니다. 로딩에는 항상 Suspense를, 오류에는 ErrorBoundary를 함께 사용하세요.

다음 내용

다음 lesson: **React 액션 및 useActionState** — 서버와 클라이언트 액션을 정의하고 대기 상태를 사용해 폼 제출을 처리합니다.

자주 묻는 질문

“비동기 리소스를 위한 use() 훅” 강의는 무료인가요?

네 — “비동기 리소스를 위한 use() 훅” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 React Academy 강의 전체를 잠금 해제할 수 있습니다. React Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

“비동기 리소스를 위한 use() 훅”에서 뭘 배우나요?

React 19에서 use() 훅을 사용해 렌더링 중 프로미스와 컨텍스트를 읽습니다. 브라우저에서 직접 실행하는 실습 코드로 React Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.

React Academy을(를) 시작하는 데 경험이 필요한가요?

사전 경험은 필요하지 않습니다. CoddyKit의 React Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 2번째 강의입니다.

“비동기 리소스를 위한 use() 훅” 강의는 얼마나 걸리나요?

대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.

이 React Academy 강의에서 코드를 작성하고 실행할 수 있나요?

네. 모든 React Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.

이 강의의 모든 강의

  1. React 서버 컴포넌트 이해하기
  2. 비동기 리소스를 위한 use() 훅
  3. React 동작과 useActionState
  4. 즉각적인 피드백을 위한 useOptimistic
← React Academy(으)로 돌아가기