민프
[React][TypeScript] React Query-1 React Query란? 본문
리액트 개발자라면 상태 관리를 어떻게 해야 좋을지 생각해보게 된다.
상태관리 라이브러리로는 Redux, MobX, Recoil 등등.. 이 있는데 이 라이브러리들은 클라이언트 상태 관리에는 유용하지만, 서버 상태와 동기화되지 않기 때문에 프론트엔드 개발자들은 직접 상태를 업데이트해 줘야 하는 불편함이 있다.
즉 서버 상태에 따른 클라이언트 상태 관리가 잘 되지 않았다는 것 인데 이러한 불편함을 해소해주기 위해 React-Query, SWR, Redux-saga, Redux-Thunk 가 있는데 Redux를 알아보던 중 이러한 글을 보았다.
https://fe-developers.kakaoent.com/2022/220224-data-fetching-libs/
https://techblog.woowahan.com/6339/
https://tech.kakaopay.com/post/react-query-1/
https://tech.kakao.com/2022/06/13/react-query/
위 글에서 Redux를 사용하였을때에는 서버 데이터를 위한 로직이 과도하게 커지고, 그로 인해서 Redux를 활용하기 위한 보일러 플레이트가 비대해진다는 단점이 있었는데 React-Query를 사용함으로써 프로젝트 구조가 단순해졌고, 캐싱 처리가 더 간단해졌으며, Redux와 Redux-Saga를 사용할 때는 Success, Failure 값을 useEffect의 deps로 전달해서 처리해야 하는 과정이 필요했었는데, 이 과정을 onSuccess와 onError로 간단하게 처리할 수 있었다고 하였다.
그렇다면 React-Query란 무엇일까
공식문서는 아래와 같다.
https://react-query-v3.tanstack.com/
공식문서에서는 React-Query는 데이터 Fetching, 캐싱, 동기화, 서버 쪽 데이터 업데이트 등을 쉽게 만들어주는 React 라이브러리 라고 설명하고있다. 기존에 Redux, Mobx, Recoil과 같은 다양한 상태 관리 라이브러리들이 있긴 하지만, 클라이언트 쪽의 데이터들을 관리하기에 적합할 순 있어도 서버 쪽의 데이터들을 관리하기에는 적합하지 않는 점들이 있어서 등장하게 되었다.
kakao TECH FE 기술블로그(SWR에서 React로 변경)에서 웹을 개발할 때 데이터는
- Local State : 리액트 컴포넌트 안에서만 사용되는 State
- Global State: Global Store에 정의되어 프로젝트 어디에서나 접근할 수 있는 state
- Server State: 서버로부터 받아오는 state
로 크게 나눌 수 있는데 기존에는 Redux와 같은 상태 관리 라이브러리에 Glovbal State와 Server State를 전부 포함하는 방법으로 프로그래밍을 했었는데, React-query와 같은 data fetching 라이브러리를 사용함으로써 상태 관리 라이브러리에서 비동기 로직을 제거하여 관심사가 분리되고 선언적으로 프로그래밍을 할 수 있게 되었다고 한다.
이와 같이 React-query는 서버 데이터 상태관리를 지원한다. 따라서 이 점을 이용하여 클라이언트 데이터와 서버 데이터의 강한 의존도를 낮출 수 있는 장점을 가지고 있다.
데이터 캐시 처리는 직접 구현하려면 고려해야 할 게 많고, 데이터를 언제 갱신해야 하는지 여부를 파악하기가 어려워 매번 다시 요청을 보낼때가 있는데 이렇게 되면 성능 최적화가 되지 않아 클라이언트쪽과 서버 쪽 모두 부담이 되게 되는이 React-query는 이러한 부분을 해결해준다.
이번 데이터 갱신 여부가 중요한 프로젝트를 하게 되는데 React-query를 사용하면 핸들링하기에도 좋을 것 같다.
다음포스팅에서는 React-query 개발 문서를 보면서 직접 구현해봐야겠다.