๋ฌธ์ œ ๋ฐฐ๊ฒฝ

  1. ๋ฐ์ดํ„ฐ ๋กœ๋”ฉ ์ค‘ ๊นœ๋นก์ž„ ๋ฐœ์ƒ

    ๋ผ๋ฒจ ๋ณ€๊ฒฝ ์‹œ๋งˆ๋‹ค ์ƒˆ๋กœ์šด ๋ฐ์ดํ„ฐ๊ฐ€ ๋กœ๋“œ๋˜๋ฉด์„œ ์ง€๋„ ์ƒ์˜ ๋งˆ์ปค๋“ค์ด ๊นœ๋นก์ด๋Š” ํ˜„์ƒ์ด ๋ฐœ์ƒ.

  2. ์ง€๋„ ์ดˆ๊ธฐํ™” ๋ฌธ์ œ

    ๋ผ๋ฒจ ๋ณ€๊ฒฝ ํ›„, ๋ฐ์ดํ„ฐ ๋กœ๋“œ ์™„๋ฃŒ ์‹œ ์ง€๋„ ์ค‘์‹ฌ์ด ์ดˆ๊ธฐ ์ƒํƒœ๋กœ ๋˜๋Œ์•„๊ฐ€๊ฑฐ๋Š” ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒ.

์ด๋Š” ๋„คํŠธ์›Œํฌ ์š”์ฒญ๊ณผ UI ๊ฐฑ์‹  ์‚ฌ์ด์˜ ๋”œ๋ ˆ์ด๋กœ ์ธํ•ด ์‚ฌ์šฉ์ž ๊ฒฝํ—˜์ด ์ €ํ•˜๋˜๋Š” ์›์ธ์ด ๋˜์—ˆ์Œ.

๊ธฐ์กด ์ฝ”๋“œใ…Œ ๋กฑ

import { useQuery } from "@tanstack/react-query";
import { fetchMapMarkersByLabel } from "@/api";

export const useMarkersByLabel = (label: string) => {
  const { data, isLoading, isError } = useQuery({
    queryKey: ["markers", label],
    queryFn: () => fetchMapMarkersByLabel(label),
    enabled: !!label, 
  });

  return {
    markers: data,
    isLoading,
    isError,
  };
};

ํ”„๋ฆฌํŒจ์นญ ๋„์ž… ์ „์—๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ํ•„์š”ํ•  ๋•Œ๋งˆ๋‹ค API ์š”์ฒญ์ด ๋ฐœ์ƒํ•˜๋ฉฐ, ๋กœ๋”ฉ ์ƒํƒœ์™€ ๋ฐ์ดํ„ฐ ๊ฐฑ์‹  ๊ฐ„์˜ ๊ฐ„๊ฒฉ์ด ์กด์žฌํ–ˆ์Œ.


Prefetching ๋„์ž…

ํ”„๋ฆฌํŒจ์นญ์€ ์‚ฌ์šฉ์ž๊ฐ€ ํŠน์ • ๋ผ๋ฒจ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ํ•„์š”๋กœ ํ•˜๊ธฐ ์ „์— ๋ฐ์ดํ„ฐ๋ฅผ ๋ฏธ๋ฆฌ ์บ์‹ฑํ•˜๋Š” ๋ฐฉ๋ฒ•์œผ๋กœ, ๋‹ค์Œ ๋ฐฉ์‹์œผ๋กœ ๊ตฌํ˜„๋˜์—ˆ์Œ:

export const prefetchMarkersByLabel = (
  queryClient: ReturnType<typeof useQueryClient>,
  label: string
) => {
  queryClient.prefetchQuery({
    queryKey: ["markers", label],
    queryFn: () => fetchMapMarkersByLabel(label),
  });
};

import {
  useGetHoleMarkers,
  useGetMarkersByLabel,
  prefetchMarkersByLabel,
} from "@/store/queries/map.query";
import { useQueryClient } from "@tanstack/react-query";

export const useMap = (label?: string) => {
  const queryClient = useQueryClient();
  const safeLabel = label ?? "";

  const {
    data: HoleMarkers,
    isLoading: LoadingHole,
    isError: HoleError,
  } = useGetHoleMarkers();

  const {
    data: filteredMarkers,
    isLoading,
    isError,
    isPending,
  } = useGetMarkersByLabel(safeLabel);

  const labels = ["ํ•œ์‹", "์ผ์‹", "์ค‘์‹", "์–‘์‹", "๋””์ €ํŠธ"];
  labels
    .filter((label) => label !== safeLabel)
    .forEach((label) => {
      prefetchMarkersByLabel(queryClient, label);
    });

  return {
    HoleMarkers,
    LoadingHole,
    HoleError,
    filteredMarkers,
    isLoading,
    isError,
    isPending,
  };
};
  1. React Query์˜ prefetchQuery๋ฅผ ํ™œ์šฉํ•˜์—ฌ ๋ผ๋ฒจ ๋ฆฌ์ŠคํŠธ๋ฅผ ์ˆœํšŒํ•˜๋ฉฐ ๊ฐ ๋ผ๋ฒจ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐฑ๊ทธ๋ผ์šด๋“œ์—์„œ ๋ฏธ๋ฆฌ ๋กœ๋“œ.
  2. ์บ์‹ฑ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ํ™œ์šฉํ•ด ๋ผ๋ฒจ ๋ณ€๊ฒฝ ์‹œ ๋กœ๋”ฉ ์ƒํƒœ ์—†์ด ๋ฐ์ดํ„ฐ๋ฅผ ์ฆ‰์‹œ ์ œ๊ณต.

ํ•ด๊ฒฐ๋œ ๋ฌธ์ œ

1. ๊นœ๋นก์ž„ ์ œ๊ฑฐ

ํ”„๋ฆฌํŒจ์นญ์œผ๋กœ ์ธํ•ด ๋ผ๋ฒจ ๋ณ€๊ฒฝ ์‹œ ๋ฐ์ดํ„ฐ๋ฅผ ์ฆ‰์‹œ ๋กœ๋“œํ•  ์ˆ˜ ์žˆ์–ด ๋งˆ์ปค๊ฐ€ ๊นœ๋นก์ด๋Š” ํ˜„์ƒ์ด ์‚ฌ๋ผ์ง.

2. ์ง€๋„ ์ดˆ๊ธฐํ™” ๋ฌธ์ œ ํ•ด๊ฒฐ