이 페이지에서는 Server Component와 Client Component에서 데이터를 가져오는 방법, 그리고 데이터에 의존하는 컴포넌트를 스트리밍하는 방법을 안내한다.


1. Fetching Data

1-1. Server Components

Server Component에서는 다음과 같은 모든 비동기 I/O를 사용해 데이터를 가져올 수 있다.

1-2. Client Components

Client Component에서 데이터를 가져오는 방법은 두가지이다.

  1. React's use hook

    use hook을 사용해 서버에서 클라이언트로 데이러를 스트리밍할 수 있다.

    Server Component에서 데이터를 먼저 가져오고 promis를 Client Component에 prop 으로 전달하면 된다.

    그 다음, Client Component에서 use hook으로 Promise 를 읽어보자.

    위 예시에서 <Posts><Suspense> 로 감싸져 있으므로 Promise 가 해결되는 동안 fallback이 표시된다.

  2. SWR, React Query 같은 커뮤니티 라이브러리 사용

    Client Component에서 SWR이나 React Query같은 외부 라이브러리를 사용할 수도 있다. 각 라이브러리는 자체적인 캐싱, 스트리밍 등의 규칙을 갖는다.


2. 요청 중복 제거와 데이터 캐싱 (Deduplicate requests and cache data)

요청을 중복해서 보내지 않도록 하는 한 가지 방법은 요청 메모이제이션을 사용하는 것이다. 이 메커니즘을 사용하면 동일한 URL과 옵션을 가진 GET 또는 HEAD fetch 요청은 한 번의 렌더링 과정에서 하나의 요청으로 합쳐진다.

이 기능은 자동으로 적용되며 원치 않는 경우 Abort Signalfetch 에 전달해 사용을 끌 수 있다.

요청 메모이제이션은 단일 요청이 처리되는 동안만 적용된다.

또한 Next.js의 Data Cache를 사용해 fetch 요청 중복을 줄일 수도 있다. 예를 들어, fetch 옵션에 cache: ‘force-cache’ 를 설정하면 된다.

Data Cache는 현재 렌더링 과정과 이후 들어오는 요청 간에 데이터를 공유할 수 있게 해준다.

만약 fetch를 사용하지 않고 ORM이나 데이터베이스를 직접 사용하고 있다면, React의 cache 함수를 사용해 데이터 접근 로직을 감싸주면 된다.