SlideShare a Scribd company logo
1 of 57
이정우
에디켓
REST에서
GraphQL과 Relay로
갈아타기
목차
1. REST API - Status Quo & Limitations
2. GraphQL - How it replaces REST
3. Relay - Data fetching and management
1.
REST API
1. REST API 소개
리소스를 URI로 표현
GET, POST, PUT, DELETE 활용
웹 개발 아키텍처
1. REST API 소개
GET /api/users/ 유저 리스트 가져오기
GET /api/users/1/ 유저 1을 가져오기
POST /api/users/ 유저 생성하기
PUT /api/users/1/ 유저 1를 수정하기
DELETE /api/users/1/ 유저1를 삭제하기
예제
1. REST API 현황
GET /api/users/를 했으면 결과 값은 어떻게 돌려줘야하나?
HTTP Response
https://api.twitter.com/1.1/lists/me
mbers.json
1. REST API 현황
Twitter 방식
https://dev.twitter.com/rest/reference/get/lists/members
https://api.github.com/repos/octocat/Hello-
World/issues/
1. REST API 현황
Github 방식
https://developer.github.com/v3/issues/
https://openapi.naver.com/blog/list
Category.json
1. REST API 현황
Naver 방식
https://developers.naver.com/docs/blog/post
1. REST API 현황
사실상 각자 제멋대로…
추가 함수는? POST Response? 필터는? 정렬은? 페이지네이션
은?
1. REST API 현황
그래도 그나마 쓸만한…
http://jsonapi.org/
1. REST API 현황
• Relationship 가져오기? ✓
• 부분 필드만 가져오기? ✓
• 필터 적용방법? ✓
• 정렬하기? ✓
• 페이지네이션? ✓
• POST Response? ✓
• 깃허브에 별 갯수? ✓
1. REST API 한계
필드 제한 (Sparse Fieldset)
모든 필드 전부다 가져와야 하나?
접근 권한이 없는 필드는 가져오지 말아야 하나?
Admin과 일반 유저가 기본적으로 가져오는 필드가 다르나?
1. REST API 한계
필드 제한 (Sparse Fieldset)
1. REST API 한계
유저 1의 모든 필드를 가져오고 싶지만
그가 팔로우하는 유저들의 username, email만 가져오고 싶은데…
결과: 모든 유저의 username과 email을 가져옴
필드 제한 (Sparse Fieldset)
1. REST API 한계
필드 타입
1. REST API 한계
POST /payments/ 를 하니 유저 1의 credit이 변경되었다.
그런데 클라이언트에서 이미 유저 1를 불러왔으며 credit값이 아직 동기화 되지 않
았다.
- POST Response에 만들어진 payment와 같이 변경된 유저도 가져오기?
- GET /users/1/ 로 한번 더 불러오기?
Side Effect
1. REST API 한계
실제사례:
- 요청의 저자, 예약, 예약한 에디터, 교정본, 교정본 에디터, 그리고 교정본 리뷰를
가져오기
- 더불어 각자 필드마다 가져올 수 있는 필드 제한하기
GET /drafts/?
include=author,reservation.editor,revision.editor,revision.review&fields[draft]=cate
gory,title,content,message,word_count,time_limit,point,status,created_at&fields[us
er]=picture_url,profile_path,username,is_following,is_blocking,college,workplace
Query Hell
1. REST API 한계
• RESTful과 JSON API는 프로토콜이지 쓸만한 라이브러리가 없다.
• 결국 직접 구현해서 사용... jsonapi.js
• 서버의 모든 endpoint에서 JSON API에 맞게 답변을 해줘야한다.
• 클라이언트에서도 데이터를 받아서 Store에 보관해야한다.
• 비즈니스 로직 짜기도 바쁜데 라이브러리 관리까지??
라이브러리 부족
React (2013) GraphQL (2015)
JS와 HTML를 합쳐버
림
REST를 대체해버
림
2.
GraphQL
2. GraphQL 소개
쿼리 언어
쿼리를 부르
면
Data가 json으
로
2. GraphQL 소개
쿼리 언어
- Arguments
- Alias
- Fragment
- Variables
자세한 설명은 공식 문서 참조
2. REST와 GraphQL 비교하기
Different Request
REST의 URI는 GraphQL 쿼리로
좀 더 간결하게 표현 가능
2. REST와 GraphQL 비교하기
GET /drafts/?
include=author,reservation.editor,revision.editor,revision.review&fields[draft]=cate
gory,title,content,message,word_count,time_limit,point,status,created_at&fields[us
er]=picture_url,profile_path,username,is_following,is_blocking,college,workplace
2. REST와 GraphQL 비교하기
2. REST와 GraphQL 비교하기
Different Methods
GET → Query
POST, PUT, DELETE → Mutation
2. GraphQL 구현 예제
Schema Definition
Type System으로 Schema를 정
의
query와 mutation은 entry point
2. GraphQL 구현 예제
GraphQLObjectType
GraphQLObjectType의 fields를 정
의
필드엔 type, args, resolve
2. GraphQL 구현 예제
Arguments & Resolve method
userType을 정의하고
필드의 타입을 userType으로 정의함
2. GraphQL 구현 예제
Mutation
Mutation 또한 args와 resolve 사용
2. GraphQL 구현 예제
Express-GraphQL
schema를 express서버에
달아두면 완료!
2. GraphQL 구현 예제
Lokka - GraphQL client
2. GraphQL 구현 예제
GraphiQL
자동 문서화와 Type Inspection이
가능한 강력한 툴
React (2013) GraphQL (2015) Relay (2015)
3.
Relay
3. Relay
• Node
• Connection
• React Relay
• Mutation Config
Relay가 GraphQL에서 확장하는 컨셉
3. Relay 소개
Resource에 대한 단일 Interface
Data management면에서 유리함.
Node
3. Relay 소개
id로 Resource를 가져옴
Node
3. Relay 소개
하지만 String만으로는
어떤 Resource인지 알기 힘들어서
type과 id가 합쳐진 GlobalId를 사
용
Node
3. Relay 소개
다수의 Node를 가져올때 사용
pagination에 특화되있음
Connection
3. React Relay
데이터 의존성과 React 컴포넌트가 공존한다
3. React Relay
<EditorCard />
<EditorInfo />
<EditorStat />
3. React Relay
3. React Relay
<EditorCard />
<EditorInfo />
<EditorStat />
3. React Relay
3. React Relay
3. Mutation in Relay
Mutation의 Side Effect를
적용시키는 방식을 Config에 명시하면
클라이언트에 적절하게 반영
예제)
이미 불러온 Node의 값을 업데이트
기존에 불러온 Connection에 추가/제거
Mutation Config
3. REST에서 GraphQL Relay로 갈아타기
GET, POST, PUT, DELETE으로 모든 것을 해결해야 함
→ 데이터 가져올땐 query (node, connections, 등) 사용, 변경할땐 mutation 사
용
기본값으로 어떤걸 불러올지 정하기가 애매함
→ 항상 데이터 의존성을 명시
필드 타입이 정해져 있지 않아서 따로 문서화를 하지 않으면 협업이 힘듬
→ GraphQL은 타입이 정해져 있고 프로토콜 단에서 확인할 수 있음
(Introspection)
Summary
3. REST에서 GraphQL Relay로 갈아타기
데이터 의존성을 URI 에 명세하려면 복잡해진다.
→ 데이터 의존성을 명세한 query / mutation를 보낸다
데이터 변경사항을 클라이언트에서 처리하는 방식이 제각각
→ Mutation Config만 잘 써주면 알아서 데이터 변경사항을 처리한다
Summary
3. REST에서 GraphQL Relay로 갈아타기
Data management를 React와 묶어줘서 생산성과 개발 속도가 크게 향상
Query build + Cache로 인하여 성능 향상
지금 존재하는 온라인 문서만으로는 Relay의 진입장벽은 꽤 높은 편
현재 Relay는 실시간 지원이 미비…
현재 GraphQL Relay만으론 안정적인 서비스 구현이 가능… 하지만 아직 실험적인
생태계
Aftermath
3. 관련 링크
관련 링크
http://graphql.org/ - GraphQL 영문 공식 홈페이지
https://facebook.github.io/relay/ - GraphQL Relay 영문 공식 홈페이지
https://facebook.github.io/graphql/ - GraphQL 영문 명세서
https://learngraphql.com/ - GraphQL 영문 튜토리얼
https://github.com/chentsulin/awesome-graphql - GraphQL 리소스 모음집
https://github.com/kriasoft/react-starter-kit - 현재 최강의 boilerplate
http://blog.sapzil.org/2015/09/01/graphql-rfc/ - 그나마 찾은 한글 기사
Q&A
Thank You
이정우 (연사자): jw@ediket.com
이철희 (기술 제공): leechulhee95@gmail.com

