개발자

next.js app-router에서 fetch revalidate 옵션을 주었을 때 데이터가 갱신되지 않는 현상

2024년 02월 29일조회 324

현재 서버에서 하루 단위로 DB데이터를 업데이트하고 있습니다. 거기에 맞춰 프론트단에서도 하루 단위로 갱신된 데이터를 보여주기 위해 api fetch옵션인 `{ next: {revadliate : 36000} }` 을 설정해 두었습니다. 그런데 revalidate로 설정한 시간이 지나도 화면에 나타나는 데이터가 갱신되지 않아요... 개발 환경에선 업데이트 된 데이터가 나오다가도 배포 페이지에선 이전 데이터가 나오는거 같아요. (배포는 aws로 했습니다) 서버 db 데이터는 잘 업데이트 되고있는걸 확인했습니다. 혼자서 자료를 아무리 찾아봐도 원인과 해결법을 모르겠어서 도움 요청합니다ㅠㅠ fetch 코드와 fetch를 호출하는 코드도 함께 첨부합니다.

이 질문이 도움이 되었나요?
'추천해요' 버튼을 누르면 좋은 질문이 더 많은 사람에게 노출될 수 있어요. '보충이 필요해요' 버튼을 누르면 질문자에게 질문 내용 보충을 요청하는 알림이 가요.
profile picture
익명님의 질문

답변 1

백승훈님의 프로필 사진

안녕하세요 답변 드립니다 😏 개발 환경에서 정상 작동한다면 배포 환경의 캐싱 데이터가 아직 존재할 수 있습니다. https://www.smileshark.kr/post/how-to-set-cachecontrol-header-in-amazon-cloudfront 혹시 AWS에서 Cloudflare나 다른 캐싱 서비스 (Redis)등을 제공하는 서비스와 연결되어 있으실 것 같은대 해당 부분에서 캐싱 데이터가 업데이트되지 않아 발생하는 문제일 확율이 높습니다. 혹은 Next의 버전에 따라 SSG나 ISR을 사용하셨다면 재갱신 주기를 설정하거나 빌드 시 html 파일이 이미 완성된 상태라 구조 자체를 다시 확인하셔야 할 수 있습니다.

profile picture

익명

작성자

2024년 02월 29일

안녕하세요 답변 감사합니다! aws에서는 E2C로 단순 배포만 하였고 cludflare, redis 등을 사용하지 않은거 같아요. 제가 배포했지만 aws를 잘 모른채 그냥 따라한거라.. 복잡한 기능은 사용하지 않은 것 같습니다. 컴포넌트가 ssg, isr인지 확인하기 위해 build해보았는데 람다 아이콘(Dynamic)이 뜹니다. 문득 든 생각인데 혹시 fetch를 실행하는 컴포넌트가 SSR인게 이유일수도 있을까요?

백승훈님의 프로필 사진

백승훈

프론트 엔드 개발자 (FE)2024년 02월 29일

좀더 정확하게 확인해보기 위해선 배포시 통신의 결과값을 먼저 확인해보세요 백엔드와 Rest API 통신 및 CSR환경이면 통신 응답을 보실 수 있으실꺼고 그 응답에 제대로된 값이 들어오는지 보시면됩니다. SSR 환경이면 서버에서 그려줄 때 캐싱된 이전값을 불러와 사용하거나 할 가능성도 있습니다. 자세한건 저도 코드랑 사이트를 봐야 아는거라 일단 해당 항목부터 점검해보세요😏

profile picture

익명

작성자

2024년 03월 28일

알고보니 revalidate는 잘 동작하는데 서버쪽 DB업데이트 시간과 제가 설정한 revalidate시간 차이때문에 업데이트되지 않아보였던 버그(?)였습니다! 답변감사했습니다😊

지금 가입하면 모든 질문의 답변을 볼 수 있어요!

현직자들의 명쾌한 답변을 얻을 수 있어요.

또는

이미 회원이신가요?

목록으로
키워드로 질문 모아보기

실무, 커리어 고민이 있다면

새로운 질문 올리기

지금 가입하면 모든 질문의 답변을 볼 수 있어요!