GraphQL이란?

Graph QL이란?

GraphQL 공식 문서에 적혀있는 GraphQL의 설명은 아래와 같다.

GraphQL API를 위한 쿼리 언어이며 이미 존재하는 데이터로 쿼리를 수행하기 위한 런타임이다. GraphQL은 API의 데이터에서 완전하고 이해 가능한 설명을 제공하고, 클라이언트에게 뭘 필요로 하는지를 정확하게 요청할 수 있도록 하고, 시간이 지남에 따라 API가 진화하는 걸 더 쉽게 하고, 더 강력한 개발자 도구를 가능하게 한다.

GraphQL을 사용하는 이유

보통 RESTful API를 사용하기 때문에, 기존에는 새로운 기능을 만들 때마다 새로운 API를 만들어줘야 했다.

API에 GraphQL 쿼리를 날리면 정확하게 원하는 것을 얻게 되는데, GraphQL 쿼리는 항상 예측 가능한 결과를 반환한다. GraphQL을 사용하는 앱은 서버가 아니라 앱에서 데이터를 제어하기 때문에 빠르고 안정적이다.

GraphQL 쿼리는 하나의 리소스의 자원에 접근하는 것이 아니라 자원의 참조까지 고려한다. 전형적인 REST API가 여러개의 URL의 로딩을 요구하는 동안, GraphQL API는 한번의 요청에 앱이 필요로 하는 모든 데이터를 얻게 된다. GraphQL을 사용하는 앱은 느린 모바일 네트워크 연결에서도 빠르게 동작한다.

RESTful API와의 비교

RESTful API

  • server-driven 아키텍처를 사용
  • 여러 개의 URL로 배포되고 각 URL이 하나의 리소스를 보여줌
  • 캐싱을 자동으로 사용하게 됨
  • 여러 API 버전을 지원함
  • 타입 안정성과 자동 생성 문서를 제공하지 않음
  • 응답이 XML, JSON, YAML로 출력됨

GraphQL

  • client-driven 아키텍처를 사용
  • HTTP에 하나의 엔드포인트로 배포됨
  • 내장 캐싱 메커니즘의 부재
  • API 버저닝이 필요 없음
  • 타입 안정성과 자동 생성 문서를 제공함
  • 응답이 JSON으로 출력됨

쿼리

RESTful API와 다르게 다음과 같이 필요한 타입만 쿼리해서 원하는 결과를 얻을 수 있다.

GraphQL 쿼리를 아래와 같이 사용하면

{
  me {
    name
  }
}

다음과 같은 JSON 결과를 얻을 수 있다.

{
  "me": {
    "name": "Jaeeun Jang"
  }
}

GraphQL에서는 하나의 항목과 항목의 리스트를 동일하게 보기 때문에 다음과 같이 호출할 경우

{
  hero {
    name
    friends {
      name
    }
  }
}

다음과 같이 friends를 리스트로 가져올 수도 있다.

{
  "data": {
    "hero": {
      "name": "Iron man",
      "friends": [
        {
          "name": "Thor"
        },
        {
          "name": "Spiderman"
        }
      ]
    }
  }
}

마치며

GraphQL의 개념과 간단한 사용법에 대해 알아보았는데 다음에는 좀 더 많은 내용을 알아보고 실제로 사용해보고 싶다.


Written by@jaeeun
I explain with words and code. I explain with words and code. I explain with words and code.