More Related Content

What's hot

[Retail & CPG Day 2019] 마켓컬리 서비스 AWS 이관 및 최적화 여정 - 임상석, 마켓컬리 개발 리더
[Retail & CPG Day 2019] 마켓컬리 서비스 AWS 이관 및 최적화 여정 - 임상석, 마켓컬리 개발 리더[Retail & CPG Day 2019] 마켓컬리 서비스 AWS 이관 및 최적화 여정 - 임상석, 마켓컬리 개발 리더
[Retail & CPG Day 2019] 마켓컬리 서비스 AWS 이관 및 최적화 여정 - 임상석, 마켓컬리 개발 리더Amazon Web Services Korea
 
SRV403_Serverless Authentication and Authorization
SRV403_Serverless Authentication and AuthorizationSRV403_Serverless Authentication and Authorization
SRV403_Serverless Authentication and AuthorizationAmazon Web Services
 
Amazon Aurora 성능 향상 및 마이그레이션 모범 사례 - AWS Summit Seoul 2017
Amazon Aurora 성능 향상 및 마이그레이션 모범 사례 - AWS Summit Seoul 2017Amazon Aurora 성능 향상 및 마이그레이션 모범 사례 - AWS Summit Seoul 2017
Amazon Aurora 성능 향상 및 마이그레이션 모범 사례 - AWS Summit Seoul 2017Amazon Web Services Korea
 
Athena & Step Function 으로 통계 파이프라인 구축하기 - 변규현 (당근마켓) :: AWS Community Day Onl...
Athena & Step Function 으로 통계 파이프라인 구축하기 - 변규현 (당근마켓) :: AWS Community Day Onl...Athena & Step Function 으로 통계 파이프라인 구축하기 - 변규현 (당근마켓) :: AWS Community Day Onl...
Athena & Step Function 으로 통계 파이프라인 구축하기 - 변규현 (당근마켓) :: AWS Community Day Onl...AWSKRUG - AWS한국사용자모임
 
천만사용자를 위한 AWS 클라우드 아키텍처 진화하기 – 문종민, AWS솔루션즈 아키텍트:: AWS Summit Online Korea 2020
천만사용자를 위한 AWS 클라우드 아키텍처 진화하기 – 문종민, AWS솔루션즈 아키텍트::  AWS Summit Online Korea 2020천만사용자를 위한 AWS 클라우드 아키텍처 진화하기 – 문종민, AWS솔루션즈 아키텍트::  AWS Summit Online Korea 2020
천만사용자를 위한 AWS 클라우드 아키텍처 진화하기 – 문종민, AWS솔루션즈 아키텍트:: AWS Summit Online Korea 2020Amazon Web Services Korea
 
AWS 클라우드 기반 확장성 높은 천만 사용자 웹 서비스 만들기 - 윤석찬
AWS 클라우드 기반 확장성 높은 천만 사용자 웹 서비스 만들기 - 윤석찬AWS 클라우드 기반 확장성 높은 천만 사용자 웹 서비스 만들기 - 윤석찬
AWS 클라우드 기반 확장성 높은 천만 사용자 웹 서비스 만들기 - 윤석찬Amazon Web Services Korea
 
[Atlassian in 부산]Git을 이용한 형상관리 전략_투씨드
[Atlassian in 부산]Git을 이용한 형상관리 전략_투씨드[Atlassian in 부산]Git을 이용한 형상관리 전략_투씨드
[Atlassian in 부산]Git을 이용한 형상관리 전략_투씨드Atlassian 대한민국
 
Producer Performance Tuning for Apache Kafka
Producer Performance Tuning for Apache KafkaProducer Performance Tuning for Apache Kafka
Producer Performance Tuning for Apache KafkaJiangjie Qin
 
카프카(kafka) 성능 테스트 환경 구축 (JMeter, ELK)
카프카(kafka) 성능 테스트 환경 구축 (JMeter, ELK)카프카(kafka) 성능 테스트 환경 구축 (JMeter, ELK)
카프카(kafka) 성능 테스트 환경 구축 (JMeter, ELK)Hyunmin Lee
 
MSA 전략 2: 마이크로서비스, 어떻게 구현할 것인가?
MSA 전략 2: 마이크로서비스, 어떻게 구현할 것인가?MSA 전략 2: 마이크로서비스, 어떻게 구현할 것인가?
MSA 전략 2: 마이크로서비스, 어떻게 구현할 것인가?VMware Tanzu Korea
 
Amazon S3 이미지 온디맨드 리사이징을 통한 70% 서버 비용 줄이기 - AWS Summit Seoul 2017
Amazon S3 이미지 온디맨드 리사이징을 통한 70% 서버 비용 줄이기 - AWS Summit Seoul 2017Amazon S3 이미지 온디맨드 리사이징을 통한 70% 서버 비용 줄이기 - AWS Summit Seoul 2017
Amazon S3 이미지 온디맨드 리사이징을 통한 70% 서버 비용 줄이기 - AWS Summit Seoul 2017Amazon Web Services Korea
 
