상태관리를 apollo client cache를 사용해보자!!

In memory Cache 란?

apollo 공식 문서를 보면 아래와 같이 쓰여져 있다.

apollo client 는 gql 의 결과를 InMemoryCache 에 저장하며, 이를 통해 클라이언트는 불필요한 네트워크 요청 없이 동일한 데이터에 대해 요청할 수 있다.

공식 문서를 좀 더 들여다 보면 InMemoryCache 는 쿼리 응답 개체를 내부 데이터 저장소에 저장하기 전에 이를 정규화(?) 하며 아래와 같은 단계를 가진다

캐시는 응답 받은 데이터에 포함된 모든 식별 가능한 객체에 대해 고유한 ID를 생성캐시는 개체를 ID별로 플랫 룩업 테이블(DB 테이블 같이..?)에 저장한다.들어오는 객체가 기존 객체와 동일한 ID로 저장될 때마다 해당 객체의 필드가 병합된다.

그리고 InMemoryCache 는 기본적으로 __typename 과 id 또는 _id 를 결합시켜서 고유한 식별자를 만든다.(이 기본 식별자를 id 또는 _id 이외의 다른 필드로 정의하고 싶을 경우 설정해 줄 수 있다.)

예시로 __typename이 task 이며 id 가 14 일 경우에는 task:14 의 식별자가 생성되는 것이다.