강력한 스키마 타입
서버에 스키마가 존재해야 클라이언트에서 해당 스키마를 사용할 수 있게 설계되어 있다. 일치하는 스키마가 없을 경우 에러가 뜨기 때문에 잘못된 스키마 정의 때문에 개발자가 고생할 필요가 없다. 또한 API 명세가 자동으로 생성되기 때문에 따로 작성할 필요가 없는 것 역시 장점이다.
Overfetching과 Underfetching 방지
RESTful API에서 자주 발생하는 문제를 꼽으라면 단연 Overfetching과 Underfetching이 뽑힌다. 고정된 endpoint로 요청을 보내기 때문에 정해진 데이터를 받아와야 하고 그 과정에서 문제가 발생한다. GraphQL에서는 원하는 데이터를 지정할 수 있기 때문에 위의 문제를 해결할 수 있다.
생산적이다
GraphQL의 라이브러리인 Apollo에서는 chaching , realtime 또는 optimistic UI updates 를 자유롭게 활용할 수 있다. 이를 통해 다른 추가 작업 없이 보다 효율적이고 생산적으로 개발을 진행할 수 있다.
API 방식
GraphQL은 Schema Stitching이라는 기법을 통해 여러 API를 하나의 API로 만들 수 있다. 따라서 기존의 API가 여러 번 요청을 보내야 했던 일에 대해 하나의 요청으로 해결할 수 있게 만들어준다.
넓은 생태계
많은 사람이 GraphQL을 사용, 사랑하는 만큼 충분히 넓은 개발 생태계가 있다. 즉 정보를 얻을 수 있는 방법이 많으며 좋은 라이브러리가 많이 존재한다!
GraphQL은 하나의 형식, 즉 명세일 뿐이기 때문에 이를 구현할 방법이 필요한데 그 중 하나가 Apollo이다.
Apollo는 Backend와 Frontend 모두를 지원하며 사용하기 쉽고 많은 기능들을 제공하기 때문에 널리 쓰인다.
GraphQL은 객체에 대한 특정 필드를 요청하는 것이 매우 간단하다. 다음의 예제를 보자.
{
hero {
name
}
}
{
"data": {
"hero": {
"name": "R2-D2"
}
}
}
쿼리와 결과가 정확히 동일한 형태인 것을 알 수 있는데 이는 서버에서 클라이언트가 요청하는 필드를 정확히 알고 있기 때문이다.