AWS 기반의 마이크로 서비스 아키텍쳐 구현 방안 :: 김필중 :: AWS Summit Seoul 20
AWS 기반의 마이크로 서비스 아키텍쳐 구현 방안 :: 김필중 :: AWS Summit Seoul 20AWS 기반의 마이크로 서비스 아키텍쳐 구현 방안 :: 김필중 :: AWS Summit Seoul 20
AWS 기반의 마이크로 서비스 아키텍쳐 구현 방안 :: 김필중 :: AWS Summit Seoul 20Amazon Web Services Korea
 
[Spring Camp 2018] 11번가 Spring Cloud 기반 MSA로의 전환 : 지난 1년간의 이야기
[Spring Camp 2018] 11번가 Spring Cloud 기반 MSA로의 전환 : 지난 1년간의 이야기[Spring Camp 2018] 11번가 Spring Cloud 기반 MSA로의 전환 : 지난 1년간의 이야기
[Spring Camp 2018] 11번가 Spring Cloud 기반 MSA로의 전환 : 지난 1년간의 이야기YongSung Yoon
 
AWS 기반 대규모 트래픽 견디기 - 장준엽 (구로디지털 모임) :: AWS Community Day 2017
AWS 기반 대규모 트래픽 견디기 - 장준엽 (구로디지털 모임) :: AWS Community Day 2017AWS 기반 대규모 트래픽 견디기 - 장준엽 (구로디지털 모임) :: AWS Community Day 2017
AWS 기반 대규모 트래픽 견디기 - 장준엽 (구로디지털 모임) :: AWS Community Day 2017AWSKRUG - AWS한국사용자모임
 
CloudWatch 성능 모니터링과 신속한 대응을 위한 노하우 - 박선용 솔루션즈 아키텍트:: AWS Cloud Track 3 Gaming
CloudWatch 성능 모니터링과 신속한 대응을 위한 노하우 - 박선용 솔루션즈 아키텍트:: AWS Cloud Track 3 GamingCloudWatch 성능 모니터링과 신속한 대응을 위한 노하우 - 박선용 솔루션즈 아키텍트:: AWS Cloud Track 3 Gaming
CloudWatch 성능 모니터링과 신속한 대응을 위한 노하우 - 박선용 솔루션즈 아키텍트:: AWS Cloud Track 3 GamingAmazon Web Services Korea
 
게임서비스를 위한 ElastiCache 활용 전략 :: 구승모 솔루션즈 아키텍트 :: Gaming on AWS 2016
게임서비스를 위한 ElastiCache 활용 전략 :: 구승모 솔루션즈 아키텍트 :: Gaming on AWS 2016게임서비스를 위한 ElastiCache 활용 전략 :: 구승모 솔루션즈 아키텍트 :: Gaming on AWS 2016
게임서비스를 위한 ElastiCache 활용 전략 :: 구승모 솔루션즈 아키텍트 :: Gaming on AWS 2016Amazon Web Services Korea
 
AWS Black Belt Online Seminar 2017 AWS Cognito
AWS Black Belt Online Seminar 2017 AWS CognitoAWS Black Belt Online Seminar 2017 AWS Cognito
AWS Black Belt Online Seminar 2017 AWS CognitoAmazon Web Services Japan
 
Beyond the Twelve-Factor App
Beyond the Twelve-Factor AppBeyond the Twelve-Factor App
Beyond the Twelve-Factor AppKazuya Takahashi
 

What's hot (20)

[Retail & CPG Day 2019] 마켓컬리 서비스 AWS 이관 및 최적화 여정 - 임상석, 마켓컬리 개발 리더
[Retail & CPG Day 2019] 마켓컬리 서비스 AWS 이관 및 최적화 여정 - 임상석, 마켓컬리 개발 리더[Retail & CPG Day 2019] 마켓컬리 서비스 AWS 이관 및 최적화 여정 - 임상석, 마켓컬리 개발 리더
[Retail & CPG Day 2019] 마켓컬리 서비스 AWS 이관 및 최적화 여정 - 임상석, 마켓컬리 개발 리더
 
SRV403_Serverless Authentication and Authorization
SRV403_Serverless Authentication and AuthorizationSRV403_Serverless Authentication and Authorization
SRV403_Serverless Authentication and Authorization
 
Amazon Aurora 성능 향상 및 마이그레이션 모범 사례 - AWS Summit Seoul 2017
Amazon Aurora 성능 향상 및 마이그레이션 모범 사례 - AWS Summit Seoul 2017Amazon Aurora 성능 향상 및 마이그레이션 모범 사례 - AWS Summit Seoul 2017
Amazon Aurora 성능 향상 및 마이그레이션 모범 사례 - AWS Summit Seoul 2017
 
Athena & Step Function 으로 통계 파이프라인 구축하기 - 변규현 (당근마켓) :: AWS Community Day Onl...
Athena & Step Function 으로 통계 파이프라인 구축하기 - 변규현 (당근마켓) :: AWS Community Day Onl...Athena & Step Function 으로 통계 파이프라인 구축하기 - 변규현 (당근마켓) :: AWS Community Day Onl...
Athena & Step Function 으로 통계 파이프라인 구축하기 - 변규현 (당근마켓) :: AWS Community Day Onl...
 
천만사용자를 위한 AWS 클라우드 아키텍처 진화하기 – 문종민, AWS솔루션즈 아키텍트:: AWS Summit Online Korea 2020
천만사용자를 위한 AWS 클라우드 아키텍처 진화하기 – 문종민, AWS솔루션즈 아키텍트::  AWS Summit Online Korea 2020천만사용자를 위한 AWS 클라우드 아키텍처 진화하기 – 문종민, AWS솔루션즈 아키텍트::  AWS Summit Online Korea 2020
천만사용자를 위한 AWS 클라우드 아키텍처 진화하기 – 문종민, AWS솔루션즈 아키텍트:: AWS Summit Online Korea 2020
 
AWS 클라우드 기반 확장성 높은 천만 사용자 웹 서비스 만들기 - 윤석찬
AWS 클라우드 기반 확장성 높은 천만 사용자 웹 서비스 만들기 - 윤석찬AWS 클라우드 기반 확장성 높은 천만 사용자 웹 서비스 만들기 - 윤석찬
AWS 클라우드 기반 확장성 높은 천만 사용자 웹 서비스 만들기 - 윤석찬
 
[Atlassian in 부산]Git을 이용한 형상관리 전략_투씨드
[Atlassian in 부산]Git을 이용한 형상관리 전략_투씨드[Atlassian in 부산]Git을 이용한 형상관리 전략_투씨드
[Atlassian in 부산]Git을 이용한 형상관리 전략_투씨드
 
Producer Performance Tuning for Apache Kafka
Producer Performance Tuning for Apache KafkaProducer Performance Tuning for Apache Kafka
Producer Performance Tuning for Apache Kafka
 
