graphQL

BackEnd_Ash.log·2020년 7월 31일
3

What is GraphQL

GraphQL 은 페이스북에서 만든
Graph Query Language 로 어플리케이션 레이어 쿼리 언어입니다.

GraphQL 은 sql 과 마찬가지로 쿼리 언어이다

그럼 이둘의 차이는 무엇인가 ??

  • gql 은 웹 클라이언트가 데이터를 서버로 부터 가져오는것이 목적
{
  hero {
    name
    friends {
      name
    }
  }
}
  • sql 은 디비 시스템에 저장된 데이터를 효율적으로 가져오는것이 목적
select name , friends from hero

REST api 의 한계

  • 단순한 서비스에서는 좋지만 복잡한 서비스에서는 over-fetching , under-fetching 이 발생
  • 다양한 Endpoint 가 존재한다.

Over-Fetching

 GET /user/1/
response body
{
	"id"       : 1,
    "name"     : jakdu,
    "age"      : 3,
    "address"  : "korea~~~"
   ....
}

만약에 내가 name 과 address 만상요하고자 한다고 하면 두개만 가져오면 되겠지만 그러한 API 가 없을 시 나머지도 호출을 해야한다.
리소스의 낭비가 된다.

Under-Fetching

사용자에 대한 게시판과 profile , chart 를 들고올려면 어떻게 해야할까

/user/1/profile
/user/1/chart
/user/1/board

각 3개의 데이터를 보여주기 위해 여러 API 를 호출해야한다.

Rest APi 목록

다양한 API 를 생성하게 됩니다.

/user
/user/1
/user/1/profile
/user/1/cart
.....

GraphQL

GraphQL 은 단하나의 Endpoint 가 존재합니다.
또한 , gql API 에서는 불러오는 데이터의 종류를 쿼리 조합을 통해서 결정 합니다.

Endpoint 는 1개만 생성하고 클라이언트에게 필요한 데이터는 클라이언트가 직접 쿼리작성 , 호출하여 반환받습니다.

한번의 네트워크 호출로 처리가 가능

참고자료

https://docs.graphene-python.org/en/latest/quickstart/

https://tech.kakao.com/2019/08/01/graphql-basic/

장점

  • 클라이언트가 필요한 데이터만 반환할수 있음
  • 한번의 호출로 원하는 데이터를 한번에 가져올 수 있음

단점

  • 백엔드 , 클라이언트 개발자 양쪽 다 러닝커브가 있다.
  • 단순한 서비스에서는 사용하기가 오히려 복잡하다.
  • 요청이 text 로 날아가기 때문에 file 전송 등을 구현하기가 어렵다.
profile
꾸준함이란 ... ?

0개의 댓글