diff --git a/src/app/university/application/ScorePageContent.tsx b/src/app/university/application/ScorePageContent.tsx index 0991f75d..d071d907 100644 --- a/src/app/university/application/ScorePageContent.tsx +++ b/src/app/university/application/ScorePageContent.tsx @@ -43,13 +43,7 @@ const ScorePageContent = () => { thirdChoice: [], }; - const { - data: scoreResponseData = initialData, - isError, - isLoading, - } = useGetApplicationsList({ - retry: false, - }); + const { data: scoreResponseData = initialData, isError, isLoading } = useGetApplicationsList(); const filteredAndSortedData = useMemo(() => { // ✨ 1. 대학 이름(koreanName)을 기준으로 중복을 제거하는 헬퍼 함수 diff --git a/src/components/layout/GlobalLayout/ui/ClientModal/index.tsx b/src/components/layout/GlobalLayout/ui/ClientModal/index.tsx index 92ade71c..957e2246 100644 --- a/src/components/layout/GlobalLayout/ui/ClientModal/index.tsx +++ b/src/components/layout/GlobalLayout/ui/ClientModal/index.tsx @@ -33,7 +33,11 @@ const ClientModal = () => { return ( <> {isFetching ? ( -
+
) : null} diff --git a/src/lib/react-query/queryClient.ts b/src/lib/react-query/queryClient.ts index 8d18bf17..4a42d8ed 100644 --- a/src/lib/react-query/queryClient.ts +++ b/src/lib/react-query/queryClient.ts @@ -1,9 +1,30 @@ import type { AxiosError } from "axios"; import { toast } from "@/lib/zustand/useToastStore"; -import { QueryClient } from "@tanstack/react-query"; +import { MutationCache, QueryCache, QueryClient } from "@tanstack/react-query"; const queryClient = new QueryClient({ + queryCache: new QueryCache({ + onError: (error) => { + // query 실패 시 전역 에러 토스트 (401 제외) + const axiosError = error as AxiosError<{ message?: string }>; + const status = axiosError?.response?.status; + if (status === 401) return; // 인증 오류는 토스트 표시 X + + const errorMessage = + axiosError?.response?.data?.message || axiosError?.message || "오류가 발생했습니다. 다시 시도해주세요."; + toast.error(errorMessage); + }, + }), + mutationCache: new MutationCache({ + onError: (error) => { + // mutation 실패 시 전역 에러 토스트 + const axiosError = error as AxiosError<{ message?: string }>; + const errorMessage = + axiosError?.response?.data?.message || axiosError?.message || "오류가 발생했습니다. 다시 시도해주세요."; + toast.error(errorMessage); + }, + }), defaultOptions: { queries: { staleTime: 5 * 60 * 1000, // 데이터 신선도(5분) @@ -11,19 +32,10 @@ const queryClient = new QueryClient({ retry: (failureCount, error) => { const status = (error as AxiosError | undefined)?.response?.status; if (status === 401) return false; // 인증 오류는 재시도 X - return failureCount < 3; // 그 외에는 최대 3회까지 재시도 + return failureCount < 1; // 그 외에는 최대 1회까지 재시도 }, refetchOnWindowFocus: false, // 창 포커스 복귀 시 refetch 비활성 }, - mutations: { - onError: (error) => { - // mutation 실패 시 전역 에러 토스트 - const axiosError = error as AxiosError<{ message?: string }>; - const errorMessage = - axiosError?.response?.data?.message || axiosError?.message || "오류가 발생했습니다. 다시 시도해주세요."; - toast.error(errorMessage); - }, - }, }, });