GraphQL 은 Graph Query Language 의 줄임말이다. Query Language 는 정보를 얻기 위해 보내는 질의문(Query)을 만들기 위해 사용되는 Computer 언어의 일종이다.GraphQL 은 이런 Query Language 중에서도 Server API 를 통해 정보를 주고받기 위해 사용하는 Query Language 이다.
GraphQL 은 왜 탄생해야했는가? 다시말해, REST 방법론이 있는데도 새로운 언어인 GraphQL 이 탄생해야했던 배경은 무엇인가? Facebook 의 GraphQL blog 에서는 다음과 같이 이유를 밝히고 있다.
이 때문에 정보를 사용하는 측에서 원하는 대로 정보를 가져올 수 있고, 보다 편하게 정보를 수정할 수 있도록 하는 표준화된 Query language 를 만들게 되었다.이것이 GraphQL 이다.
프로젝트에서 RESTful API 말고 GraphQL를 썼는데, 그 이유는?
프론트엔드의 상태 관리 작업을 줄여주기 때문에. REST API의 문제점으로 여러 개의 엔드포인트로 인한 복잡도 증가는 물론이고, 불필요한 정보까지 클라이언트로 전달되는 overfetching과 특정 엔드포인트가 필요한 정보를 충분히 전달하지 못하는 underfetching 등이 있다. GraphQL API는 보통 하나의 엔드포인트를 사용하며, 서버에서는 어떠한 자원을 사용할 수 있는지 정의하고, 클라이언트에서 렌더링에 필요한 데이터만 요청하는 방식이다. 또한 Apollo 클라이언트에서 자동으로 캐시를 관리해주기 때문에 Redux를 통해 상태관리를 하는 수고를 덜어준다.
⇒ 한 번의 GraphQL 쿼리문을 통해 UI 렌더링에 필요한 모든 데이터를 받아올 수 있음 → 분산된 REST 리소스들을 받아와 데이터를 결합하고(merging) 변조하는(mutating) 과정이 생략됨.
⇒ HTTP 요청 횟수와 응답의 size를 줄일 수 있다.