import { unstable_cache } from 'next/cache';
const getCachedUser = unstable_cache(
//데이터 베이스 실행하는 쿼리
async (id) => getUser(id),
//cache에 저장할 key값
['my-app-user']
);
export default async function Component({ userID }) {
const user = await getCachedUser(userID);
...
}
const getCacheProducts = unstable_cache(
getProducts,['home-products'],{
//user가 페이지를 다시 요청하는데 60초가 지난 상태라면 cache에 있는 데이터가 아닌 getProducts을 다시 실행시켜 캐시에 새롭게 저장한다
//(60초마다 함수를 실행시키는게 아닌, 함수가 호출된 후 60초가 지났을때 다시 호출하면 함수를 재 실행시켜 새로운 데이터를 준다.)
revalidate:60
}
)
const revalidate = async () => {
"use server"
//home이랑 연관된 모든 데이터가 새로고침
revalidatePath('/home')
}
return(
<form action={revalidate}>
<button>Revalidate</button>
</form>
)
const getCachedProduct = unstable_cache(getProducts,["product-detail"],{
//tag는 여러개여도 상관없고 유니크한 이름이 아니어도 상관없다
tags:["product-detail"]
})
const revalidate = async () => {
"use server"
//위에서 만든 태그의 이름을 넣어준다
revalidateTag('product-detail')
}
return(
<form action={revalidate}>
<button>Revalidate</button>
</form>
)
fetch('https://aaa',{
next:{
validate:60,
tags:['product']
}
})
npm run build를 하여 npm run start모드 일때만 사용할 수 있는 옵션들export const dynamic = 'force-dynamic'
export const revalidate = 60
export async function generateStaticPrams() {
const product = await db.product.findMany({
select:{
id:true
}
})
return product.map((i) => ({id:i.id+""}))
}
cache를 사용해 페이지를 static으로 만들어 사이트 최적화를 시켜준다는것은 페이지 로딩 속도를 개선하고, 서버 부하를 줄이는 데 도움이 된다는것을 배웠다. 옵션들을 잘 사용하면 dynamic페이지도 static으로 바꿀 수 있어 로딩속도 개선에 좋을거 같은데 아직은 어떨때 써야하는지 감이 안온다.