개발자

리액트쿼리 고수분들 도와주세요

2024년 01월 08일조회 99

사이드프로젝트 리팩토링을 진행하는 중에 이해가 안되는 부분이 있어 글 써봅니다. const { data, isLoading, fetchNextPage } = useInfiniteQuery( ["getProducts", sortOption, sortOrder, filterValue, categoryName], async ({ pageParam = page - 1 }) => { const response = await api.post(`/cal/v1/product/${categoryName}`, { filter: filterValue, page: pageParam, query: "", size: size, => size: size - 8 /* 변경한 부분 */ sort: [{ field: sortOption, option: sortOrder }], }); setTotalProduct(response.data.body.product.totalCount); return response.data.body.product.items; }, { refetchOnWindowFocus: false, getNextPageParam: () => page, } ); 위 코드는 인피니티 스크롤을 구현한건데요, size는 한번에 받아 올 상품의 개수 입니다. 상품을 한번에 4개 받아올때는 500ms~, 8개 = 2500ms~, 12개 = 10000ms~ 정도로 요청시간이 비정상적으로 커집니다. 사용자경험과 api요청횟수를 고려했을 때, 12개를 받아오는것이 가장 적당하다고 생각되는데 렌더링 속도가 많이 느리다고 생각되서 개선하고자 합니다. **초기렌더링 에서만 문제가 발생되고, 캐싱되어 fresh한 상태일 때는 바로 불러옵니다** 코드의 다른요소들은, 필터링. 정렬들을 위한 요소들이라 렌더링 시간에 영향을 줄 것 같지는 않은데 왜 이런 문제가 발생하는지 궁금합니다. 이 외에도 잘못작성된 부분이 있거나, 개선해야할 사항이 보이신다면 알려주시면 감사하겠습니다!!

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

답변 1

노우준님의 프로필 사진

안녕하세요 캐싱된 데이터는 빠르게 렌더링된다면, 서버에서 데이터를 요청할 때 지연이 발생한다는 것인데, 이는 네트워크 문제 혹은 API 백엔드 문제일 것이라고 생각합니다. 서버에서 비효율적인 쿼리를 사용중이거나, 데이터베이스와의 네트워크 연결 상태가 느리거나 등 여러 원인을 살펴봐야 할 것 같아요

김태영님의 프로필 사진

김태영

작성자

제로베이스 프론트엔드스쿨 소프트웨어개발과2024년 01월 08일

답변 감사합니다! 현재 백엔드 로그를 보기가 힘든상황인데, 프론트단에서 알아보거나 조치할것은 더이상 없을까요?

노우준님의 프로필 사진

노우준

연세대학교 응용통계학과, 컴퓨터과학과2024년 01월 08일

보여주신 코드만 봤을 때는 상품목록을 불러올 때 서용하는 query parameter들을 전부 서버로 보내주는 방식이라 프론트 단에서는 payload에 담긴 parameter 중에 잘못된 것이 없는지 확인하는 것 말고는 크게 검토할 만한 부분이 제게는 보이지 않네요 ㅠㅠ

김태영님의 프로필 사진

김태영

작성자

제로베이스 프론트엔드스쿨 소프트웨어개발과2024년 01월 08일

정렬과 필터를 위한 parameter들 이라 렌더링에 영향을 주는 것들은 아닐거에요ㅠㅠ 답변 감사드립니다!

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

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

또는

이미 회원이신가요?

AI 답변
커리어리 AI 봇 프로필 이미지

커리어리 AI 봇

GPT가 달아주는 답변입니다.

2024년 01월 08일

네트워크 요청 시간은 받아오는 데이터의 양에 비례하게 증가하는 것이 일반적입니다. 따라서 한 번에 더 많은 상품을 가져올수록 요청 시간이 늘어나는 것은 정상적인 성능 행동이라고 볼 수 있습니다. 그러나 여기서 언급한대로, 상품 개수를 4에서 8로 늘렸을 때 요청 시간이 0.5ms에서 약 2500ms로 치솟는 것은 예상된 동작이 아니며, 이 문제는 제공된 코드 자체보다는 서버측 처리나 네트워크 이슈와 관련이 있을 가능성이 높습니다. 해당 API를 호출할 때 서버에서 어떻게 데이터를 처리하는지 확인해 보시기 바랍니다. 예를 들어, 데이터베이스 쿼리 최적화가 잘못되었거나, API 서버의 부하 등 다양한 원인들로 인해 이런 지연이 발생할 수 있습니다. 더불어 클라이언트 사이드에서 리액트 쿼리를 사용하여 API 응답을 처리하는 방식도 검토해 볼 가치가 있습니다. 데이터 크기가 커짐에 따라 렌더링 속도가 저하되는 문제를 우려한다면, 가상 스크롤링 등의 방법을 사용하여 화면에 보이는 부분만 렌더링하는 방식을 고려해보세요. 마지막으로, 페이지네이션 또한 고려해볼 수 있습니다. 한 번의 요청에 대한 크기(size)를 줄여 그 효과를 흩뿌리는 방법으로 서버와 클라이언트 모두 감당 가능한 양의 데이터만 처리하게 하여 성능 문제를 완화할 수 있습니다.

목록으로

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