2019. 8. 8. 20:15ㆍ[공부] 영상/GraphQL
괜찮은 포스팅1 : https://velopert.com/2318
괜찮은 포스팅2 : https://velog.io/@jakeseo_me/2019-04-28-0904-%EC%9E%91%EC%84%B1%EB%90%A8-qgjv086kyi
테스트 : https://graphql-tryout.herokuapp.com/graphql
강의 출처 : https://www.youtube.com/watch?v=1p-s99REAus
SQL : Structure 에 Query 하는 Language
GraphQL : Graph 에 Query 하는 Language
특징
- 구현체가 아닌 스펙이다.
- facebook 에서 만들었다.
- 객체간의 관계는 depth로 관리한다.
- GraphQL 스키마를 먼저 선언해야하는 타입 language 이다.
- 이미 정의된 GraphQL 스키마에 요청만 하면 된다.
- 여러 개의 무의미한 엔드포인트가 아닌 하나의 만능 엔드 포인트를 만든다.
목적
코드를 한번 잘 wrapping 하면 어디에서든 쓸 수 있도록 하자
백엔드 개발자와 불필요한 소통을 줄이고 클라이언트의 어떤 요구에도 대응 할 수 있도록하자.
GraphQL 예시
알고 싶은 내용
1. 나의 이름
2. 나의 나이
3. 나의 애완 동물의 종류
4. 나의 애완 동물이 먹는 사료 리스트 (이름, 유기농인지)
{
me {
name
age
pet {
bread
feeds{
name
organic
}
}
}
}
Response json
{
"me": {
"name" : "kok202",
"age" : 99,
"pet" : {
"bread" : "shibo inu",
"feeds" : [
{
"name" : "FOR DOG",
"organic" : true
},
{
"name" : "FOR DOG",
"organic" : true
}]
}
}
}
나의 애완동물이 먹는 유기농인 사료만 골라오기
{
me {
name
age
pet {
bread
feeds(onlyOrganic: true){
name
organic
}
}
}
}
나의 애완동물이 먹는 유기농 사료 5개만 가져오기
{
me {
name
age
pet {
bread
feeds(limit: 2){
name
organic
}
}
}
}
배경 : 스마트폰, 스마트워치, 데스크탑 등 다양한 환경이 생겨나면서 같은 url path 이지만 요청하는 환경에 따라 결과물을 달리 내려줘야하는 경우가 생긴다. 예를 들어 어떤 기사를 읽어오기위해 /api/news 라는 api 가 있다면 엔드포인트는 하나지만 환경에 맞춰 데이터를 내려주기 위해 작업은 배가 된다. 그리고 만약 어떤 API 가 추가되길 원한다면 백엔드 개발자에게 API 를 만들어 달라고 요청을 해야하는 과정이 필연적으로 생긴다. 더불어 해당 API 가 개발이 완성되기 까지 기다려야 하므로 시간이 지체된다. 이는 업무적으로도 굉장한 낭비다. 이러한 문제를 해결하고자 나온 해법중 하나이다.
graphQL 은 여러개의 API 엔드포인트가 아닌 하나 엔드포인트만으로 해결한다. /api/graphql
request 가 복잡하면 SQL 쿼리가 무수히 많이 생길 수 있으므로 최적화가 되어야한다.
최적화
1. depth 를 최대한 줄여야한다.
2. DataLoader 를 추가해야한다.
DataLoader
property resolve 시 한번에 모아서 배치 call 을 한다.
중복 로드 되는 객체는 캐시해서 불필요한 요청을 줄인다.
첨언
GraphQL 의 엔드포인트는 public 으로 열리면 안된다.
Persist Query 를 사용해야한다.
'[공부] 영상 > GraphQL' 카테고리의 다른 글
GraphQL 강의 (10~11 : Wrapping REST API) (0) | 2019.08.10 |
---|---|
GraphQL 강의 (8~9 : Mutation) (0) | 2019.08.10 |
GraphQL 강의 (6~7 : Schema Array, Find) (0) | 2019.08.10 |
GraphQL 강의 (4 : Schema String) (0) | 2019.08.10 |
GraphQL 강의 (1~3 : 세팅) (0) | 2019.08.10 |