카프카(kafka) 성능 테스트 환경 구축 (JMeter, ELK)
카프카(kafka) 성능 테스트 환경 구축 (JMeter, ELK)카프카(kafka) 성능 테스트 환경 구축 (JMeter, ELK)
카프카(kafka) 성능 테스트 환경 구축 (JMeter, ELK)
 
MSA 전략 2: 마이크로서비스, 어떻게 구현할 것인가?
MSA 전략 2: 마이크로서비스, 어떻게 구현할 것인가?MSA 전략 2: 마이크로서비스, 어떻게 구현할 것인가?
MSA 전략 2: 마이크로서비스, 어떻게 구현할 것인가?
 
Amazon S3 이미지 온디맨드 리사이징을 통한 70% 서버 비용 줄이기 - AWS Summit Seoul 2017
Amazon S3 이미지 온디맨드 리사이징을 통한 70% 서버 비용 줄이기 - AWS Summit Seoul 2017Amazon S3 이미지 온디맨드 리사이징을 통한 70% 서버 비용 줄이기 - AWS Summit Seoul 2017
Amazon S3 이미지 온디맨드 리사이징을 통한 70% 서버 비용 줄이기 - AWS Summit Seoul 2017
 
AWS 기반의 마이크로 서비스 아키텍쳐 구현 방안 :: 김필중 :: AWS Summit Seoul 20
AWS 기반의 마이크로 서비스 아키텍쳐 구현 방안 :: 김필중 :: AWS Summit Seoul 20AWS 기반의 마이크로 서비스 아키텍쳐 구현 방안 :: 김필중 :: AWS Summit Seoul 20
AWS 기반의 마이크로 서비스 아키텍쳐 구현 방안 :: 김필중 :: AWS Summit Seoul 20
 
[Spring Camp 2018] 11번가 Spring Cloud 기반 MSA로의 전환 : 지난 1년간의 이야기
[Spring Camp 2018] 11번가 Spring Cloud 기반 MSA로의 전환 : 지난 1년간의 이야기[Spring Camp 2018] 11번가 Spring Cloud 기반 MSA로의 전환 : 지난 1년간의 이야기
[Spring Camp 2018] 11번가 Spring Cloud 기반 MSA로의 전환 : 지난 1년간의 이야기
 
모두싸인의 AWS 성장기
모두싸인의 AWS 성장기모두싸인의 AWS 성장기
모두싸인의 AWS 성장기
 
AWS 기반 대규모 트래픽 견디기 - 장준엽 (구로디지털 모임) :: AWS Community Day 2017
AWS 기반 대규모 트래픽 견디기 - 장준엽 (구로디지털 모임) :: AWS Community Day 2017AWS 기반 대규모 트래픽 견디기 - 장준엽 (구로디지털 모임) :: AWS Community Day 2017
AWS 기반 대규모 트래픽 견디기 - 장준엽 (구로디지털 모임) :: AWS Community Day 2017
 
Black Belt Online Seminar AWS Amazon S3
Black Belt Online Seminar AWS Amazon S3Black Belt Online Seminar AWS Amazon S3
Black Belt Online Seminar AWS Amazon S3
 
CloudWatch 성능 모니터링과 신속한 대응을 위한 노하우 - 박선용 솔루션즈 아키텍트:: AWS Cloud Track 3 Gaming
CloudWatch 성능 모니터링과 신속한 대응을 위한 노하우 - 박선용 솔루션즈 아키텍트:: AWS Cloud Track 3 GamingCloudWatch 성능 모니터링과 신속한 대응을 위한 노하우 - 박선용 솔루션즈 아키텍트:: AWS Cloud Track 3 Gaming
CloudWatch 성능 모니터링과 신속한 대응을 위한 노하우 - 박선용 솔루션즈 아키텍트:: AWS Cloud Track 3 Gaming
 
게임서비스를 위한 ElastiCache 활용 전략 :: 구승모 솔루션즈 아키텍트 :: Gaming on AWS 2016
게임서비스를 위한 ElastiCache 활용 전략 :: 구승모 솔루션즈 아키텍트 :: Gaming on AWS 2016게임서비스를 위한 ElastiCache 활용 전략 :: 구승모 솔루션즈 아키텍트 :: Gaming on AWS 2016
게임서비스를 위한 ElastiCache 활용 전략 :: 구승모 솔루션즈 아키텍트 :: Gaming on AWS 2016
 
AWS Black Belt Online Seminar 2017 AWS Cognito
AWS Black Belt Online Seminar 2017 AWS CognitoAWS Black Belt Online Seminar 2017 AWS Cognito
AWS Black Belt Online Seminar 2017 AWS Cognito
 
Beyond the Twelve-Factor App
Beyond the Twelve-Factor AppBeyond the Twelve-Factor App
Beyond the Twelve-Factor App
 

Similar to [112]rest에서 graph ql과 relay로 갈아타기 이정우

REST Ovewview
REST OvewviewREST Ovewview
REST OvewviewTerry Cho
 
제 4회 DGMIT R&D 컨퍼런스 : REST API - 리소스 지향적 아키텍처
제 4회 DGMIT R&D 컨퍼런스 : REST API - 리소스 지향적 아키텍처제 4회 DGMIT R&D 컨퍼런스 : REST API - 리소스 지향적 아키텍처
제 4회 DGMIT R&D 컨퍼런스 : REST API - 리소스 지향적 아키텍처dgmit2009
 
Ksug 세미나 (윤성준) (20121208)
Ksug 세미나 (윤성준) (20121208)Ksug 세미나 (윤성준) (20121208)
Ksug 세미나 (윤성준) (20121208)Sungjoon Yoon
 
GraphQL overview #2
GraphQL overview #2GraphQL overview #2
GraphQL overview #2기동 이
 
[1A5]효율적인안드로이드앱개발
[1A5]효율적인안드로이드앱개발[1A5]효율적인안드로이드앱개발
[1A5]효율적인안드로이드앱개발NAVER D2
 
대용량 분산 아키텍쳐 설계 #5. rest
대용량 분산 아키텍쳐 설계 #5. rest대용량 분산 아키텍쳐 설계 #5. rest
대용량 분산 아키텍쳐 설계 #5. restTerry Cho
 
REST API 디자인 개요
REST API 디자인 개요REST API 디자인 개요
REST API 디자인 개요nexusz99
 
[스프링 스터디 3일차] @MVC
[스프링 스터디 3일차] @MVC[스프링 스터디 3일차] @MVC
[스프링 스터디 3일차] @MVCAnselmKim
 
[오픈소스컨설팅]Spring MVC
[오픈소스컨설팅]Spring MVC [오픈소스컨설팅]Spring MVC
[오픈소스컨설팅]Spring MVC Ji-Woong Choi
 
REST API 설계
REST API 설계REST API 설계
REST API 설계Terry Cho
 
