SlideShare une entreprise Scribd logo
1  sur  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

Contenu connexe

Tendances

Kubernetes #1 intro
Kubernetes #1   introKubernetes #1   intro
Kubernetes #1 introTerry Cho
 
AWS로 사용자 천만 명 서비스 만들기 (윤석찬)- 클라우드 태권 2015
AWS로 사용자 천만 명 서비스 만들기 (윤석찬)- 클라우드 태권 2015 AWS로 사용자 천만 명 서비스 만들기 (윤석찬)- 클라우드 태권 2015
AWS로 사용자 천만 명 서비스 만들기 (윤석찬)- 클라우드 태권 2015 Amazon Web Services Korea
 
[NDC 2018] Spark, Flintrock, Airflow 로 구현하는 탄력적이고 유연한 데이터 분산처리 자동화 인프라 구축
[NDC 2018] Spark, Flintrock, Airflow 로 구현하는 탄력적이고 유연한 데이터 분산처리 자동화 인프라 구축[NDC 2018] Spark, Flintrock, Airflow 로 구현하는 탄력적이고 유연한 데이터 분산처리 자동화 인프라 구축
[NDC 2018] Spark, Flintrock, Airflow 로 구현하는 탄력적이고 유연한 데이터 분산처리 자동화 인프라 구축Juhong Park
 
Amazon EKS로 간단한 웹 애플리케이션 구축하기 - 김주영 (AWS) :: AWS Community Day Online 2021
Amazon EKS로 간단한 웹 애플리케이션 구축하기 - 김주영 (AWS) :: AWS Community Day Online 2021Amazon EKS로 간단한 웹 애플리케이션 구축하기 - 김주영 (AWS) :: AWS Community Day Online 2021
Amazon EKS로 간단한 웹 애플리케이션 구축하기 - 김주영 (AWS) :: AWS Community Day Online 2021AWSKRUG - AWS한국사용자모임
 
Bigquery와 airflow를 이용한 데이터 분석 시스템 구축 v1 나무기술(주) 최유석 20170912
Bigquery와 airflow를 이용한 데이터 분석 시스템 구축 v1  나무기술(주) 최유석 20170912Bigquery와 airflow를 이용한 데이터 분석 시스템 구축 v1  나무기술(주) 최유석 20170912
Bigquery와 airflow를 이용한 데이터 분석 시스템 구축 v1 나무기술(주) 최유석 20170912Yooseok Choi
 
이벤트 기반 분산 시스템을 향한 여정
이벤트 기반 분산 시스템을 향한 여정이벤트 기반 분산 시스템을 향한 여정
이벤트 기반 분산 시스템을 향한 여정Arawn Park
 
MSA ( Microservices Architecture ) 발표 자료 다운로드
MSA ( Microservices Architecture ) 발표 자료 다운로드MSA ( Microservices Architecture ) 발표 자료 다운로드
MSA ( Microservices Architecture ) 발표 자료 다운로드Opennaru, inc.
 
React + Redux Introduction
React + Redux IntroductionReact + Redux Introduction
React + Redux IntroductionNikolaus Graf
 
Introduction to Redis
Introduction to RedisIntroduction to Redis
Introduction to RedisArnab Mitra
 
elasticsearch_적용 및 활용_정리
elasticsearch_적용 및 활용_정리elasticsearch_적용 및 활용_정리
elasticsearch_적용 및 활용_정리Junyi Song
 
게임서비스를 위한 ElastiCache 활용 전략 :: 구승모 솔루션즈 아키텍트 :: Gaming on AWS 2016
게임서비스를 위한 ElastiCache 활용 전략 :: 구승모 솔루션즈 아키텍트 :: Gaming on AWS 2016게임서비스를 위한 ElastiCache 활용 전략 :: 구승모 솔루션즈 아키텍트 :: Gaming on AWS 2016
게임서비스를 위한 ElastiCache 활용 전략 :: 구승모 솔루션즈 아키텍트 :: Gaming on AWS 2016Amazon Web Services Korea
 
Elastic stack Presentation
Elastic stack PresentationElastic stack Presentation
Elastic stack PresentationAmr Alaa Yassen
 
카카오 광고 플랫폼 MSA 적용 사례 및 API Gateway와 인증 구현에 대한 소개
카카오 광고 플랫폼 MSA 적용 사례 및 API Gateway와 인증 구현에 대한 소개카카오 광고 플랫폼 MSA 적용 사례 및 API Gateway와 인증 구현에 대한 소개
카카오 광고 플랫폼 MSA 적용 사례 및 API Gateway와 인증 구현에 대한 소개if kakao
 
[236] 카카오의데이터파이프라인 윤도영
[236] 카카오의데이터파이프라인 윤도영[236] 카카오의데이터파이프라인 윤도영
[236] 카카오의데이터파이프라인 윤도영NAVER D2
 
