
클라이언트 라우터 캐시는 브라우저 측에 저장되는 캐시로, Next.js에서 페이지 이동을 보다 효율적으로 처리하기 위해 일부 데이터를 보관하는 기술이다.
이 캐시는 한 번 접속한 페이지의 공통 레이아웃 컴포넌트와 서버 컴포넌트 데이터(RSC Payload)를 브라우저에 저장하여, 페이지 이동 시 동일한 데이터를 다시 서버로부터 요청하지 않도록 최적화한다.
즉, 서버 렌더링 기반 구조를 유지하면서도, 클라이언트 측에서 가능한 데이터는 최대한 재활용하는 전략이라고 이해하면 된다.
예를 들어, 브라우저에서 index 페이지에 접속한 후 search 페이지로 이동한다고 가정해 보자.
브라우저는 Next.js 서버로부터 다음 데이터를 전달받는다.
이 RSC Payload에는 다음과 같은 데이터가 포함된다.
search 페이지는 dynamic 페이지라고 가정하자.
즉, 실시간 데이터를 생성한다.
이 경우에도 서버는 새로운 RSC Payload를 전달하는데, 그 안에는 다음이 포함된다.
결과적으로 브라우저는 동일한 레이아웃 데이터를 두 번 요청하게 된다.
이것은 네트워크 낭비이자 성능 비효율이다.
이 문제를 해결하기 위해 Next.js는 브라우저에 클라이언트 라우터 캐시를 생성한다.
즉,
npm run dev
Next.js 앱의 개발 모드를 실행한다.
(with-searchbar)/layout.tsx 파일에서 searchbar 레이아웃을 수정한다.
return (
<div>
{/* 렌더링 시간을 출력 */}
{new Date().toLocaleString()}
{children}
</div>
);
searchbar 레이아웃은 클라이언트 라우터 캐시에 저장되어 있기 때문이다.
즉, 서버에서 다시 받아오지 않고 브라우저 캐시 데이터를 재활용한다.
search 페이지에서 새로고침을 하면 searchbar의 렌더링 시간이 변경된다.
이 경우 캐시는 모두 초기화된다.
즉, 새로고침 이후에는 캐싱 효과가 없다.
같은 브라우저라 하더라도,
클라이언트 라우터 캐시는 서버 컴포넌트 데이터(RSC Payload)만 저장한다.
이러한 정보는 캐싱 대상이 아니다.
클라이언트 라우터 캐시는 단순히 레이아웃만 저장하는 것이 아니다.
각 페이지에서 서버로부터 전달받은 RSC Payload 전체를 저장한다.
이 데이터에는 다음이 포함된다.
클라이언트 라우터 캐시는 브라우저 측에서 서버 컴포넌트 데이터를 저장함으로써 서버 요청을 줄이고 페이지 이동 속도를 최적화하는 기술이다.
결론적으로,
클라이언트 라우터 캐시는 공통 레이아웃 데이터뿐만 아니라 특정 페이지에 필요한 서버 컴포넌트 데이터(RSC Payload) 전체를 저장한다.
페이지 이동 시:
이를 통해 성능을 최적화한다.
특히 공통 레이아웃 데이터가 페이지 이동 간 반복적으로 사용되는 구조에서는, 클라이언트 라우터 캐시의 이점이 더욱 두드러진다.