GraphQL

Seunghwa's Devlog·2021년 2월 26일
0

GraphQL이란?

페이스북에서 개발한 API질의어로써, REST API를 대체 가능한 쿼리언어이다.

GraphQL은 기존의 REST API와는 다르게 클라이언트에서 서버로 원하는 데이터를 쿼리로 작성해 원하는 데이터만 가져올 수 있다. 쿼리의 구조도 아주 직관적이기 때문에 GraphQL을 처음 접하는 사람들도 쉽게 익힐 수 있다.

SQL과의 차이

SQL은 DB에 저장된 데이터를 효율적으로 가져오는 것이 목표이며, 주로 백엔드에서 호출하고 작성한다.
GrpahQL은 웹 클라이언트가 데이터를 서버로부터 효율적으로 가져오는 것이 목표이며, 주로 클라이언트 시스템에서 호출하고 작성한다.

SQL ex)

SELECT plot_id, species_id, sex, weight, ROUND(weight / 1000.0, 2) FROM surveys;

GraphQL ex)

{
  hero {
    name
    friends {
      name
    }
  }
}

server-side GQL 어플리케이션은 GQL로 작성된 쿼리를 입력으로 받아 쿼리를 처리한 결과를 다시 클라이언트로 돌려준다. HTTP API 자체가 특정 데이터베이스나 플렛폼에 종속적이지 않은것 처럼 마찬가지로 GQL 역시 어떠한 특정 데이터베이스나 플렛폼에 종속적이지 않다.

REST API와 비교

REST API는 URL, METHOD등을 조합하기 때문에 다양한 Endpoint가 존재 한다. 반면, gql은 단 하나의 Endpoint가 존재 한다. 또한, gql API에서는 불러오는 데이터의 종류를 쿼리 조합을 통해서 결정한다. 예를 들면, REST API에서는 각 Endpoint마다 데이터베이스 SQL 쿼리가 달라지는 반면, gql API는 gql 스키마의 타입마다 데이터베이스 SQL 쿼리가 달라진다.

gql API를 사용하면 여러번 네트워크 호출을 할 필요 없이, 한번의 네트워크 호출로 처리 할 수 있다.

GraphQL 구조

  1. 쿼리
    REST API의 GET메서드처럼 보통 데이터를 조회할 때 많이 사용한다.

  2. 뮤테이션
    REST API의 POST, PUT, DELETE 등의 메서드처럼 보통 데이터를 조작할 때 많이 사용한다.

  3. 스키마 / 타입
    오브젝트 타입 : Character
    필드 : name, appearsIn
    스칼라 타입 : String, ID, Int 등
    느낌표(!) : 필수 값을 의미(non-nullable)
    대괄호([, ]) : 배열을 의미(array)

GQL 장점

  1. 오버패칭(OverFetching) 최소화
    오버패칭은 당장 필요한 데이터 외에 필요 없는 데이터들 까지 서버에서 받아오는 것을 뜻하는데 GraphQL은 클라이언트에서 원하는 데이터만 쿼리로 작성해 서버에서 가져올 수 있기 때문에 오버패칭 문제를 최소화 할 수 있다.

  2. 언더패칭(UnderFetching) 최소화
    언더패칭은 필요한 데이터를 요청하기 위해 서브데이터를 추가적으로 요청하는 경우, 즉 서버에 여러번 요청을 해야하는 경우를 말한다. GraphQL은 한번에 여러 쿼리를 요청할 수 있기 때문에 언더패칭 문제를 최소화 할 수 있다.

GQL 단점

  1. File 전송 등 Text만으로 하기 힘든 내용들을 처리하기가 복잡하다.
    GraphQL에서 File 전송을 할 수 없는 것은 아니지만 일반적인 GraphQL 서버에 비해 구조가 복잡해지거나 외부 서비스에 의존해야하는 문제가 발생할 수 있다.

  2. 고정된 요청과 응답만 필요한 경우 쿼리로 인해 REST API보다 요청의 크기가 커질 수 있다.

무조건 GraphQL이 좋다가 아니라 REST API나 GraphQL을 상황에 맞게 사용하는 것이 중요하다.

출처: https://tech.kakao.com/2019/08/01/graphql-basic/
https://chanyeong.com/blog/post/36

profile
에러와 부딪히고 새로운 것을 배우며 성장해가는 과정을 기록합니다!

0개의 댓글