예제 코드
https://github.com/jscomplete/graphql-in-action
대상 독자
좋은 API를 만들고 싶은 프론트엔드, 백엔드 개발자
선수지식으로 javascript, node.js, RDBMS, 몽고 DB, REST API에 대한 지식이 있으면 예제를 이해하는데 좋을 것 같습니다.
구성
1장 : GraphQL에 대한 소개, 왜 GraphQL인지, REST API와의 차이점 및 비교, GraphQL의 문제점은 무엇인지
2장 : GraphQL API에 대해, 그래피컬 편집기, 기초 GraphQL 언어, 깃헙 GraphQL예제
3장 : GraphQL에 대한 작업 수정 및 구성, 필드 변경, GraphQL 조각
4장 : GraphQL 스키마 설계, 쿼리, 모델링
5장 : GraphQL 개발환경 실행, 런타임 설정, 스키마 생성
6장 : GraphQL DB설정
7장 : GraphQL 캐싱, 작업 최적화
8장 : GraphQL 변경 작업
9장 : 라이브러리 쓰지 않는 GraphQL 사용방법
10장 : Apollo를 통한 GraphQL API 사용방법
주요 내용 요약
페이스북이 GraphQL을 만들기로 한 이유는 모바일 애플리케이션 개발 시 발생하는 여러 기술적 문제를 해결하기 위해서였다. 하지만 현재 GraphQL이 인기를 얻고 있는 이유는 기술적 문제보다는 커뮤니케이션 문제를 해결하기 때문이다.
GraphQL은 현실 세계의 데이터를 표현하는 가장 적합한 방법이 그래프라는 사실에서 착안했다. GraphQL에서 QL은 Query Language를 의미해 오해를 불러일으킬 수 있다. API를 사용하는 프런트엔드 입장에서만 보면 GraphQL은 데이터 API용 쿼리 언어가 맞지만 한편으로는 백단에서 구현해야 하는 런타임 계층의 역할도 하기 때문이다.
필자에게 "왜 GraphQL인가?"라고 묻는다면, 한 단어를 답할 것이다. 바로 표준(Standard)이다. 클라이언트-서버 구조에서 서 GraphQL을 선택하는 가장 중요한 기술적 이유는 효율성이다. API 클라이언트는 종종 서버에게 여러 리소스를 요청해야 하지만 API 서버는 보통 하나의 리소스만 응답하는 방법을 안다. 결과적으로 필요한 모든 데이터를 얻기 위해선 클라이언트가 서버에게 여러 번 요청하게 된다. GraphQL은 이런 다중 요청의 복잡성을 백엔드에 부담시켜?(묶어서? 책에는 부담시킨다고 표현하였으나 문맥상 다중 요청을 하나로 묶는다의 의미로 추정됨) GraphQL 런타임이 처리하도록 만든다.
GraphQL과 REST API의 차이점
REST API의 단점
1. REST API가 가진 가장 큰 문제점은 여러 개의 데이터 API 엔드포인트와 커뮤니케이션을 한다는 것이다.
2. REST API에는 클라이언트 용 요청 언어가 없다. 클라이언트가 서버에 무엇을 원하는지 정확하게 알 수 있는 언어가 없으므로 서버가 변환하는 데이터를 제어할 수 없다.
3. REST API의 또 다른 큰 문제는 버전 관리이다. 여러 버전을 제공해야 한다면, 엔드포인트도 여러 개 준비해야 한다.
REST API의 장점
1. GraphQL의 응답보다 캐싱하기 쉽다.
2. 여러 REST 엔드포인트의 코드를 최적화하는 것이 GraphQL의 단일 엔드포인트를 최적화하는 것보다 쉽다.
GraphQL의 방식
1. 타입이 정해진 스키마
2. 선언적 언어 : 선언적 언어를 통해 GraphQL을 보다 사용하기 쉽게 만든다.
3. 단일 엔드포인트와 클라이언트 언어 : 클라이언트 요청 언어는 클라이언트가 제어권을 갖도록 해준다. 클라이언트는 필요한 것을 정확하게 요청할 수 있으며, 서버 또한 요청받은 데이터를 정확하게 응답할 수 있다. 이것은 불필요한 데이터의 과다 추출 문제도 해결해 준다.
4. 간단한 버전 관리
서평
서버 개발자로서 여태까지 REST API로 개발만 하다가 GraphQL이라는 것을 이 책을 통해 처음 접해보았습니다. REST하진 않지만 REST라고 자체적으로 부르는 API를 사용해 왔고 머릿속도 REST API구조만 박혀 있다가, 요즘 핫한 최신 기술 스택인 GraphQL을 배울 수 있어서 좋았습니다. 옮긴이의 말처럼 REST API에 익숙한 개발자라면 GraphQL에 익숙해지는데 시간이 걸리겠지만, 이 책을 통해 실제 업무에 적용해 볼 수 있는 계기가 되지 않을까 생각합니다. 이 책의 장점은 javascript와 node의 간단하고 쉬운 예제들로 구성되어 이해하기 쉬고 따라 하기 쉽다입니다. 뒷부분으로 갈수록 백 단에 관심이 있는 사람으로서(저를 포함) 리액트라던지, 웹 UI 라이브러리라던지, 아폴로 라이브러리가 나오면서 다시 지루해질 수 있으므로, 그런 분들은 앞부분을 중점적으로 보는 것을 추천드립니다.
아쉬웠던 부분으로는 이해를 돕기 위해 특징 및 구조를 서술하는 부분이 굉장히 많은데 오히려 이러한 부분이 지루함을 유발할 수 있을 것 같습니다. 또한 책을 번역하는 과정에서 의미가 조금 모호한 표현과 오탈자가 조금 있던 부분은 아쉬웠습니다.
https://www.aladin.co.kr/shop/wproduct.aspx?ItemId=284873914
※ "한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다."
'서평 > 한빛미디어, 나는리뷰어다 2022' 카테고리의 다른 글
[서평] 소플의 처음 만난 리액트 (0) | 2022.06.27 |
---|---|
[서평] 김상형의 SQL 정복 (0) | 2022.05.29 |
[서평] 도메인 주도 개발 시작하기 (0) | 2022.04.24 |