graphQL 이정도는 알고 시작해보자.
GraphQL
이란 Facebook에서 만든 쿼리 언어로써, CRUD방식의 REST API를 대체할 만한 언어로 급 부상 하고있다. 아니 급 부상 한지는 좀 되긴 했지만, 늦게나마 한번 정리를 해보고자 한다.
GraphQL이란 SQL(Structed Query Language)와 마찬가지로 쿼리 언어이다. 하지만 2언어 사이의 언어적 구조 차이도 크고, 실무에서 쓰이는 방식도 크게 다르다. 개인적인 생각으로 정의를 해보자면,
REST API와 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을 CRUD랑 비교를 해서 기억하면 조금 더 쉽게 이해가 될 것이다.
Create / Read / Update / Delete 중에 Query는 데이터를 읽는 R
을 사용하는것이고 나머지는 CUD
변조를 위해 사용한다 이 2가지만 머리속에 넣어두자.
Backend 기준으로는 JAVA, C++, C
, Frontend 기준으로는 Typescript
를 써본사람은 엄청 익숙할 것 이다.
type Members {
name: String!
email: String
}
type Query {
getTeamMember: [Members!]!
}
Object field값의 Scalar Type을 정의해줄수 있는 5가지 Type이다.
GraphQL에 대해 주관적 견해로 이정도는 일단 이해하고 가야 된다 싶은것만 정리를 좀 해봤다. 더 deep한 부분도 있지만 차츰 실전으로 써보면서 조금씩 더 추가해 봐야겠다.
다음 포스트에서는 TypeScript
와 Express
를 MiddleWare로 사용하여 Apollo Server
를 구현 한뒤 실제 GraphQL Query 예제를 써볼까 한다.