๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

Frontend/TanStack Query

Parallel Queries

"Parallel"(๋ณ‘๋ ฌ) ์ฟผ๋ฆฌ๋Š” fetching ๋™์‹œ์„ฑ์„ ๊ทน๋Œ€ํ™”ํ•˜๊ธฐ ์œ„ํ•ด ๋ณ‘๋ ฌ๋กœ, ์ฆ‰ ๋™์‹œ์— ์‹คํ–‰๋˜๋Š” ์ฟผ๋ฆฌ์ด๋‹ค.

 

Manual Parallel Queries: ์ˆ˜๋™ ๋ณ‘๋ ฌ ์ฟผ๋ฆฌ

๋ณ‘๋ ฌ ์ฟผ๋ฆฌ์˜ ์ˆ˜๊ฐ€ ๋ณ€๊ฒฝ๋˜์ง€ ์•Š๋Š”๋‹ค๋ฉด, ๋ณ‘๋ ฌ ์ฟผ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐ ๋ณ„๋‹ค๋ฅธ ๋…ธ๋ ฅ์ด ํ•„์š”ํ•˜์ง€ ์•Š๋‹ค. TanStack Query์˜ useQuery ๋ฐ useInfiniteQuery ํ›…์„ ์›ํ•˜๋Š” ๋งŒํผ ๋‚˜๋ž€ํžˆ ์‚ฌ์šฉํ•˜๊ธฐ๋งŒ ํ•˜๋ฉด ๋œ๋‹ค. 

function App () {
  // ๋‹ค์Œ ์ฟผ๋ฆฌ๋“ค์€ ๋ณ‘๋ ฌ๋กœ ์‹คํ–‰๋œ๋‹ค
  const usersQuery = useQuery({ queryKey: ['users'], queryFn: fetchUsers })
  const teamsQuery = useQuery({ queryKey: ['teams'], queryFn: fetchTeams })
  const projectsQuery = useQuery({ queryKey: ['projects'], queryFn: fetchProjects })
  }

 

React Query๋ฅผ suspense mode์—์„œ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ, ์ด ๋ณ‘๋ ฌ ์ฒ˜๋ฆฌ ํŒจํ„ด์€ ์ž‘๋™ํ•˜์ง€ ์•Š๋Š”๋‹ค. ์ฒซ ๋ฒˆ์งธ ์ฟผ๋ฆฌ๊ฐ€ ๋‚ด๋ถ€์ ์œผ๋กœ promise๋ฅผ throwํ•˜์—ฌ ๋‹ค๋ฅธ ์ฟผ๋ฆฌ๊ฐ€ ์‹คํ–‰๋˜๊ธฐ ์ „์— ์ปดํฌ๋„ŒํŠธ๋ฅผ ์ผ์‹œ ์ค‘๋‹จ์‹œํ‚ค๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋ ค๋ฉด useSuspenseQueries ํ›…์„ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜(๊ถŒ์žฅ) ๋˜๋Š” ๊ฐ useSuspenseQuery ์ธ์Šคํ„ด์Šค์— ๋Œ€ํ•ด ๋ณ„๋„์˜ ์ปดํฌ๋„ŒํŠธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ณ‘๋ ฌ ์ฒ˜๋ฆฌ๋ฅผ ์ง์ ‘ ๊ตฌํ˜„ํ•ด์•ผ ํ•œ๋‹ค.

 

Dynamic Parallel Queries with useQueries: useQueries๋ฅผ ์‚ฌ์šฉํ•œ ๋™์  ๋ณ‘๋ ฌ ์ฟผ๋ฆฌ

์‹คํ–‰ํ•ด์•ผ ํ•˜๋Š” ์ฟผ๋ฆฌ์˜ ์ˆ˜๊ฐ€ ๋ Œ๋”๋ง๋งˆ๋‹ค ๋ณ€๊ฒฝ๋˜๋Š” ๊ฒฝ์šฐ, ํ›…์˜ ๊ทœ์น™์„ ์œ„๋ฐ˜ํ•˜๊ฒŒ ๋˜๋ฏ€๋กœ ์ˆ˜๋™ ์ฟผ๋ฆฌ ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋‹ค. ๋Œ€์‹ , TanStack Query๋Š” useQueries ํ›…์„ ์ œ๊ณตํ•˜๊ณ , ์ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์›ํ•˜๋Š” ๋งŒํผ์˜ ์ฟผ๋ฆฌ๋ฅผ ๋™์ ์œผ๋กœ ๋ณ‘๋ ฌ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

useQueries๋Š” queries ํ‚ค๋ฅผ ๊ฐ€์ง„ ์˜ต์…˜ ๊ฐ์ฒด๋ฅผ ์ธ์ž๋กœ ๋ฐ›์œผ๋ฉฐ ์ด ํ‚ค์˜ ๊ฐ’์€ ์ฟผ๋ฆฌ ๊ฐ์ฒด์˜ ๋ฐฐ์—ด์ด๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ฟผ๋ฆฌ ๊ฒฐ๊ณผ์˜ ๋ฐฐ์—ด์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

function App({ users }) {
  const userQueries = useQueries({
    queries: users.map((user) => {
      return {
        queryKey: ['user', user.id].
        queryFn: () => fetchUserById(user.id),
      }
    }),
  })
}

 

๋ฐ์ดํ„ฐ ๋กœ๋”ฉ ์„ฑ๋Šฅ์„ ์ตœ์ ํ™”ํ•˜๊ณ  UX๋ฅผ ํ–ฅ์ƒ์‹œํ‚ค๋Š” ๋ฐ ๋งค์šฐ ์ค‘์š”ํ•˜๊ฒŒ ์‚ฌ์šฉ๋œ๋‹ค.

ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๊ฐ€ 3๊ฐœ๋กœ ๊ณ ์ •๋˜์–ด ์žˆ๋‹ค๋ฉด?

useQuery 3๊ฐœ๋ฅผ ๋‚˜๋ž€ํžˆ ์“ด๋‹ค.

 

ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๊ฐ€ N๊ฐœ๋กœ ์œ ๋™์ ์ด๋ผ๋ฉด?

useQueries๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

 

https://tanstack.com/query/latest/docs/framework/react/guides/parallel-queries

 

Parallel Queries | TanStack Query React Docs

"Parallel" queries are queries that are executed in parallel, or at the same time so as to maximize fetching concurrency. Manual Parallel Queries When the number of parallel queries does not change, t...

tanstack.com

 

'Frontend > TanStack Query' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

Dependent Queries  (0) 2025.11.04
Network Mode  (0) 2025.10.24
Query Options  (0) 2025.10.23
Query Functions  (0) 2025.10.22
Query Keys  (0) 2025.10.21