React-Query - REST
- https://tanstack.com/query/latest/
- 공식문서 따라서 Tanstack-query v5 배우기
React-query에서Tanstack-query로 라이브러리명을 바꿨음- 공식문서 읽다가 오타나 잘못 표기된 정보가 있으면 github로 편집해서 알려줄 수도 있다.
1. 전반적인 소개(overview)
- TanStack Query (FKA React Query)
- FKA : ‘formerly known as’ (~전에는 로 알려진)
- 데이터 가져오기(fetching) 뿐만 아니라,
- 웹앱에서
서버 상태(state)를 가져오고, 캐싱, 동기화, 업데이트할 수 있다.
💡 cache(캐시)와 캐싱
- 원래 은밀한 장소에 숨겨 놓은 ‘은닉처’라는 의미를 지니고 있지만,
- 컴퓨터 용어로 사용할 때는 ‘고속 기억장치’를 가리킵니다.
- 즉, 컴퓨터가 빨리 정보를 찾을 수 있도록 정보를 보관하는 메모리 부분을 cache 또는 cache memory라고 부름
캐싱은 빠른 속도를 위해 캐시에 데이터 저장하는 행위를 말함
- 대부분 웹 프레임워크에는 데이터를 가져오거나 업데이트하는 방법이 없음.
- 전통적인 상태관리 라이브러리에는 클라이언트 상태 작업에 적합하고,
- 비동기 or 서버 상태 작업이 적합하지 않다.
💡 서버 상태(server state)
- 개발자가 제어하거나 소유할 수 없는 위치에 원격으로 지속되는 것
- 가져오거나 업데이트를 위해 비동기(asynchronous) API 필요
- 공동 소유권을 의미하며, 님도 모르게 다른 사람에 의해 변경 될 수 있음
- 주의하지 않으면, 님 앱이 잠재적으로 “구식”이 될 수 있다.
일단 님이 서버 상태의 특징(nature)을 파악(grasp)했다면, 다음과 같이 더 많은 문제가 존재함
- 캐싱…
- 동일한 데이터에 대한 여러 요청을 단일 요청으로 중복 제거
- 백그라운드에서 “오래된” 데이터 업데이트
- 데이터가 “오래된” 시점 파악
- 가능한 한 빨리 데이터 업데이트 반영
- 페이지 매김 및 지연 로딩 데이터와 같은 성능 최적화
- 서버 상태의 메모리 및 가비지컬렉션 관리
- cf. 가비지컬렉션 : 메모리 관리 기법 중 하나로 프로그램이 동적으로 할당했던 메모리 영역 중에서 필요없게 된 영역을 해제하는 기능
- 구조적 공유로 쿼리 결과 메모이징(cf. Memoizing : 메모리써서 저장해놓는 것)
위 문제들 다 해결했으면, 천재이니 react-query 안배워도 됨. react-query팀도 위 문제들의 표면적인 부분을 조금씩 처리(scratching)하고 있음
1.1 기술적인 측면에서 React Query 장점
- 복잡한 코드를 react-query 몇 줄로 대체 가능
- 유지 관리 쉽고, 서버 상태 데이터를 추가한 새 기능을 쉽게 빌드 가능
- 빨리 데이터 갖고와서 실제 유저들이 쓰기 좋다함
- 대역폭을 절약하고 메모리 성능을 높이기 좋다함
1.2 대충 어떻게 생긴지 구경해보자
1import { QueryClient, QueryClientProvider, useQuery } from '@tanstack/react-query'23// (1) 앱 root에서 QueryClientProvider를 설정해 tanstack-query 제공4const queryClient = new QueryClient()56export default function App() {7return (8<QueryClientProvider client={queryClient}>9<Example />10</QueryClientProvider>11)12}1314function Example() {15const { isPending, error, data } = useQuery({16queryKey: ['repoData'],17queryFn: () => fetch('https://api.github.com/repos/TanStack/query').then(res => res.json()),18})1920if (isPending) return 'Loading...'2122if (error) return 'An error has occurred: ' + error.message2324return (25<div>26<h1>{data.name}</h1>27<p>{data.description}</p>28<strong>👀 {data.subscribers_count}</strong> <strong>✨ {data.stargazers_count}</strong>{' '}29<strong>🍴 {data.forks_count}</strong>30</div>31)32}
2. 설치
React Query는 React v18+와 호환되며, ReactDOM 및 React Native와 함께 작동됨.
1$ npm i @tanstack/react-query2# or3$ pnpm add @tanstack/react-query4# or5$ yarn add @tanstack/react-query
또한 ESLint 플러그인 쿼리를 사용하면, 버그와 불일치를 찾기 좋다.
1$ npm i -D @tanstack/eslint-plugin-query2# or3$ pnpm add -D @tanstack/eslint-plugin-query4# or5$ yarn add -D @tanstack/eslint-plugin-query