-
Notifications
You must be signed in to change notification settings - Fork 5
React Query 설명
React Query는 서버 상태를 관리하기 위한 훌륭한 도구입니다. 클라이언트 애플리케이션이 서버로부터 데이터를 가져오고, 캐싱하며, 업데이트하고, 동기화하는 과정을 쉽게 관리하도록 도와줍니다. React Query를 사용하면 비동기 작업을 좀 더 효율적으로 처리할 수 있으며, 로딩, 오류 처리, 캐싱, 데이터 무효화 등의 복잡한 상태를 간단하게 관리할 수 있습니다.
-
What (무엇)
React Query는 데이터 패칭, 캐싱, 동기화, 서버와의 상호작용을 효율적으로 관리하는 라이브러리입니다. API를 호출하고, 그 결과를 상태로 관리하고, 캐싱, 리패칭, 오류 처리 등을 간편하게 할 수 있습니다. -
Why (왜)
서버로부터 데이터를 패칭할 때는 여러 가지 복잡한 작업이 필요합니다. 예를 들어:- 데이터를 가져오는 동안 로딩 상태를 관리해야 함
- 데이터를 가져오는 도중 오류가 발생하면 이를 처리해야 함
- 데이터를 여러 곳에서 중복해서 요청하지 않도록 캐싱이 필요함
- 데이터가 변경되었을 때 자동으로 갱신해야 함
이러한 문제들을 React Query가 자동으로 관리해주기 때문에 코드의 복잡도를 크게 줄여줍니다.
-
Where (어디에)
서버에서 데이터를 자주 패칭해야 하는 모든 클라이언트 애플리케이션에서 사용할 수 있습니다. 특히 리액트 기반 애플리케이션에서 매우 유용하며, 서버와의 상호작용이 많은 대규모 애플리케이션에서 그 장점이 두드러집니다. -
When (언제)
서버 상태를 클라이언트에서 관리해야 할 때 사용됩니다. 특히 다음과 같은 상황에서 React Query는 매우 유용합니다:- 서버에서 데이터를 패칭할 때
- 동일한 데이터를 여러 컴포넌트에서 사용할 때 (캐싱 및 동기화)
- 실시간 데이터 갱신이 필요할 때
- 데이터의 무효화와 갱신이 필요한 경우
-
Who (누가)
서버와 클라이언트 간의 데이터 동기화가 필요한 프론트엔드 개발자가 주로 사용합니다. 리액트 애플리케이션을 개발하는 모든 사람이 사용할 수 있으며, 특히 API와 통신이 빈번한 프로젝트에서 필수적인 도구입니다. -
How (어떻게)
React Query를 사용하면useQuery
,useMutation
같은 훅을 이용해 서버와의 통신을 간편하게 처리할 수 있습니다. 이 훅들은 데이터를 패칭하고, 캐시하며, 오류를 처리하고, 데이터를 갱신하는 로직을 자동으로 관리합니다.
간단한 예제로, 유저 목록을 가져오는 API를 사용해 보겠습니다.
먼저, 패키지를 설치합니다.
npm install @tanstack/react-query
// _app.tsx (Next.js 예제)
import { QueryClient, QueryClientProvider } from '@tanstack/react-query';
import { ReactQueryDevtools } from '@tanstack/react-query-devtools';
import type { AppProps } from 'next/app';
const queryClient = new QueryClient();
export default function MyApp({ Component, pageProps }: AppProps) {
return (
<QueryClientProvider client={queryClient}>
<Component {...pageProps} />
<ReactQueryDevtools initialIsOpen={false} />
</QueryClientProvider>
);
}
// components/UserList.tsx
import { useQuery } from '@tanstack/react-query';
const fetchUsers = async () => {
const res = await fetch('https://jsonplaceholder.typicode.com/users');
if (!res.ok) {
throw new Error('Network response was not ok');
}
return res.json();
};
export default function UserList() {
const { data, error, isLoading } = useQuery(['users'], fetchUsers);
if (isLoading) return <div>Loading...</div>;
if (error instanceof Error) return <div>Error: {error.message}</div>;
return (
<ul>
{data.map((user: any) => (
<li key={user.id}>{user.name}</li>
))}
</ul>
);
}
-
useQuery
: 데이터를 패칭하고, 캐싱하며, 상태(로딩, 오류 등)를 관리합니다. -
queryKey
: 캐싱할 데이터의 식별자로, React Query는 이 키를 기준으로 데이터를 캐싱하고, 필요할 때 데이터를 리패칭합니다. -
isLoading
: 데이터가 로드되는 동안 로딩 상태를 나타냅니다. -
error
: 패칭 중에 발생한 오류를 처리합니다. -
data
: 패칭된 데이터를 담고 있습니다.
대규모 애플리케이션에서 데이터를 효율적으로 관리하지 않으면 다음과 같은 문제를 겪을 수 있습니다:
- 여러 컴포넌트에서 같은 데이터를 중복 요청하여 불필요한 네트워크 트래픽 발생
- 데이터가 업데이트되었을 때, 수동으로 갱신 로직을 처리해야 하는 번거로움
- 비동기 처리의 복잡성이 커지고, 로딩 상태나 오류 처리가 일관되지 않음
React Query는 이러한 문제를 해결해주고, 데이터 패칭과 상태 관리를 일관성 있게 할 수 있는 강력한 도구입니다.
React Query는 서버와 클라이언트 간의 데이터 패칭과 상태 관리를 크게 단순화해주는 도구로, 대규모 애플리케이션에서 필수적일 수 있습니다. 이를 통해 API 통신과 관련된 많은 문제들을 해결하고, 더 나은 사용자 경험을 제공합니다.