1.REST api를 대체하는 새로운 api표준(facebook이 개발/유지)
API
- 클라이언트가 서버로부터 데이터 받아오는 방법을 정의
GraphQL의 핵심은 클라이언트가 필요한 데이터를 정확히 가져올 수 있다는 것,
서버에서는 단 하나의 api만 노출
2.API에 대한 쿼리 언어
따라서 데이터베이스 상관없이 api가 사용되는 맥락이면 사용 가능
즉,graphQL은 더 좋아진 REST
지난 수십 년간, REST는 웹 API를 설계하는 표준
REST API는 무상태 서버, 자원에 대한 구조화된 접근과 같은 훌륭한 발상을 제공하지만 클라이언트의 급변하는 요구 사항들을 만족시키기에는 유연성이 부족
GraphQL은 이러한 유연성과 효율성을 향상시키고자 하는 요구에 부합
GraphQL을 사용하면 개발자들이 REST API와 상호작용할 때 경험했던 단점과 비효율을 해결할 수 있다(overfetching/underfetching)
REST의 단점
graphQL은 내가 작성한 query의 구조대로 데이터를 받아올 수 있기에 유연성을 가짐, 위와 같은 문제 해결이 가능
REST API의 흔한 패턴은 어플리케이션의 화면(View) 관점에서 엔드포인트를 구조화하는 것
클라이언트는 특정 화면에서 필요한 정보를 얻으려면 대응하는 엔드포인트에 접근하기만 하면 되므로 아주 편리하나
단점은 프론트엔드 개발이 빠르게 순환하기 어렵게 만든다는 것입니다. UI를 조금이라도 바꾸면, 필요한 데이터가 변할 수도 있기 때문입니다. 결과적으로, 필요한 데이터가 달라지면 백엔드는 이에 대응하여야 합니다. 이로 인하여 생산성이 떨어지고, 사용자 피드백을 제품에 통합하는 것이 느려집니다.
GraphQL을 사용하면 이러한 문제가 해결됩니다. GraphQL의 유연한 특성 덕분에 서버에서 추가로 작업하지 않더라도 클라이언트를 수정할 수 있습니다. 클라이언트가 데이터 요구 사항을 정확하게 특정할 수 있으므로, 프론트엔드의 디자인 또는 필요 데이터가 변하더라도 백엔드 엔지니어를 편하게 해줄 수 있다.
GraphQL를 사용하면 백엔드에 요청된 데이터에 대하여 세밀하게 분석할 수 있습니다. 각 클라이언트는 관심있는 정보만을 요청하고,사용가능한 데이터들이 어디서 어떻게 사용되는지 심도있게 이해할 수 있으며 이를 통하여 특정 API를 업그레이드시키거나, 클라이언트들이 더 이상 사용하지 않는 필드를 Deprecate하는 식으로 활용가능
GraphQL을 사용하면,서버가 처리하는 요청들에 대하여 저수준의 성능 모니터링이 가능합니다.또한 GraphQL은 resolver 함수로 클라이언트가 요청한 데이터를 수집하고 이를 통해 성능 측정 가능
GraphQL의 API로 노출되는 모든 타입들은 GraphQL 스키마에 정의되는데 이 스키마는 마치 클라이언트와 서버 간의 계약과 같기에 query작성시 이를 참고하여 요청을 하게 된다.
스키마가 정의되면,그것을 따르면 되기 때문에 편리하다.
프론트엔드는 필요한 데이터 구조를 모킹하는 것으로 간단하게 어플리케이션을 테스트할 수 하고,서버가 준비되고나면 실제 API를 사용하여 클라이언트 어플리케이션에 데이터를 제공하면 된다.
참고