Apollo
는 대표적인 GraphQL
의 라이브러리 중 하나로 GraphQL
을 사용한다면 거의 필수적으로 사용하게 된다. 공식 문서에서는 슈퍼그래프라고 소개되는데, 여기서 슈퍼그래프란 조직의 데이터와 서비스의 통합 네트워크를 구축하기 위한 개발자 플랫폼으로, 모두 단일 분산 GraphQL API 로 구성할 수 있는 라이브러리라는 뜻이다. 즉 새로운 API 서버를 구축 하든, 기존 API를 쿼리하든, 전체 조직을 슈퍼 그래프로 이동하든 상관없이 Apollo
가 제공하는 도구를 이용해 GraphQL
과 상호 작용할 수 있다.
다른 선택지로 GraphQL
을 개발한 Facebook에서 직접 만든 Relay
가 있지만, 학습 비용이 높고 React
계열만 지원한다는 단점이 있는 반면, 그에 반해 Apollo
는 유연하고 러닝 커브가 높지 않을뿐더러 훨씬 폭넓은 Front-End 프레임워크들을 지원한다.
Apollo
의 가장 큰 장점으로 거론되는 것중 하나가 전역 상태관리를 지원함으로써 무려 Redux
를 대체할 수 있다는 것이다. 특히 Apollo
는 server-side 라이브러리인 apollo-server
와 client-side 라이브러리인 apollo-client
를 연동하여 사용하기 때문에 양 단의 데이터를 병합할 수 있다는 뜻이다.
공식문서의 설명에 따르면 apollo-client
의 InMemoryCache 기능을 사용해 각기 다른 컴포넌트들이 caching 된 쿼리 결과를 함께 참조함으로써 전역상태관리가 가능해진다.
이 방법외에 다른 방법도 소개되는데 apollo-server
와 유사한 방식으로 local resolver를 정의하는 방식이 있는데 이는 곧 core module에서 제외될 예정이라고 한다. 그 외에도 Reactive variables를 사용하는 방식도 있다. useReactiveVar
hook을 사용하는 방식인데, apollo-client
에서 자동으로 변화를 탐지하여 전역에 변경된 value를 뿌려주는 방식이다. 당연히 Apollo Client
cache에는 저장은 안된다. 물론 Redux를 사용하는 등 Apollo
의 캐싱을 통한 상태 관리 외에 다른 방법을 사용하는 것도 더 효율적일 수 있고 GraphQL
에 익숙하지 않다면 러닝커브도 줄일 수 있겠지만, 특별한 이유가 있는게 아닌 이상 Apollo
를 쓰려면 Apollo
가 의도한 방식으로 쓰는게 좋다고 생각한다.