#39RenderingHard

React Server Components (Suspense Boundary)

React Server Components

실제 RSC는 서버에서 실행되어 자바스크립트 번들을 줄이지만, 이 문제에서는 같은 비동기 데이터 페치 + Suspense 경계 계약을 클라이언트에서 모사합니다.

구현할 것

// async "Server" Component — 실제 RSC에서는 서버에서 실행됨
async function UserCardServer({ userId }: { userId: string }): Promise<JSX.Element>;
  • UserCardServerasync 함수 컴포넌트입니다.
  • 내부에서 fetchUser(userId)(목 함수, 제공됨)를 await로 호출하고 결과를 렌더링합니다.
  • 부모는 <Suspense fallback="Loading">로 감싸 promise resolve 전까지 fallback을 보여줍니다.

사용 예시

<Suspense fallback={<p>Loading</p>}>
  <UserCardServer userId="u1" />
</Suspense>

학습 포인트

  • RSC의 핵심 계약: async 컴포넌트 + Suspense 경계
  • 실제 RSC는 서버에서 직렬화되어 클라이언트로 전송되지만, 여기서는 같은 멘탈 모델을 모사
  • 테스트는 findByText로 async resolve를 기다린다
Sandpack 로드 중…