tanstack-query의 기초를 다시 보면서 전에 팀 프로젝트를 진행할 때 네트워크 요청이 많아 사용량이 다 차버린 생각이 나서 네트워크 요청을 최소화하는 방법을 찾게 되었다.
상황 및 문제점
먼저 네트워크 요청을 줄이려면 tanstack-query의 데이터 캐싱을 사용해야 하는데 기존에는 stale time을 설정하지 않아서 0 이였다. 이 값이 0이면 데이터가 fresh 상태가 되지 않고 계속 stale 상태가 되어 계속 요청을 보내게 된다.
tanstack-query의 캐싱 기능을 사용하지 않게 되는 것이다.
그런데 staleTime을 조정해서 캐싱되는 시간을 확보하려고 하는데 문제가 되는 점이 있었다.
예를 들어 내가 좋아요 한 글이 있는데 이 글의 제목이나 유저가 좋아요를 취소하는 등의 변경이 발생하면 최신 데이터를 볼 수 없는 것 아닌가 하는 점이었다.
해결 방법
이 의문점을 해결하고자 찾아본 방법은 refetchInterval을 사용하는 것이다.
1. refetchInterval을 사용하여 사용자가 머무는 동안 설정한 시간 간격으로 데이터를 새로 가져오는 방법이다.
예시코드
const { data, isLoading, isError } = useQuery({
queryFn: () => getLikeBoardData(uid),
queryKey: [GET_USER_INFO.MY_LIKE_BOARD_LIST],
enabled: !!uid,
staleTime: 300000, //5분
refetchInterval: 60000, // 1분마다 데이터 재요청
})
staleTime을 5분으로 설정하고 refetchInterval을 1분으로 설정하여 데이터를 다시 가져오도록 하였다.
결론
refetchInterval과 staleTime을 사용하려면 두 가지를 고려해야 할 것 같다.
1. 데이터 사용 빈도
첫 번째로는 예를 들어 사용자가 좋아요 한 게시글만 모아서 보는 리스트라면 이 게시물 리스트를 자주 확인하는지와 같은 사용 빈도이다.
2. 실시간으로 변경되어야 하는 데이터 인지
위와 같은 좋아요 게시판이라면 사용자가 좋아요 취소를 했을 때 바로바로 반영되어 데이터가 변경되어야 하기 때문에 이 옵션을 사용하는 것은 바람직하지 않을 수 있다.
'TIL' 카테고리의 다른 글
SVN 기초 (4) | 2024.09.12 |
---|---|
nextjs/typescript lodash 에러 (0) | 2024.04.29 |
tailwind 로컬 서버랑 배포 서버의 css 우선순위가 왜 다르지? (2) | 2024.04.19 |
상위 컴포넌트에서 하위 컴포넌트로 늦게 내려오는 문제 (0) | 2024.04.18 |
[react/nextjs] 데이터가 있는지 판단 후 insert 또는 update (0) | 2024.04.05 |