GraphQL#1 - Basic

이강원·2020년 2월 26일
0

GraphQL

목록 보기
1/4
post-thumbnail

graphQL 이정도는 알고 시작해보자.

GraphQL이란 Facebook에서 만든 쿼리 언어로써, CRUD방식의 REST API를 대체할 만한 언어로 급 부상 하고있다. 아니 급 부상 한지는 좀 되긴 했지만, 늦게나마 한번 정리를 해보고자 한다.

GraphQL이란?

GraphQL이란 SQL(Structed Query Language)와 마찬가지로 쿼리 언어이다. 하지만 2언어 사이의 언어적 구조 차이도 크고, 실무에서 쓰이는 방식도 크게 다르다. 개인적인 생각으로 정의를 해보자면,

  • SQL: 데이터베이스 시스템에 저장된 데이터를 효율적으로 가져오는 것이 목적 이며, 주로 Backend에서 작성하고 호출한다.
  • GraphQL: 클라이언트에서 데이터를 서버로 부터 효율적으로 가져오는 것이 목적이며, 주로 Client에서 작성하고 호출한다.

GraphQL VS REST API

REST API와 GraphQL의 가장 큰 차이점은 무엇일까?
하단 그림으로 바로 한번에 설명이 가능하다.

[출처]: https://devopedia.org/graphql 위의 이미지에서 보다시피 REST API에서는 필요한 정보에 따라 EndPoint가 나눠져있을때 또는 CRUD방식으로 통신시에 완성된 Data를 얻으려면 **여러번의 호출을 통해야지만 원하는 Data가 완성** 이 된다. 그러나 GrpahQl에서는 **단일 API 한번의 호출로** 원하는 Data를 fetching해 올 수 있다. 또한 GraphQl은 Open Source로써 언어의 제약이 없다. 아직까지도 REST API VS GraphQL 관련해서도 굉장히 많은 찬반 의견들이 핑퐁되고 있는듯하다. 개인적으로는 **GET은 GraphQL**로. 나머지는 기존의 REST API방식이 낫다고 여겨지지만, 이건 개인차가 분명 있을것이다. 하물며 작년 말에 Las Vegas에서 열렸던 AWS re:Invent 컨퍼런스중 GraphQL 관련 섹션 발표자도 GraphQl과 REST API를 상황에 따라 혼용해서 쓰는걸 추천했었다. [REST API VS GraphQL 토론의 장](https://news.ycombinator.com/item?id=17565508)

Query / Mutation

Query와 Mutation을 CRUD랑 비교를 해서 기억하면 조금 더 쉽게 이해가 될 것이다.
Create / Read / Update / Delete 중에 Query는 데이터를 읽는 R을 사용하는것이고 나머지는 CUD 변조를 위해 사용한다 이 2가지만 머리속에 넣어두자.

Schema / Type

Backend 기준으로는 JAVA, C++, C, Frontend 기준으로는 Typescript를 써본사람은 엄청 익숙할 것 이다.

type Members {
  name: String!
  email: String
}

type Query {
  getTeamMember: [Members!]!
}
  • 오브젝트 타입 : Members
  • 필드 : name, email
  • 느낌표(!) : 필수 값을 의미(non-nullable)
  • 대괄호([, ]) : 배열을 의미(array)

Scalar Type

Object field값의 Scalar Type을 정의해줄수 있는 5가지 Type이다.

  • Int : 32비트 정수
  • Float : 실수
  • String : UTF-8 문자열
  • Boolean : true / false
  • ID : id 값임을 명시적으로 표현하기 위해 사용. 내부적으로는 String 형태와 동일

마치며..

GraphQL에 대해 주관적 견해로 이정도는 일단 이해하고 가야 된다 싶은것만 정리를 좀 해봤다. 더 deep한 부분도 있지만 차츰 실전으로 써보면서 조금씩 더 추가해 봐야겠다.
다음 포스트에서는 TypeScriptExpress를 MiddleWare로 사용하여 Apollo Server를 구현 한뒤 실제 GraphQL Query 예제를 써볼까 한다.

profile
양산현 포스트를 쓰고싶진 않다. 공식예제를 그대로 가져다 붙이기도 싫다.그냥 내가 경험했던걸 토대로 기록하고자 한다. 내 글의 헤비 커스토머는 내 자신이다.

0개의 댓글