Next.js에서 서버 캐싱 구성

App Hosting의 대부분의 Next.js 앱은 일반적인 Next.js 기본값을 유지할 수 있습니다. 하지만 인스턴스에 Memory limit exceeded 오류가 발생하면 experimental.isrFlushToDisk: false를 설정하여 캐시를 메모리에 유지하고 인스턴스가 다시 시작되지 않도록 해야 할 수 있습니다.

기본적으로 Next.js는 증분 정적 재생성(ISR)으로 생성된 페이지, 경로 핸들러 응답, 가져오기 결과와 같이 런타임에 렌더링하는 페이지와 데이터를 캐시합니다. 메모리에 보관하고 앱의 .next 디렉터리에 있는 파일에도 기록합니다. Next.js는 이러한 파일을 삭제하지 않습니다.

App Hosting에서 앱은 파일 시스템이 메모리에 있는 Cloud Run에서 실행됩니다. 여기에 작성된 파일은 인스턴스가 종료될 때까지 각 서빙 인스턴스(memoryMiB)에 할당된 메모리에 반영됩니다. 앱이 런타임에 여러 고유 페이지를 렌더링하는 경우(예: 빌드 시 생성되지 않는 매개변수가 있는 동적 경로) 인스턴스가 메모리 한도를 초과하여 다시 시작될 수 있습니다. 그러면 Cloud Run에서 Memory limit of 512 MiB exceeded with 515 MiB used와 같은 오류를 로깅합니다. 자세한 내용은 파일 시스템 액세스에 관한 Cloud Run 문서를 참고하세요.

메모리에 캐시 유지

Next.js가 파일 시스템에 캐시를 쓰지 않도록 하려면 next.config.js 파일에서 experimental.isrFlushToDisk를 false로 설정합니다.

// @ts-check

/** @type {import('next').NextConfig} */
const nextConfig = {
  experimental: {
    isrFlushToDisk: false,
  },
};

module.exports = nextConfig;

그런 다음 Next.js는 캐시된 콘텐츠를 메모리에만 최대 cacheMaxMemorySize(기본값 50MB)까지 보관하고 캐시가 가득 차면 가장 오랫동안 사용되지 않은 항목을 삭제합니다. 각 서빙 인스턴스에는 자체 캐시가 있으며, 인스턴스가 다시 시작되면 이 캐시가 손실됩니다.

이러한 변경사항이 포함된 커밋을 만들고 라이브 브랜치에 푸시합니다. 그런 다음 App Hosting 출시가 완료될 때까지 기다립니다.