[트러블 슈팅] 일부 api 호출 시 동기식으로 호출되는 문제 - 100-hours-a-week/4-bull4zo-fe GitHub Wiki
일부 api 호출 시 동기식으로 호출되는 문제
🐞 에러 내용
- 각 도메인별로 네트워크를 측정한 결과, 일부 호출이 의존관계가 없음에도 불구하고, 동기식으로 호출되어 지연되는 문제 발견
🔍 원인 분석
- page가
Errorboundary
로 감싸져 있고, 하위컴포넌트에 suspense가 존재해서 호출을 진행하는 과정에서, 하위컴포넌트 아래 부품컴포넌트의 api호출이 존재할 경우, errorboundary가 바로 하위컴포넌트의 요청을 트리거로 모두 호출 시 렌더링되도록 설정되어, 호출 이후 렌더링에서 부품컴포넌트의 api 호출이 시작되는 상황이 원인이었다.
✅ 해결 방법
- errorboundary가 사용된 컴포넌트의 상위 컴포넌트에서 SSR방식을 모방해 미리 데이터를 호출한다.
queryClient.prefetchQuery
, queryClient.prefetchInfiniteQuery
를 사용해 데이터를 미리 호출한다.
useEffect(() => {
queryClient.prefetchInfiniteQuery(infiniteGroupNameListQueryOptions())
}, [queryClient])
🤔 향후 대응 방안
- SSR 서비스로 넘어가면 prefetch를 SSR로직으로 변경이 가능하다.
💬 회고
- errorboundary의 특징과 suspense의 특징에 대해서 더 공부할 수 있었다.