티스토리 뷰
GraphQL ?
여기저기서 GraphQL에 대한 내용이 많이 나온다. 무슨 개념인지 정리해 보고자 했다.
GraphQL 은 API를 위한 쿼리 언어이며 타입 시스템을 사용하여 쿼리를 실행하는 서버사이드 런타임입니다. GraphQL은 특정한 데이터베이스나 특정한 스토리지 엔진과 관계되어 있지 않으며 기존 코드와 데이터에 의해 대체됩니다.
GraphQL 은 Graph Query Language 의 줄임말이다.
탄생배경?
Facebook 의 GraphQL blog 에서는 다음과 같이 이유를 밝히고 있다. RESTful API 로는 다양한 기종에서 필요한 정보들을 일일히 구현하는 것이 힘들었다. 예로, iOS 와 Android 에서 필요한 정보들이 조금씩 달랐고, 그 다른 부분마다 API 를 구현하는 것이 힘들었다. 이 때문에 정보를 사용하는 측에서 원하는 대로 정보를 가져올 수 있고, 보다 편하게 정보를 수정할 수 있도록 하는 표준화된 Query language 를 만들게 되었다. 이것이 GraphQL 이다.
- GraphQL API 는 주로 하나의 Endpoint 를 사용한다.
- GraphQL API 는 요청할 때 사용한 Query 문에 따라 응답의 구조가 달라진다
API 응답의 구조
RESTful API 는 하나의 Endpoint 에서 돌려줄 수 있는 응답의 구조가 정해져 있는 경우가 많다.
API 를 작성할 때 이미 정해놓은 구조로만 응답이 오게 되는 것이다.
반면, GraphQL 은 사용자가 응답의 구조를 자신이 원하는 방식으로 바꿀 수 있다.
Example
- 데이터를 표현하세요
type Project { name: String tagline: String contributors: [User] }
- 원하는 것을 요청하세요
{ project(name: "GraphQL") { tagline } }
- 예측가능한 결과를 얻으세요
{ "project": { "tagline": "A query language for APIs" } }
GraphQL 의 장점 ?
- Clean API between backends and frontends
- Less communication overhead and fewer meetings
- No more time spent writing API documentation
- No more time spent trying to figure out an API
- Great tooling for your API
GraphQL or RESTful?
그렇다면 GraphQL 과 RESTful 중 어떤 것을 선택해서 사용해야하는가?
다음과 같은 기준으로 선택하면 될 것이다.
- GraphQL
- 서로 다른 모양의 다양한 요청들에 대해 응답할 수 있어야 할 때
- 대부분의 요청이 CRUD(Create-Read-Update-Delete) 에 해당할 때
- RESTful
- HTTP 와 HTTPs 에 의한 Caching 을 잘 사용하고 싶을 때
- File 전송 등 단순한 Text 로 처리되지 않는 요청들이 있을 때
- 요청의 구조가 정해져 있을 때
그러나 더 중요한 것은, 둘 중 하나를 선택할 필요는 없다는 것이다.
내생각에... GraphQL 의 특징 ?
자료를 찾아보면서 느낀점은, GraphQL 은 정말 다양한 EndPoint가 필요하고, 그때마다의 데이터 량이 어마어마한데다가, 받아오는 데이터의 종류가 다를때 유용한 것 같다. 만약, 사용자 이름 10만명을 가져오는 데이터가 필요할때, 기존의 정의된 사용자 LIST 를 가져오는 API 를 썼다고 가정하면, 기존의 API 는 아마 사용자의 모든 정보를 가져오고 있을거다. 이름뿐만 아니라, 나이, 성별, 혈액형 같은 정보들... 하지만 지금 필요한 정보는 오직 사용자의 이름 뿐인데, 이렇게 많이 가져오는것은 낭비다. 이럴때 GraphQL은 같은 Endpoint 로 내가 가져오고 싶은 정보만 쏙 뽑아서 통신할 수 있다는 점 ? 응답의 형식이 다른데 Endpoint 는 단 하나라는점이 가장 큰 장점으로 보인다.
GraphQL ... 필요한가 ?
처음에 관심을 가졌던 계기도, DB 를 대체하는 느낌인줄 알았다. 개인 프로젝트에 mongoDB 를 대체할 만한 무언가를 생각해보다가 들여다본게 전부다. 의문이든다. 사실 회사 일을하며 방대한 정보의 Request 를 고려해볼 기회는 없다. 내가 하는 업무는 외부에 노출된 시스템도 아니며, 사내의 사용자가 엄청나게 많은 그런시스템도 다뤄본적이 없다. 사실 API 가 그렇게 많이 필요하지도 않다. 그냥 이런게 있다라는 정도만 짚고가도 되지 않을까 싶다.
참고
'Programming > Etc..' 카테고리의 다른 글
AWS 프리티어 가이드 (linux / npm) (599) | 2019.07.20 |
---|---|
Ionic2 강좌 (593) | 2017.03.26 |
[GIT] ignore설정법 (588) | 2017.03.04 |
[생활코딩] 정규표현식 (1311) | 2017.02.22 |
[Axis2] Eclipse 에서 WebService 만들기 (958) | 2017.02.21 |
- Total
- Today
- Yesterday
- 부동신 계약시 주의사항
- 중국어정리
- 웰빙헬스
- 수미네 반찬
- AWS npm
- GraphQL
- 혁오
- Axis2
- 10cm
- 뒤꿈치 건조함
- 고운발크림
- s9+
- 마시내 탕수육
- 생활코딩
- 자금조달계획서
- 프렌즈
- 크러쉬
- 부동산거래계약신고필증
- Bitnami
- AWS nodejs
- ES6
- 중국어강의
- 중국어공부
- 서머너즈워
- 노브랜드
- 프리티어
- 알고리즘
- 로꼬
- 존맛탱
- Git
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |