노트

React.cache

React cache

프런트엔드#react#nextjs · 연결된 개념 6개

쉽게 말하면

React.cache는 냉장고가 아니라 회의 한 번 동안만 쓰는 화이트보드예요. 같은 요청 안에서 여러 컴포넌트가 같은 걸 물으면 DB에 다시 묻지 않고 보드에 적힌 답을 보여 주고, 요청이 끝나면 지워요.

비유가 깨지는 곳 보드는 질문 글자가 같아도 종이가 다르면 다른 질문으로 봐요. 인자를 참조로 비교해서 렌더마다 새로 만든 객체를 넘기면 매번 실행돼요. 오래 저장하려면 'use cache'를 써요.

cache(fn)은 서버 컴포넌트(Server Component)용 React API(Application Programming Interface)로, 함수 결과를 한 번의 서버 요청(렌더) 동안만 기억한다. 같은 요청 안에서 같은 인자로 여러 번 불러도 실제 실행은 한 번이다. React 19 정식 API이며 서버 컴포넌트에서만 쓴다.

import { cache } from 'react'
export const getUser = cache(async (id: string) => db.user.find(id))
 
// Layout, Header, Profile이 각자 getUser('1')을 불러도 DB 조회는 한 번
요청 A ─ Layout·Header·Profile → getUser(1) 공유
요청 B ─ 캐시 비어 있음 → 다시 조회
  • 목적은 장기 캐시가 아니라 중복 제거(Deduplication)다. props로 데이터를 내려 보내지 않고 필요한 컴포넌트마다 부를 수 있게 해 준다
  • Next.js의 fetch는 이미 같은 요청 안에서 중복이 제거된다. 그래서 cache()는 DB(Database) 클라이언트나 SDK(Software Development Kit)처럼 fetch가 아닌 비동기 작업에 주로 쓴다(Next.js 캐시 계층)
  • 렌더 중 데이터 읽기가 여러 번 일어나도 결과가 같다는 가정을 실제로 받쳐 주는 장치다(부수 효과와 Effect)
  • 인자는 참조로 비교된다. 렌더마다 새로 만든 객체를 인자로 넘기면 매번 다른 키가 된다
  • 요청을 넘어 오래 저장하려면 Next.js의 'use cache'나 서버 캐시를 쓴다
React.cachelru-cacheTanStack Query
수명요청 한 번TTL(Time to Live)·최대 개수staleTime·gcTime
범위한 렌더 트리서버 프로세스 전체브라우저 탭
용도컴포넌트 간 중복 호출 제거서버의 장기 캐시클라이언트 서버 상태

나머지 두 캐시는 LRU 캐시와 캐시 계층 비교, TanStack Query.

출처: React - cache

연결된 개념

이 노트를 가리키는 문서

뜻이 가까운 노트

  • 서버 렌더에서 훅이 하는 일

    서버 렌더(Server-Side Rendering, SSR)에서도 컴포넌트 함수는 실제로 호출되고, 그 안의 훅도 호출은 된다. 다만 서버에는 커밋(DOM 반영)이 없어서, 렌더 중 동기적으로 값을 계산하는 훅만 일하고 커밋 뒤에 도는 훅은 아무것도 하지 않는다. "이 훅은 클라이언트에서만 동작한다"는 말은 대개 "Effect 안의 일은 클라이언트에서만 일어난다"는 뜻이다.

  • React 서버 컴포넌트(RSC)

    React 서버 컴포넌트(React Server Components, RSC)는 서버에서만 실행되고, 컴포넌트 코드가 아니라 실행 결과(직렬화된 엘리먼트 트리)만 클라이언트로 보내는 컴포넌트다. Next.js App Router에서는 'use client'를 붙이지 않은 컴포넌트가 기본으로 서버 컴포넌트다.

  • 브라우저 캐시

    한 번 받은 리소스(HTML·CSS·JS·이미지)를 브라우저가 저장해 두었다가 다시 쓰는 기능. 서버가 응답 헤더로 얼마나, 어떻게 캐시할지 알려 주고 브라우저가 그대로 따른다.

  • React 상태 갱신

    React는 상태를 직접 고치지 않고 새 값을 setState로 넘겨야 다시 그린다. 이전 값과 Object.is로 비교하므로, 같은 객체를 고친 뒤 넘기면 바뀐 줄 모른다.

  • 읽기 캐시 전략

    값비싼 연산 결과나 자주 읽는 데이터를 DB보다 빠른 메모리 저장소에 두고, 읽을 때 캐시를 먼저 보는 전략. 응답 속도를 높이고 DB 부하를 줄이며, 캐시 계층만 따로 확장할 수도 있다.

보기 옵션