마이크로서비스를 위한 AWS 아키텍처 패턴 및 모범 사례 - AWS Summit Seoul 2017
마이크로서비스를 위한 AWS 아키텍처 패턴 및 모범 사례 - AWS Summit Seoul 2017마이크로서비스를 위한 AWS 아키텍처 패턴 및 모범 사례 - AWS Summit Seoul 2017
마이크로서비스를 위한 AWS 아키텍처 패턴 및 모범 사례 - AWS Summit Seoul 2017Amazon Web Services Korea
 
Amazon EKS를 통한 빠르고 편리한 컨테이너 플랫폼 활용 – 이일구 AWS 솔루션즈 아키텍트:: AWS Cloud Week - Ind...
Amazon EKS를 통한 빠르고 편리한 컨테이너 플랫폼 활용 – 이일구 AWS 솔루션즈 아키텍트:: AWS Cloud Week - Ind...Amazon EKS를 통한 빠르고 편리한 컨테이너 플랫폼 활용 – 이일구 AWS 솔루션즈 아키텍트:: AWS Cloud Week - Ind...
Amazon EKS를 통한 빠르고 편리한 컨테이너 플랫폼 활용 – 이일구 AWS 솔루션즈 아키텍트:: AWS Cloud Week - Ind...Amazon Web Services Korea
 
Sonatype nexus 로 docker registry 관리하기
Sonatype nexus 로 docker registry 관리하기Sonatype nexus 로 docker registry 관리하기
Sonatype nexus 로 docker registry 관리하기KwangSeob Jeong
 
4. 대용량 아키텍쳐 설계 패턴
4. 대용량 아키텍쳐 설계 패턴4. 대용량 아키텍쳐 설계 패턴
4. 대용량 아키텍쳐 설계 패턴Terry Cho
 
스타트업 나홀로 데이터 엔지니어: 데이터 분석 환경 구축기 - 천지은 (Tappytoon) :: AWS Community Day Onlin...
스타트업 나홀로 데이터 엔지니어: 데이터 분석 환경 구축기 - 천지은 (Tappytoon) :: AWS Community Day Onlin...스타트업 나홀로 데이터 엔지니어: 데이터 분석 환경 구축기 - 천지은 (Tappytoon) :: AWS Community Day Onlin...
스타트업 나홀로 데이터 엔지니어: 데이터 분석 환경 구축기 - 천지은 (Tappytoon) :: AWS Community Day Onlin...AWSKRUG - AWS한국사용자모임
 

Tendances (20)

Kubernetes #1 intro
Kubernetes #1   introKubernetes #1   intro
Kubernetes #1 intro
 
AWS로 사용자 천만 명 서비스 만들기 (윤석찬)- 클라우드 태권 2015
AWS로 사용자 천만 명 서비스 만들기 (윤석찬)- 클라우드 태권 2015 AWS로 사용자 천만 명 서비스 만들기 (윤석찬)- 클라우드 태권 2015
AWS로 사용자 천만 명 서비스 만들기 (윤석찬)- 클라우드 태권 2015
 
[NDC 2018] Spark, Flintrock, Airflow 로 구현하는 탄력적이고 유연한 데이터 분산처리 자동화 인프라 구축
[NDC 2018] Spark, Flintrock, Airflow 로 구현하는 탄력적이고 유연한 데이터 분산처리 자동화 인프라 구축[NDC 2018] Spark, Flintrock, Airflow 로 구현하는 탄력적이고 유연한 데이터 분산처리 자동화 인프라 구축
[NDC 2018] Spark, Flintrock, Airflow 로 구현하는 탄력적이고 유연한 데이터 분산처리 자동화 인프라 구축
 
Amazon EKS로 간단한 웹 애플리케이션 구축하기 - 김주영 (AWS) :: AWS Community Day Online 2021
Amazon EKS로 간단한 웹 애플리케이션 구축하기 - 김주영 (AWS) :: AWS Community Day Online 2021Amazon EKS로 간단한 웹 애플리케이션 구축하기 - 김주영 (AWS) :: AWS Community Day Online 2021
Amazon EKS로 간단한 웹 애플리케이션 구축하기 - 김주영 (AWS) :: AWS Community Day Online 2021
 
Bigquery와 airflow를 이용한 데이터 분석 시스템 구축 v1 나무기술(주) 최유석 20170912
Bigquery와 airflow를 이용한 데이터 분석 시스템 구축 v1  나무기술(주) 최유석 20170912Bigquery와 airflow를 이용한 데이터 분석 시스템 구축 v1  나무기술(주) 최유석 20170912
Bigquery와 airflow를 이용한 데이터 분석 시스템 구축 v1 나무기술(주) 최유석 20170912
 
이벤트 기반 분산 시스템을 향한 여정
이벤트 기반 분산 시스템을 향한 여정이벤트 기반 분산 시스템을 향한 여정
이벤트 기반 분산 시스템을 향한 여정
 
