import { use } from 'react'; // NOTE: 실제 RSC에서는 이 컴포넌트가 서버에서 실행되어 // 클라이언트로 직렬화되어 전송됩니다. 여기서는 Suspense 계약만 모사합니다. export type User = { id: string; name: string }; // 목 fetcher — 50ms 후 resolve export function fetchUser(userId: string): Promise<User> { return new Promise((resolve) => { setTimeout(() => resolve({ id: userId, name: `User-${userId}` }), 50); }); } // 같은 userId에 대해 같은 promise를 반환 (Suspense 호환을 위해 캐시 필요) const cache = new Map<string, Promise<User>>(); export function getUser(userId: string): Promise<User> { if (!cache.has(userId)) { cache.set(userId, fetchUser(userId)); } return cache.get(userId)!; } export function UserCardServer({ userId }: { userId: string }) { // TODO: getUser(userId)로 promise를 얻고, `use()`로 unwrap 하세요 // TODO: { id, name }을 <div>에 렌더하세요 — 예: <div>{name} ({id})</div> return null; }
Tests