Client 에서의 graphql

그래프 큐엘을 보면 클라이언트에서 백엔드로 그래프 큐엘 쿼리 요처을 보내고 백엔드 내부의 GraphQL Server에 의해 Datastore와 통신을 주고 받으며 받은 데이터를 클라이언트로 보낸다고 하였습니다.

이때 클라이언트 쪽에서 쿼리를 생성해서 보내고 다시 받은 데이터를 클라이언트앱에 전해주는 역할을 GraphQL Client 라고 합니다.

GraphQL client


이러한 GraphQL client의 종류는 자바스크립트에서 3가지가 있습니다.

Lokka

매우 간단한 기능들을 가지고 있습니다. 기본적으로 쿼리들과 뮤테이션들을 보내고 데이터를 받는 기능을서 기본적인 기능을 갖추고 있으며, 추가적으로 간단한 캐싱기능을 갖고 있습니다. 이러한 캐싱기능은 같은 쿼리를 보내고 데이터를 받을때 강력한 성능향상의 요인이 됩니다.

Apollo Client

현재 그래프 큐엘에서 가장 사랑받는 스텍입니다. 전체적으로 Apollo Stack 이라고 이름 지어진 프로젝트 중에 하나 입니다.
Meteor JS 프레임워크 (JS로 클라이언트 부터 백엔드까지 모두 구성하는 프레임워크) 를 만든 사람들이 만들었으며 목적상 Apollo Client도 목표를 같이 하고 있습니다. 균형잡힌 기능들과 너무 어렵지 않은 러닝커브를 갖고 있습니다. 따라서 다른 스텍들에 비해서 러닝커브가 낮으며 사용하는 사람들이 많아 쉬운 접근성을 갖고 있습니다.

Relay

릴레이는 페이스북에서 공식적으로 사용하는 스텍입니다만, 뮤테이션이 시작될 때 매우 복잡한 난이도를 갖고 있습니다. [ 현재 relay는 버전 13까지 나와서 뮤테이션 당시의 복잡성이 ]

하지만 릴레이의 성능은 모바일에서 발휘됩니다. 인터넷이 잘되지 않는 제 3 세계 국가들을 위한 나라들을 위해 훌륭한 성능을 보여줍니다. 인터넷 성능이 끔찍한 곳에서는 모바일 릴레이가 훌륭한 대안이 될수 있습니다. 그것을 위해서 릴레이는 만들어졌으나 대신에 복잡한 프로세스를 지니고 있습니다. 이 복잡한 프로세스를 위한 자본금을 페이스북은 갖고 있습니다.

하지만 우리가 만들 웹어플리케이션이 스타트업에서 만들어지거나 끔찍한 인터넷연결을 상정하지 않아도 된다면 굳이 사용할 필요는 없습니다. → 러닝 커브가 비교적 높습니다.

Relay vs Apollo
우리가 만들 컴포넌트의 깊이가 4단계 이상으로 깊다면 Relay, 아니라면 Apollo 라는 의견도 있고 처음 배우는 러닝커브 자체가 Relay가 더 높다 라는 의견이 있습니다. React 자체가 페이스북에서 만든 것이기 때문에 문서만 확실하게 잘 읽어 놓으면 더 리액트 친화적이다 라는 분위기 입니다.

제3세계는 1960년대 미국과 소련의 냉전에 가담하지 않고 중립을 표명한 개발도상국을 통틀어서 부르는 세력으로, 이들이 비동맹주의를 채택했다. ... 제 3세계의 국가들은 민족주의와 이상주의를 특징으로 하며 경제적, 사회적 발전을 위해 노력한다.

제가 다니고 있는 회사에서는 apollo-client를 사용하고 있으므로 apollo-client를 스텍으로 삼아 알아보겠습니다.

Backend 에서의 graphQL

graphQL-client와 같이 graphQL-server에 대한 스텍들도 있습니다.

express-graphql vs apollo-server

두 코드는 본질적으로 아무 차이도 없습니다. 어떤방식이 더 나은지 의미가 없을 정도로 말입니다. 하지만 결정적으로 apollo-server는 매우 역동적으로 개발되고 있습니다. 사용법이 지속으로 바뀌고 있는 만큼 현재로서 안정적인 언어는 express-grahqQL입니다. 즉, 유지보수 비용이 훨씬 준다는 것입니다.

이후 apollo-server의 안정성이 높아진다면 새로운 프로젝트는 apollo-server로 시작하는 것도 좋은 선택입니다.

두 스텍의 큰 차이점은 두가지 입니다.

1. 타입 코드의 압축성 : express-graphql < apollo-server
2. resolver 코드의 시인성 : express-graphql > apollo-server
resolver가 실제 해당 함수를 사용하는 데이터 타입과 함께 붙어있다는 것은 아주 큰 장점이라고 생각합니다. 따로 떨어진 함수는 resolver를 찾아 읽기위한 시간이 반드시 필요합니다.

profile
일상을 기록하는 삶을 사는 개발자 ✒️ #front_end 💻

0개의 댓글