TanStack Query
: TS/JS, React, Solid… 등을 위한 강력한 비동기 상태 관리 라이브러리
<aside> 💡
TanStack Query의 공식문서에 따르면 종종 웹 애플리케이션의 누락된 데이터를 가져오는 라이브러리로 설명되기도 하지만, 보다 더 기술적인 측면에서 설명하자면, 웹 애플리케이션의 서버 상태 가져오기, caching, 동기화 및 서버 상태 업데이트를 쉽게 도와주는 라이브러리이다.
</aside>
위 설명에서 서버 상태를 가져온다는 내용이 있는데, 서버 상태란 무엇일까요? 흔히 React에서 useState로 관리하는 상태와는 다른걸까?
클라이언트 상태 (Client State)
<aside> 💡
클라이언트 상태는 사용자의 브라우저 내에서 관리되는 상태를 뜻한다. 이는 사용자가 페이지를 탐색하는 동안 유지되며, 페이지를 새로고침하거나 닫으면 사라진다. 클라이언트 상태의 종류에는
이러한 상태들이 클라이언트 상태에 포함된다. 주로 React에서 useState, useReducer 훅으로 관리하며, 전역 상태를 관리하기 위한 Recoil, Jotai, Zustand 라이브러리를 사용하여 관리하기도 한다.
</aside>
서버 상태 (Server State)
<aside> 💡
서버 상태는 서버에서 관리되며 클라이언트의 요청에 의해 전달되는 데이터이다. 이는 서버에 저장된 DB나 외부 API에서 가져온 데이터를 포함한다. 이 데이터들은 클라이언트 상태와는 달리 최신 상태를 항상 유지하기 위해 서버와 클라이언트간의 동기화가 필요하다. 서버 상태의 특징으로는
이러한 특징을 가지고 있다. 서버 상태는 주로 TanStack Query, SWR 등의 라이브러리를 사용하여 관리한다.
</aside>
이러한 서버 상태의 특성에 대해 파악하면, 서버 상태의 문제점에 대해서도 파악할 수 있을 것입니다.
앞선 공식문서에서의 설명과 서버 상태에 대한 정의에 따르면 TanStack Query는 비동기 작업을 처리하는 과정에서 필요한 기능들을 보다 효율적으로 할 수 있도록 도와주는 라이브러리입니다.
TanStack Query이전에는 비동기 작업을 어떻게 처리했을까요?
이를 설명하는것 만으로도 하나의 아티클을 쓸 수 있을 만큼 많은 내용들이 있지만 이를 간단하게 요약하자면 크게 3단계로 나누어 볼 수 있습니다.
콜백 (Callbacks)
<aside> 💡
ES6 이전, 비동기 작업을 처리하기 위해 가장 많이 사용된 방법입니다. 콜백 함수는 비동기 작업이 완료되었을 때 호출되는 함수입니다. 하지만 콜백을 많이 사용하면 코드가 복잡해지고, 콜백에 콜백을 반복하는 콜백 지옥
에 빠져 가독성이 매우 떨어질 수 있다는 단점이 있습니다.
</aside>
function fetchData(callback) {
setTimeout(() => {
callback('Data fetched');
}, 1000);
}
fetchData((data) => {
console.log(data); // Data fetched
});