파이썬 웹 프로그래밍 2탄
파이썬 웹 프로그래밍 2탄 파이썬 웹 프로그래밍 2탄
파이썬 웹 프로그래밍 2탄 SeongHyun Ahn
 
[TECHCON 2019: MOBILE - Android]2.예제에서는 알려주지 않는 Model 이야기
[TECHCON 2019: MOBILE - Android]2.예제에서는 알려주지 않는 Model 이야기[TECHCON 2019: MOBILE - Android]2.예제에서는 알려주지 않는 Model 이야기
[TECHCON 2019: MOBILE - Android]2.예제에서는 알려주지 않는 Model 이야기NAVER Engineering
 
Facebook은 React를 왜 만들었을까?
Facebook은 React를 왜 만들었을까? Facebook은 React를 왜 만들었을까?
Facebook은 React를 왜 만들었을까? Kim Hunmin
 
레일스를 이용한 애자일 웹 개발 가이드
레일스를 이용한 애자일 웹 개발 가이드레일스를 이용한 애자일 웹 개발 가이드
레일스를 이용한 애자일 웹 개발 가이드Sukjoon Kim
 
Restful web service
Restful web serviceRestful web service
Restful web servicesunguen lee
 
스프링 스터디 1장
스프링 스터디 1장스프링 스터디 1장
스프링 스터디 1장Seongchan Kang
 
Spring-Boot (springcamp2014)
Spring-Boot (springcamp2014)Spring-Boot (springcamp2014)
Spring-Boot (springcamp2014)sung yong jung
 
REST에 대해 알아봅시다.pdf
REST에 대해 알아봅시다.pdfREST에 대해 알아봅시다.pdf
REST에 대해 알아봅시다.pdfHo Jeong Im
 

Similar to [112]rest에서 graph ql과 relay로 갈아타기 이정우 (20)

REST Ovewview
REST OvewviewREST Ovewview
REST Ovewview
 
제 4회 DGMIT R&D 컨퍼런스 : REST API - 리소스 지향적 아키텍처
제 4회 DGMIT R&D 컨퍼런스 : REST API - 리소스 지향적 아키텍처제 4회 DGMIT R&D 컨퍼런스 : REST API - 리소스 지향적 아키텍처
제 4회 DGMIT R&D 컨퍼런스 : REST API - 리소스 지향적 아키텍처
 
Ksug 세미나 (윤성준) (20121208)
Ksug 세미나 (윤성준) (20121208)Ksug 세미나 (윤성준) (20121208)
Ksug 세미나 (윤성준) (20121208)
 
GraphQL overview #2
GraphQL overview #2GraphQL overview #2
GraphQL overview #2
 
[1A5]효율적인안드로이드앱개발
[1A5]효율적인안드로이드앱개발[1A5]효율적인안드로이드앱개발
[1A5]효율적인안드로이드앱개발
 
대용량 분산 아키텍쳐 설계 #5. rest
대용량 분산 아키텍쳐 설계 #5. rest대용량 분산 아키텍쳐 설계 #5. rest
대용량 분산 아키텍쳐 설계 #5. rest
 
REST API 디자인 개요
REST API 디자인 개요REST API 디자인 개요
REST API 디자인 개요
 
[스프링 스터디 3일차] @MVC
[스프링 스터디 3일차] @MVC[스프링 스터디 3일차] @MVC
[스프링 스터디 3일차] @MVC
 
[오픈소스컨설팅]Spring MVC
[오픈소스컨설팅]Spring MVC [오픈소스컨설팅]Spring MVC
[오픈소스컨설팅]Spring MVC
 
REST API 설계
REST API 설계REST API 설계
REST API 설계
 
파이썬 웹 프로그래밍 2탄
파이썬 웹 프로그래밍 2탄 파이썬 웹 프로그래밍 2탄
파이썬 웹 프로그래밍 2탄
 
Redis
RedisRedis
Redis
 
[TECHCON 2019: MOBILE - Android]2.예제에서는 알려주지 않는 Model 이야기
[TECHCON 2019: MOBILE - Android]2.예제에서는 알려주지 않는 Model 이야기[TECHCON 2019: MOBILE - Android]2.예제에서는 알려주지 않는 Model 이야기
[TECHCON 2019: MOBILE - Android]2.예제에서는 알려주지 않는 Model 이야기
 
Facebook은 React를 왜 만들었을까?
Facebook은 React를 왜 만들었을까? Facebook은 React를 왜 만들었을까?
Facebook은 React를 왜 만들었을까?
 
레일스를 이용한 애자일 웹 개발 가이드
레일스를 이용한 애자일 웹 개발 가이드레일스를 이용한 애자일 웹 개발 가이드
레일스를 이용한 애자일 웹 개발 가이드
 
RESTful API
RESTful APIRESTful API
RESTful API
 
Restful web service
Restful web serviceRestful web service
Restful web service
 
스프링 스터디 1장
스프링 스터디 1장스프링 스터디 1장
스프링 스터디 1장
 
Spring-Boot (springcamp2014)
Spring-Boot (springcamp2014)Spring-Boot (springcamp2014)
Spring-Boot (springcamp2014)
 
REST에 대해 알아봅시다.pdf
REST에 대해 알아봅시다.pdfREST에 대해 알아봅시다.pdf
REST에 대해 알아봅시다.pdf
 

More from NAVER D2

[211] 인공지능이 인공지능 챗봇을 만든다
[211] 인공지능이 인공지능 챗봇을 만든다[211] 인공지능이 인공지능 챗봇을 만든다
[211] 인공지능이 인공지능 챗봇을 만든다NAVER D2
 
[233] 대형 컨테이너 클러스터에서의 고가용성 Network Load Balancing: Maglev Hashing Scheduler i...
[233] 대형 컨테이너 클러스터에서의 고가용성 Network Load Balancing: Maglev Hashing Scheduler i...[233] 대형 컨테이너 클러스터에서의 고가용성 Network Load Balancing: Maglev Hashing Scheduler i...
[233] 대형 컨테이너 클러스터에서의 고가용성 Network Load Balancing: Maglev Hashing Scheduler i...NAVER D2
 
[215] Druid로 쉽고 빠르게 데이터 분석하기
[215] Druid로 쉽고 빠르게 데이터 분석하기[215] Druid로 쉽고 빠르게 데이터 분석하기
[215] Druid로 쉽고 빠르게 데이터 분석하기NAVER D2
 
[245]Papago Internals: 모델분석과 응용기술 개발
[245]Papago Internals: 모델분석과 응용기술 개발[245]Papago Internals: 모델분석과 응용기술 개발
[245]Papago Internals: 모델분석과 응용기술 개발NAVER D2
 
[236] 스트림 저장소 최적화 이야기: 아파치 드루이드로부터 얻은 교훈
[236] 스트림 저장소 최적화 이야기: 아파치 드루이드로부터 얻은 교훈[236] 스트림 저장소 최적화 이야기: 아파치 드루이드로부터 얻은 교훈
[236] 스트림 저장소 최적화 이야기: 아파치 드루이드로부터 얻은 교훈NAVER D2
 
