해결된 질문
작성
·
551
1
안녕하세요 강사님. getServerSideProps 강의를 보고 실습중에 캐시가 되지 않아 질문드립니다. 다음과 같이 코드를 작성하고, getServerSideProps 페이지에서 로드된 html 문서의 헤더를 보면 캐시 정보가 나오지 않고 캐시가 되지 않는데 이유를 알 수 있을까요..?
import type { GetServerSideProps, NextPage } from 'next';
type Props = {
data: number;
};
const Example: NextPage<Props> = ({ data }) => {
return (
<main>
<h1>getServerSideProps Page!</h1>
<p>값: {data}</p>
</main>
);
};
export default Example;
export const getServerSideProps: GetServerSideProps = async ({ res }) => {
res.setHeader(
'Cache-Control',
'public, s-maxage=5, stale-while-revalidate=10'
);
const delayInSeconds = 2;
const data = await new Promise((resolve) =>
setTimeout(() => resolve(Math.random()), delayInSeconds * 1000)
);
return {
props: { data },
};
};
답변 1
1
안녕하세요 질문 감사합니다!
네트워크 사진을 보니 로컬 환경에서 테스트를 하신 것 같습니다. getServerSideProps의 캐시 기능은 vercel로 배포를 한 후에 동작을 확인하실 수 있습니다. (해당 강의의 URL을 확인하시면 배포된 URL을 사용하고 있습니다. 중요한 부분이 아니라 설명을 생략했는데, 여기서 혼란이 생긴 것 같습니다.)
cache-control을 읽어 올바른 캐시 동작을 하기 위해서는 캐시 서버에서 해당 기능을 구현해야합니다. 일반적인 경우처럼 Vercel을 이용하여 배포하면 자동으로 캐시가 지원됩니다. 하지만 vercel을 이용하지 않고 직접 배포할 경우 redis 등의 캐시 서버를 통해 캐시 로직을 추가해줘야합니다.
관련 공식문서 올려드립니다! 초급 강의 범위 밖이라, 일단 넘어가셔도 괜찮습니다ㅎㅎ (https://nextjs.org/docs/pages/building-your-application/deploying/production-checklist#caching)
감사합니다 :)
감사합니다 :)