Practical React Query

React Query (1)

2018년경 GraphQL, 특히 Apollo Client가 인기를 끌면서 리덕스를 완전히 대체하는 것에 대해 많은 소란이 있었고, Redux는 아직 죽지 않았느냐는 질문이 많이 나왔습니다.

저는 이게 무슨 일인지 이해하지 못했던 기억이 생생합니다. 왜 일부 데이터 페칭 라이브러리가 글로벌 상태 매니저를 대체하나요? 둥 중 하나가 서로 무슨 관련이 있을까요?

저는 Apollo와 같은 GraphQL 클라이언트가 REST에 대해 axios가 하는 것과 유사하게 데이터를 가져올 뿐이며, 애플리케이션에서 해당 데이터에 액세스할 수 있도록 하는 어떤 방법이 분명히 필요할 것이라고 생각했습니다.

저는 완전히 틀렸습니다.

클라이언트 상태, 서버 상태

Apollo가 제공하는 것은 데이터를 가져오는 기능뿐만 아니라, 서버 데이터에 대한 캐시도 함께 제공됩니다.

이것은 우리가 주로 Redux를 사용하는 용도와 매우 유사하게 들립니다. 우리가 Redux를 사용하는 용도는 다음과 같습니다.

서버로부터 데이터를 가져와 전역에서 사용가능하게 한다.

우리는 상항 서버 상태를 클라이언트 상태와 마찬가지로 취급해왔습니다. 애플리케이션은 서버 상태를 소유하지 않습니다. 단지, 화면에 최신 버전의 데이터를 표시하기 위해 데이터를 빌린 것 뿐입니다. 데이터를 소유하는 것은 서버입니다.

저에게 위 사실은 데이터에 생각하는 방식의 패러다임을 바꿔 놓았습니다. 캐시를 이용해 소유하지 않은 데이터를 표시할 수 있다면 실제 클라이언트 상태는 별로 남지 않게 됩니다. 그래서 많은 사람들이 Apollo가 Redux를 대체할 수 있다고 생각하는 이유를 이해할 수 있었습니다.

React Query

GraphQL을 사용해 본 적이 없습니다. 기존 REST API가 있고, 오버페칭과 같은 문제가 발생하지 않으며, 그냥 잘 작동하기 때문입니다. 특히 백엔드도 조정해야 한다는 점을 고려 할 때 굳이 전환할 만큼의 문제점은 없었습니다.