[235]Wikipedia-scale Q&A
[235]Wikipedia-scale Q&A[235]Wikipedia-scale Q&A
[235]Wikipedia-scale Q&ANAVER D2
 
[244]로봇이 현실 세계에 대해 학습하도록 만들기
[244]로봇이 현실 세계에 대해 학습하도록 만들기[244]로봇이 현실 세계에 대해 학습하도록 만들기
[244]로봇이 현실 세계에 대해 학습하도록 만들기NAVER D2
 
[243] Deep Learning to help student’s Deep Learning
[243] Deep Learning to help student’s Deep Learning[243] Deep Learning to help student’s Deep Learning
[243] Deep Learning to help student’s Deep LearningNAVER D2
 
[234]Fast & Accurate Data Annotation Pipeline for AI applications
[234]Fast & Accurate Data Annotation Pipeline for AI applications[234]Fast & Accurate Data Annotation Pipeline for AI applications
[234]Fast & Accurate Data Annotation Pipeline for AI applicationsNAVER D2
 
Old version: [233]대형 컨테이너 클러스터에서의 고가용성 Network Load Balancing
Old version: [233]대형 컨테이너 클러스터에서의 고가용성 Network Load BalancingOld version: [233]대형 컨테이너 클러스터에서의 고가용성 Network Load Balancing
Old version: [233]대형 컨테이너 클러스터에서의 고가용성 Network Load BalancingNAVER D2
 
[226]NAVER 광고 deep click prediction: 모델링부터 서빙까지
[226]NAVER 광고 deep click prediction: 모델링부터 서빙까지[226]NAVER 광고 deep click prediction: 모델링부터 서빙까지
[226]NAVER 광고 deep click prediction: 모델링부터 서빙까지NAVER D2
 
[225]NSML: 머신러닝 플랫폼 서비스하기 & 모델 튜닝 자동화하기
[225]NSML: 머신러닝 플랫폼 서비스하기 & 모델 튜닝 자동화하기[225]NSML: 머신러닝 플랫폼 서비스하기 & 모델 튜닝 자동화하기
[225]NSML: 머신러닝 플랫폼 서비스하기 & 모델 튜닝 자동화하기NAVER D2
 
[224]네이버 검색과 개인화
[224]네이버 검색과 개인화[224]네이버 검색과 개인화
[224]네이버 검색과 개인화NAVER D2
 
[216]Search Reliability Engineering (부제: 지진에도 흔들리지 않는 네이버 검색시스템)
[216]Search Reliability Engineering (부제: 지진에도 흔들리지 않는 네이버 검색시스템)[216]Search Reliability Engineering (부제: 지진에도 흔들리지 않는 네이버 검색시스템)
[216]Search Reliability Engineering (부제: 지진에도 흔들리지 않는 네이버 검색시스템)NAVER D2
 
[214] Ai Serving Platform: 하루 수 억 건의 인퍼런스를 처리하기 위한 고군분투기
[214] Ai Serving Platform: 하루 수 억 건의 인퍼런스를 처리하기 위한 고군분투기[214] Ai Serving Platform: 하루 수 억 건의 인퍼런스를 처리하기 위한 고군분투기
[214] Ai Serving Platform: 하루 수 억 건의 인퍼런스를 처리하기 위한 고군분투기NAVER D2
 
[213] Fashion Visual Search
[213] Fashion Visual Search[213] Fashion Visual Search
[213] Fashion Visual SearchNAVER D2
 
[232] TensorRT를 활용한 딥러닝 Inference 최적화
[232] TensorRT를 활용한 딥러닝 Inference 최적화[232] TensorRT를 활용한 딥러닝 Inference 최적화
[232] TensorRT를 활용한 딥러닝 Inference 최적화NAVER D2
 
[242]컴퓨터 비전을 이용한 실내 지도 자동 업데이트 방법: 딥러닝을 통한 POI 변화 탐지
[242]컴퓨터 비전을 이용한 실내 지도 자동 업데이트 방법: 딥러닝을 통한 POI 변화 탐지[242]컴퓨터 비전을 이용한 실내 지도 자동 업데이트 방법: 딥러닝을 통한 POI 변화 탐지
[242]컴퓨터 비전을 이용한 실내 지도 자동 업데이트 방법: 딥러닝을 통한 POI 변화 탐지NAVER D2
 
[212]C3, 데이터 처리에서 서빙까지 가능한 하둡 클러스터
[212]C3, 데이터 처리에서 서빙까지 가능한 하둡 클러스터[212]C3, 데이터 처리에서 서빙까지 가능한 하둡 클러스터
[212]C3, 데이터 처리에서 서빙까지 가능한 하둡 클러스터NAVER D2
 
[223]기계독해 QA: 검색인가, NLP인가?
[223]기계독해 QA: 검색인가, NLP인가?[223]기계독해 QA: 검색인가, NLP인가?
[223]기계독해 QA: 검색인가, NLP인가?NAVER D2
 

More from NAVER D2 (20)

[211] 인공지능이 인공지능 챗봇을 만든다
[211] 인공지능이 인공지능 챗봇을 만든다[211] 인공지능이 인공지능 챗봇을 만든다
[211] 인공지능이 인공지능 챗봇을 만든다
 
[233] 대형 컨테이너 클러스터에서의 고가용성 Network Load Balancing: Maglev Hashing Scheduler i...
[233] 대형 컨테이너 클러스터에서의 고가용성 Network Load Balancing: Maglev Hashing Scheduler i...[233] 대형 컨테이너 클러스터에서의 고가용성 Network Load Balancing: Maglev Hashing Scheduler i...
[233] 대형 컨테이너 클러스터에서의 고가용성 Network Load Balancing: Maglev Hashing Scheduler i...
 
[215] Druid로 쉽고 빠르게 데이터 분석하기
[215] Druid로 쉽고 빠르게 데이터 분석하기[215] Druid로 쉽고 빠르게 데이터 분석하기
[215] Druid로 쉽고 빠르게 데이터 분석하기
 
[245]Papago Internals: 모델분석과 응용기술 개발
[245]Papago Internals: 모델분석과 응용기술 개발[245]Papago Internals: 모델분석과 응용기술 개발
[245]Papago Internals: 모델분석과 응용기술 개발
 
[236] 스트림 저장소 최적화 이야기: 아파치 드루이드로부터 얻은 교훈
[236] 스트림 저장소 최적화 이야기: 아파치 드루이드로부터 얻은 교훈[236] 스트림 저장소 최적화 이야기: 아파치 드루이드로부터 얻은 교훈
[236] 스트림 저장소 최적화 이야기: 아파치 드루이드로부터 얻은 교훈
 