MSA ( Microservices Architecture ) 발표 자료 다운로드
MSA ( Microservices Architecture ) 발표 자료 다운로드MSA ( Microservices Architecture ) 발표 자료 다운로드
MSA ( Microservices Architecture ) 발표 자료 다운로드
 
React + Redux Introduction
React + Redux IntroductionReact + Redux Introduction
React + Redux Introduction
 
Introduction to Redis
Introduction to RedisIntroduction to Redis
Introduction to Redis
 
elasticsearch_적용 및 활용_정리
elasticsearch_적용 및 활용_정리elasticsearch_적용 및 활용_정리
elasticsearch_적용 및 활용_정리
 
게임서비스를 위한 ElastiCache 활용 전략 :: 구승모 솔루션즈 아키텍트 :: Gaming on AWS 2016
게임서비스를 위한 ElastiCache 활용 전략 :: 구승모 솔루션즈 아키텍트 :: Gaming on AWS 2016게임서비스를 위한 ElastiCache 활용 전략 :: 구승모 솔루션즈 아키텍트 :: Gaming on AWS 2016
게임서비스를 위한 ElastiCache 활용 전략 :: 구승모 솔루션즈 아키텍트 :: Gaming on AWS 2016
 
Elastic stack Presentation
Elastic stack PresentationElastic stack Presentation
Elastic stack Presentation
 
카카오 광고 플랫폼 MSA 적용 사례 및 API Gateway와 인증 구현에 대한 소개
카카오 광고 플랫폼 MSA 적용 사례 및 API Gateway와 인증 구현에 대한 소개카카오 광고 플랫폼 MSA 적용 사례 및 API Gateway와 인증 구현에 대한 소개
카카오 광고 플랫폼 MSA 적용 사례 및 API Gateway와 인증 구현에 대한 소개
 
[236] 카카오의데이터파이프라인 윤도영
[236] 카카오의데이터파이프라인 윤도영[236] 카카오의데이터파이프라인 윤도영
[236] 카카오의데이터파이프라인 윤도영
 
마이크로서비스를 위한 AWS 아키텍처 패턴 및 모범 사례 - AWS Summit Seoul 2017
마이크로서비스를 위한 AWS 아키텍처 패턴 및 모범 사례 - AWS Summit Seoul 2017마이크로서비스를 위한 AWS 아키텍처 패턴 및 모범 사례 - AWS Summit Seoul 2017
마이크로서비스를 위한 AWS 아키텍처 패턴 및 모범 사례 - AWS Summit Seoul 2017
 
Amazon EKS를 통한 빠르고 편리한 컨테이너 플랫폼 활용 – 이일구 AWS 솔루션즈 아키텍트:: AWS Cloud Week - Ind...
Amazon EKS를 통한 빠르고 편리한 컨테이너 플랫폼 활용 – 이일구 AWS 솔루션즈 아키텍트:: AWS Cloud Week - Ind...Amazon EKS를 통한 빠르고 편리한 컨테이너 플랫폼 활용 – 이일구 AWS 솔루션즈 아키텍트:: AWS Cloud Week - Ind...
Amazon EKS를 통한 빠르고 편리한 컨테이너 플랫폼 활용 – 이일구 AWS 솔루션즈 아키텍트:: AWS Cloud Week - Ind...
 
React Hooks
React HooksReact Hooks
React Hooks
 
Sonatype nexus 로 docker registry 관리하기
Sonatype nexus 로 docker registry 관리하기Sonatype nexus 로 docker registry 관리하기
Sonatype nexus 로 docker registry 관리하기
 
4. 대용량 아키텍쳐 설계 패턴
4. 대용량 아키텍쳐 설계 패턴4. 대용량 아키텍쳐 설계 패턴
4. 대용량 아키텍쳐 설계 패턴
 
스타트업 나홀로 데이터 엔지니어: 데이터 분석 환경 구축기 - 천지은 (Tappytoon) :: AWS Community Day Onlin...
스타트업 나홀로 데이터 엔지니어: 데이터 분석 환경 구축기 - 천지은 (Tappytoon) :: AWS Community Day Onlin...스타트업 나홀로 데이터 엔지니어: 데이터 분석 환경 구축기 - 천지은 (Tappytoon) :: AWS Community Day Onlin...
스타트업 나홀로 데이터 엔지니어: 데이터 분석 환경 구축기 - 천지은 (Tappytoon) :: AWS Community Day Onlin...
 

Similaire à [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
 
파이썬 웹 프로그래밍 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
 
Daejeon IT Developer Conference Struts2
Daejeon IT Developer Conference Struts2Daejeon IT Developer Conference Struts2
Daejeon IT Developer Conference Struts2plusperson
 

Similaire à [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
 
파이썬 웹 프로그래밍 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
 
Daejeon IT Developer Conference Struts2
Daejeon IT Developer Conference Struts2Daejeon IT Developer Conference Struts2
Daejeon IT Developer Conference Struts2
 

Plus de 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
 

Plus de 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