대부분의 상태 관리 라이브러리는 클라이언트 상태 작업에는 좋다. 하지만 클라이언트와 서버의 상태가 다르기 때문에 비동기 및 서버 상태 작업에는 좋지 않다.
서버 상태
APP에서 서버 상태의 특성을 파악하며 작업을 하면 아래의 과제들이 발생할 수 있다.
이 문제들을 해결하는 것은 쉽지 않지만 탄스택 쿼리를 쓰면 쉽게 해결 가능하다.
개념 | 설명 |
---|---|
Query | 데이터를 가져오는 요청 (useQuery) |
Mutation | 데이터를 변경하는 요청 (useMutation) |
Cache | 요청한 데이터를 저장하고 다시 활용 |
staleTime | 데이터가 “오래됨” 상태로 간주되기까지의 시간 |
cacheTime | 데이터가 메모리에 유지되는 시간 |
$ yarn add @tanstack/vue-query axios
// main.ts
import { createApp } from 'vue'
import { VueQueryPlugin } from '@tanstack/vue-query'
import App from './App.vue'
const app = createApp(App)
app.use(VueQueryPlugin)
app.mount('#app')
defaultOptions 옵션으로 queryClient를 생성할 때 기본 옵션을 지정하면 모든 useQuery와 useMutation에 적용된다. 하지만 기본 옵션을 지정했어도 개별 useQuery에서 옵션을 변경할 수 있다.
// App.vue, VueQuery 설정
const vueQueryPluginOptions: VueQueryPluginOptions = {
queryClientConfig: {
defaultOptions: {
queries: {
queryFn: defaultQueryFn, // 기본 queryFn 적용
staleTime: 1000 * 60, // 1분 동안 fresh 상태 유지
cacheTime: 1000 * 60 * 5, // 5분 후 캐시 삭제
refetchOnWindowFocus: false, // 창 포커스 시 자동 리패치 비활성화
},
},
},
};
app.use(VueQueryPlugin, vueQueryPluginOptions); // VueQueryPlugin 등록
탄스택 쿼리 DevTools로 쿼리 상태를 쉽게 확인하고 디버깅할 수 있다.
$ yarn add @tanstack/vue-query-devtools
VueQueryDevtools는 컴포넌트라서 app.use()로 등록하지 않는다.
<!-- App.vue -->
<script setup lang="ts">
import { VueQueryDevtools } from '@tanstack/vue-query-devtools'
</script>
<template>
<RouterView />
<VueQueryDevtools />
</template>
캐시된 쿼리 확인: 현재 캐시에 저장된 쿼리 목록과 상태를 확인 가능
쿼리 상태 변경: 강제 리페치, 무효화 등 실시간으로 상태 변경 가능
네트워크 요청 확인: 요청과 응답 데이터를 확인하고 성능 분석 가능
캐시 타이머 확인: staleTime, gcTime 등 타이머 정보 확인 가능