: Incremental Static regeneration의 request는 page가 re-generate되도록 한다. revalidate 속성은 얼마동안에 한번 regeneration이 일어날지를 설정한다.
공식문서를 보다가 revalidate를 보고 궁금하게 생겨서 정리하게 되었다.
revalidate는 말 그대로 재검증한다는 말이다. 개념을 보니 초를 줘서 이 초시간이 지나면 페이지가 업데이트가 된다는 말이었다. 그런데 초마다 업데이트가 된다면 과부하되지 않을까라고 생각했다. 그런데 참고사이트에서 해답을 얻게 되었다.
1) 자동 업데이트되는가?
→ 화면 요청이 없는 경우에는 rebuild가 되지 않는다.
2) 사용자가 validate초 이상을 페이지에 머물러야 업데이트되는가?
→ 기준이 build/generate 시간이다. 그러므로 이 시간을 기준으로 화면 요청이 들어온 시간을 비교하기 때문에 몇 초 머물러도 상관이 없다. 이는 시간 카운팅 개념이 아니므로 상관이 없다.
3) 한 사용자가 validate 초 이상 페이지에 머무르면 재요청 없이도 재생성 trigger되는가?
→ 장기간 페이지에 머물러도 재요청이 없으면 trigger 되지 않는다. 다음번 사용자가 접속하더라도 동일한 화면을 보게된다.
4) 모든 사용자가 5초 이내로 접속하고 나간다면, 이 페이지는 영원히 재생성 되지 않는건가?
모든 사용자가 몇 초 동안 접속하든 머무르든 상관없고, build/generate 시간과의 비교가 trigger의 조건이다.
첫 요청은 regeneration을 트리거할뿐이고 옛날버전을 그대로 받아온다. regeneration이 끝난후에 들어온 요청은 새걸 받는다.
regeneration을 트리거해서 page를 새로 생성했을때, 결과가 안변했다면 304로 Response 를 받는다. 화면의 태그들이 변하고, 새로 고침하면 status 200 코드와 함께 regenerate된걸 보내준다.
💡 Cache-control의 must-revalidate를 통해서 무조건 revalidate는 하되 regenerate해서 달라진게 있으면 200, 없으면 304를 돌려준다.
정리
build 또는 re-generate된 시간을 기준으로
- validate 초 이내 화면요청이 들어온 경우 -> build 되어있는 파일 전달
- validate 초 이후 화면요청이 들어온 경우 -> build 되어있는 파일 전달 + re-generate 작업 시작
빌드 후 화면요청이 한 번도 없으면 re-generation도 일어나지 않는다. re-generation 완료 후에 들어오는 요청은 re-generate된 파일을 전달한다. 요청을 받을때마다 다시 요청시간과 마지막 화면생성시각을 비교하여 re-generate가 trigger된다.