[235]Wikipedia-scale Q&A
[235]Wikipedia-scale Q&A[235]Wikipedia-scale Q&A
[235]Wikipedia-scale Q&A
 
[244]로봇이 현실 세계에 대해 학습하도록 만들기
[244]로봇이 현실 세계에 대해 학습하도록 만들기[244]로봇이 현실 세계에 대해 학습하도록 만들기
[244]로봇이 현실 세계에 대해 학습하도록 만들기
 
[243] Deep Learning to help student’s Deep Learning
[243] Deep Learning to help student’s Deep Learning[243] Deep Learning to help student’s Deep Learning
[243] Deep Learning to help student’s Deep Learning
 
[234]Fast & Accurate Data Annotation Pipeline for AI applications
[234]Fast & Accurate Data Annotation Pipeline for AI applications[234]Fast & Accurate Data Annotation Pipeline for AI applications
[234]Fast & Accurate Data Annotation Pipeline for AI applications
 
Old version: [233]대형 컨테이너 클러스터에서의 고가용성 Network Load Balancing
Old version: [233]대형 컨테이너 클러스터에서의 고가용성 Network Load BalancingOld version: [233]대형 컨테이너 클러스터에서의 고가용성 Network Load Balancing
Old version: [233]대형 컨테이너 클러스터에서의 고가용성 Network Load Balancing
 
[226]NAVER 광고 deep click prediction: 모델링부터 서빙까지
[226]NAVER 광고 deep click prediction: 모델링부터 서빙까지[226]NAVER 광고 deep click prediction: 모델링부터 서빙까지
[226]NAVER 광고 deep click prediction: 모델링부터 서빙까지
 
[225]NSML: 머신러닝 플랫폼 서비스하기 & 모델 튜닝 자동화하기
[225]NSML: 머신러닝 플랫폼 서비스하기 & 모델 튜닝 자동화하기[225]NSML: 머신러닝 플랫폼 서비스하기 & 모델 튜닝 자동화하기
[225]NSML: 머신러닝 플랫폼 서비스하기 & 모델 튜닝 자동화하기
 
[224]네이버 검색과 개인화
[224]네이버 검색과 개인화[224]네이버 검색과 개인화
[224]네이버 검색과 개인화
 
[216]Search Reliability Engineering (부제: 지진에도 흔들리지 않는 네이버 검색시스템)
[216]Search Reliability Engineering (부제: 지진에도 흔들리지 않는 네이버 검색시스템)[216]Search Reliability Engineering (부제: 지진에도 흔들리지 않는 네이버 검색시스템)
[216]Search Reliability Engineering (부제: 지진에도 흔들리지 않는 네이버 검색시스템)
 
[214] Ai Serving Platform: 하루 수 억 건의 인퍼런스를 처리하기 위한 고군분투기
[214] Ai Serving Platform: 하루 수 억 건의 인퍼런스를 처리하기 위한 고군분투기[214] Ai Serving Platform: 하루 수 억 건의 인퍼런스를 처리하기 위한 고군분투기
[214] Ai Serving Platform: 하루 수 억 건의 인퍼런스를 처리하기 위한 고군분투기
 
[213] Fashion Visual Search
[213] Fashion Visual Search[213] Fashion Visual Search
[213] Fashion Visual Search
 
[232] TensorRT를 활용한 딥러닝 Inference 최적화
[232] TensorRT를 활용한 딥러닝 Inference 최적화[232] TensorRT를 활용한 딥러닝 Inference 최적화
[232] TensorRT를 활용한 딥러닝 Inference 최적화
 
[242]컴퓨터 비전을 이용한 실내 지도 자동 업데이트 방법: 딥러닝을 통한 POI 변화 탐지
[242]컴퓨터 비전을 이용한 실내 지도 자동 업데이트 방법: 딥러닝을 통한 POI 변화 탐지[242]컴퓨터 비전을 이용한 실내 지도 자동 업데이트 방법: 딥러닝을 통한 POI 변화 탐지
[242]컴퓨터 비전을 이용한 실내 지도 자동 업데이트 방법: 딥러닝을 통한 POI 변화 탐지
 
[212]C3, 데이터 처리에서 서빙까지 가능한 하둡 클러스터
[212]C3, 데이터 처리에서 서빙까지 가능한 하둡 클러스터[212]C3, 데이터 처리에서 서빙까지 가능한 하둡 클러스터
[212]C3, 데이터 처리에서 서빙까지 가능한 하둡 클러스터
 
[223]기계독해 QA: 검색인가, NLP인가?
[223]기계독해 QA: 검색인가, NLP인가?[223]기계독해 QA: 검색인가, NLP인가?
[223]기계독해 QA: 검색인가, NLP인가?
 

