revalidatePath·revalidateTag·CDN purge
User와 DB 사이에는 캐시가 여러 겹 있다. 순서로 표현하면
/api/catalog/*에 걸린 5분 캐시가 있음.가격을 수정하는 서버 액션은 5번만 변경. 그러므로 그 위에 있는 4,3,2번은 각각 따로 걷어내야한다.
revalidatePath나 revalidateTag로 지운다.결론은 안쪽부터 바깥쪽 순서로, DB -> Next 캐시 -> CDN 순서로 지워야한다.
CDN을 먼저 지우게되면 CDN이 아직 갱신되지 않은 Next 캐시에서 옛 가격을 다시 받아와 저장할 수 있다.
revalidatePath('/products/[id]', 'page')는 경로 단위이다. 해당 페이지나 레이아웃의 캐시를 무효화.revalidateTag('catalog', 'max')는 태그 단위. 내가 붙인 태그를 가진 데이터를 무효화하며, 어느 페이지에서 쓰였는지는 상관 없음.비유로 하자면 path는 해당 장소, tag는 빨간 스티커 붙인곳
가격 처럼 여러 페이지에 흩어져 있으면 tag 가 더 잘 맞음
즉시 재생성 되지 않는다. 호출 시점에는 stale 표시만 해두고, 실제 재생성은 그 다음요청 시 재생성 된다.
Next.js 16기준으로 revalidateTag는 두 번째 인자가 필수.max 프로필을 쓰면 다음 요청은 일단 옛 데이터를 받고, 그 사이 백그라운드에서 새 데이터를 만든다.
이방식이 항상 얘기했던 stale-while-revalidate.
그 둘을
/api/catalog/*처럼 5분 CDN 캐시가 걸린 응답이라면, 어드민이 가격을 고쳐도 최대 5분은 옛 가격이 보일 수 있다 — 이걸 즉시 반영하려면 무엇을 추가로 해야 하나