Parallel Queries(๋ณ๋ ฌ ์ฟผ๋ฆฌ)
โ๋ณ๋ ฌโ ์ฟผ๋ฆฌ๋ fetching ๋์์ฑ์ ์ต๋ํํ๊ธฐ ์ํด ๋ณ๋ ฌ๋ก ๋๋ ๋์์ ์คํ๋๋ ์ฟผ๋ฆฌ์ด๋ค.
1. Manual(์๋) Parallel Queries
๋ณ๋ ฌ ์ฟผ๋ฆฌ์ ์๊ฐ ๋ณ๊ฒฝ๋์ง ์๋ ๊ฒฝ์ฐ, ๋ณ๋ ฌ ์ฟผ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ ๋ฐ ์ถ๊ฐ์ ์ธ ๋
ธ๋ ฅ์ด ํ์ํ์ง ์๋ค.
TanStack Query์ useQuery ๋ฐ useInfiniteQuery ํ
์ ๋๋ํ ์ฌ์ฉํ๋ฉด ๋๋ค!
1unction App () {2// The following queries will execute in parallel3const usersQuery = useQuery({ queryKey: ['users'], queryFn: fetchUsers })4const teamsQuery = useQuery({ queryKey: ['teams'], queryFn: fetchTeams })5const projectsQuery = useQuery({ queryKey: ['projects'], queryFn: fetchProjects })6...7}
React Query๋ฅผ suspense ๋ชจ๋๋ก ์ฌ์ฉํ ๋, ๋ณ๋ ฌ์ฑ(parallelism)์ ์ด ํจํด์ ์๋ํ์ง ์๋๋ค. ์๋ํ๋ฉด ์ฒซ ๋ฒ์งธ query๊ฐ ๋ด๋ถ์ ์ผ๋ก ํ๋ก๋ฏธ์ค๋ฅผ throwํ๊ณ , ๋ค๋ฅธ query๊ฐ ์คํ๋๊ธฐ ์ ์, ์ปดํฌ๋ํธ๋ฅผ ์ค๋จ์ํค๊ธฐ ๋๋ฌธ์ด๋ค. ์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด์๋(To get around this),
useSuspenseQueriesํ ์ ์ฌ์ฉํ๊ฑฐ๋ (๊ถ์ฅ๋จ)
๊ฐuseSuspenseQuery์ธ์คํด์ค์ ๋ํด ๋ณ๋์ ์ปดํฌ๋ํธ๋ฅผ ์ฌ์ฉํ์ฌ ์ง์ ๋ณ๋ ฌ์ฑ์ ์กฐ์จํด์ผ ํ๋ค.
2. Dynamic(๋์ ) Parallel Queries with useQueries
๋ ๋๋ง๋ง๋ค ์คํํด์ผ ํ๋ query์ ์๊ฐ ๋ณ๊ฒฝ๋๋ ๊ฒฝ์ฐ, ์๋(manual) query๋ฅผ ์ฌ์ฉํ ์ ์๋ค.
์๋ํ๋ฉด ์ด๋ ํ
์ ๊ท์น์ ์๋ฐํ๊ธฐ ๋๋ฌธ์
๋๋ค.
๋์ TanStack Query๋ (์ํ๋ ๋งํผ ๋์ ์ผ๋ก ๋ณ๋ ฌ๋ก ๋ง์ ์ฟผ๋ฆฌ๋ฅผ ์คํํ ์ ์๋) useQueries ํ
์ ์ ๊ณตํฉ๋๋ค.
useQueries๋ (queries ํค์ ๊ฐ์ผ๋ก query ๊ฐ์ฒด์ ๋ฐฐ์ด์ ๊ฐ์ง๋) ์ต์
๊ฐ์ฒด๋ฅผ ๋ฐ์ต๋๋ค.
์ด๋ query ๊ฒฐ๊ณผ์ ๋ฐฐ์ด์ ๋ฐํํฉ๋๋ค.
1function App({ users }) {2const userQueries = useQueries({3queries: users.map(user => {4return {5queryKey: ['user', user.id],6queryFn: () => fetchUserById(user.id),7}8}),9})10}