[112]rest에서 graph ql과 relay로 갈아타기 이정우

  • 2. 목차 1. REST API - Status Quo & Limitations 2. GraphQL - How it replaces REST 3. Relay - Data fetching and management
  • 4. 1. REST API 소개 리소스를 URI로 표현 GET, POST, PUT, DELETE 활용 웹 개발 아키텍처
  • 5. 1. REST API 소개 GET /api/users/ 유저 리스트 가져오기 GET /api/users/1/ 유저 1을 가져오기 POST /api/users/ 유저 생성하기 PUT /api/users/1/ 유저 1를 수정하기 DELETE /api/users/1/ 유저1를 삭제하기 예제
  • 6. 1. REST API 현황 GET /api/users/를 했으면 결과 값은 어떻게 돌려줘야하나? HTTP Response
  • 7. https://api.twitter.com/1.1/lists/me mbers.json 1. REST API 현황 Twitter 방식 https://dev.twitter.com/rest/reference/get/lists/members
  • 8. https://api.github.com/repos/octocat/Hello- World/issues/ 1. REST API 현황 Github 방식 https://developer.github.com/v3/issues/
  • 9. https://openapi.naver.com/blog/list Category.json 1. REST API 현황 Naver 방식 https://developers.naver.com/docs/blog/post
  • 10. 1. REST API 현황 사실상 각자 제멋대로… 추가 함수는? POST Response? 필터는? 정렬은? 페이지네이션 은?
  • 11. 1. REST API 현황 그래도 그나마 쓸만한… http://jsonapi.org/
  • 12. 1. REST API 현황 • Relationship 가져오기? ✓ • 부분 필드만 가져오기? ✓ • 필터 적용방법? ✓ • 정렬하기? ✓ • 페이지네이션? ✓ • POST Response? ✓ • 깃허브에 별 갯수? ✓
  • 13. 1. REST API 한계 필드 제한 (Sparse Fieldset)
  • 14. 모든 필드 전부다 가져와야 하나? 접근 권한이 없는 필드는 가져오지 말아야 하나? Admin과 일반 유저가 기본적으로 가져오는 필드가 다르나? 1. REST API 한계 필드 제한 (Sparse Fieldset)
  • 15. 1. REST API 한계 유저 1의 모든 필드를 가져오고 싶지만 그가 팔로우하는 유저들의 username, email만 가져오고 싶은데… 결과: 모든 유저의 username과 email을 가져옴 필드 제한 (Sparse Fieldset)
  • 16. 1. REST API 한계 필드 타입
  • 17. 1. REST API 한계 POST /payments/ 를 하니 유저 1의 credit이 변경되었다. 그런데 클라이언트에서 이미 유저 1를 불러왔으며 credit값이 아직 동기화 되지 않 았다. - POST Response에 만들어진 payment와 같이 변경된 유저도 가져오기? - GET /users/1/ 로 한번 더 불러오기? Side Effect
  • 18. 1. REST API 한계 실제사례: - 요청의 저자, 예약, 예약한 에디터, 교정본, 교정본 에디터, 그리고 교정본 리뷰를 가져오기 - 더불어 각자 필드마다 가져올 수 있는 필드 제한하기 GET /drafts/? include=author,reservation.editor,revision.editor,revision.review&fields[draft]=cate gory,title,content,message,word_count,time_limit,point,status,created_at&fields[us er]=picture_url,profile_path,username,is_following,is_blocking,college,workplace Query Hell
  • 19. 1. REST API 한계 • RESTful과 JSON API는 프로토콜이지 쓸만한 라이브러리가 없다. • 결국 직접 구현해서 사용... jsonapi.js • 서버의 모든 endpoint에서 JSON API에 맞게 답변을 해줘야한다. • 클라이언트에서도 데이터를 받아서 Store에 보관해야한다. • 비즈니스 로직 짜기도 바쁜데 라이브러리 관리까지?? 라이브러리 부족
  • 20.
  • 24. 2. GraphQL 소개 쿼리 언어 쿼리를 부르 면 Data가 json으 로
  • 25. 2. GraphQL 소개 쿼리 언어 - Arguments - Alias - Fragment - Variables 자세한 설명은 공식 문서 참조
  • 26. 2. REST와 GraphQL 비교하기 Different Request REST의 URI는 GraphQL 쿼리로 좀 더 간결하게 표현 가능
  • 27. 2. REST와 GraphQL 비교하기 GET /drafts/? include=author,reservation.editor,revision.editor,revision.review&fields[draft]=cate gory,title,content,message,word_count,time_limit,point,status,created_at&fields[us er]=picture_url,profile_path,username,is_following,is_blocking,college,workplace
  • 28. 2. REST와 GraphQL 비교하기
  • 29. 2. REST와 GraphQL 비교하기 Different Methods GET → Query POST, PUT, DELETE → Mutation
  • 30. 2. GraphQL 구현 예제 Schema Definition Type System으로 Schema를 정 의 query와 mutation은 entry point
  • 31. 2. GraphQL 구현 예제 GraphQLObjectType GraphQLObjectType의 fields를 정 의 필드엔 type, args, resolve
  • 32. 2. GraphQL 구현 예제 Arguments & Resolve method userType을 정의하고 필드의 타입을 userType으로 정의함
  • 33. 2. GraphQL 구현 예제 Mutation Mutation 또한 args와 resolve 사용
  • 34. 2. GraphQL 구현 예제 Express-GraphQL schema를 express서버에 달아두면 완료!
  • 35. 2. GraphQL 구현 예제 Lokka - GraphQL client
  • 36. 2. GraphQL 구현 예제 GraphiQL 자동 문서화와 Type Inspection이 가능한 강력한 툴
  • 37. React (2013) GraphQL (2015) Relay (2015)
  • 38.
  • 40. 3. Relay • Node • Connection • React Relay • Mutation Config Relay가 GraphQL에서 확장하는 컨셉
  • 41. 3. Relay 소개 Resource에 대한 단일 Interface Data management면에서 유리함. Node
  • 42. 3. Relay 소개 id로 Resource를 가져옴 Node
  • 43. 3. Relay 소개 하지만 String만으로는 어떤 Resource인지 알기 힘들어서 type과 id가 합쳐진 GlobalId를 사 용 Node
  • 44. 3. Relay 소개 다수의 Node를 가져올때 사용 pagination에 특화되있음 Connection
  • 45. 3. React Relay 데이터 의존성과 React 컴포넌트가 공존한다
  • 46. 3. React Relay <EditorCard /> <EditorInfo /> <EditorStat />
  • 48. 3. React Relay <EditorCard /> <EditorInfo /> <EditorStat />
  • 51. 3. Mutation in Relay Mutation의 Side Effect를 적용시키는 방식을 Config에 명시하면 클라이언트에 적절하게 반영 예제) 이미 불러온 Node의 값을 업데이트 기존에 불러온 Connection에 추가/제거 Mutation Config
  • 52. 3. REST에서 GraphQL Relay로 갈아타기 GET, POST, PUT, DELETE으로 모든 것을 해결해야 함 → 데이터 가져올땐 query (node, connections, 등) 사용, 변경할땐 mutation 사 용 기본값으로 어떤걸 불러올지 정하기가 애매함 → 항상 데이터 의존성을 명시 필드 타입이 정해져 있지 않아서 따로 문서화를 하지 않으면 협업이 힘듬 → GraphQL은 타입이 정해져 있고 프로토콜 단에서 확인할 수 있음 (Introspection) Summary
  • 53. 3. REST에서 GraphQL Relay로 갈아타기 데이터 의존성을 URI 에 명세하려면 복잡해진다. → 데이터 의존성을 명세한 query / mutation를 보낸다 데이터 변경사항을 클라이언트에서 처리하는 방식이 제각각 → Mutation Config만 잘 써주면 알아서 데이터 변경사항을 처리한다 Summary
  • 54. 3. REST에서 GraphQL Relay로 갈아타기 Data management를 React와 묶어줘서 생산성과 개발 속도가 크게 향상 Query build + Cache로 인하여 성능 향상 지금 존재하는 온라인 문서만으로는 Relay의 진입장벽은 꽤 높은 편 현재 Relay는 실시간 지원이 미비… 현재 GraphQL Relay만으론 안정적인 서비스 구현이 가능… 하지만 아직 실험적인 생태계 Aftermath
  • 55. 3. 관련 링크 관련 링크 http://graphql.org/ - GraphQL 영문 공식 홈페이지 https://facebook.github.io/relay/ - GraphQL Relay 영문 공식 홈페이지 https://facebook.github.io/graphql/ - GraphQL 영문 명세서 https://learngraphql.com/ - GraphQL 영문 튜토리얼 https://github.com/chentsulin/awesome-graphql - GraphQL 리소스 모음집 https://github.com/kriasoft/react-starter-kit - 현재 최강의 boilerplate http://blog.sapzil.org/2015/09/01/graphql-rfc/ - 그나마 찾은 한글 기사
  • 56. Q&A
  • 57. Thank You 이정우 (연사자): jw@ediket.com 이철희 (기술 제공): leechulhee95@gmail.com