손쉬운 모바일 서비스 데이터 처리,
AWS AppSync
김필중 / AWS 솔루션즈 아키텍트
사용자 인증 및 권한
효율적인 네트워크 사용
다양한 기기와 플랫폼
다양한 데이터 저장소데이터 동기화
오프라인 데이터 접근
공유 데이터 저장
실시간 데이터 스트리밍비지니스 로직 실행
사용자 및 자격 증명 공급자 관리
연결 상태가 좋지 않은
상태에서 데이터에 빠르게 접근
여러 기기간 사용자 환경
설정 및 상태 동기화
서버 관리 없이 상태를
저장하지 않는 커스텀 코드 실행
여러 데이터 저장소의 다른 데이터에 접근
네트워크 연결 없이 즉시 데이터에 접근
사용자 및 장치에서 NoSQL 데이터를
빠르게 저장하고 쿼리
실시간 클릭스트림 로그를 수집하고 신속
하게 작업 수행
모바일
애플리케이션
고객이 사용하는 기기와
플랫폼을 지원
충돌 감지 및 해결
클라우드에서 데이터 충돌 감지 및 처리
보통의 접근방법
REST API
Data
GET /search
GET /m_search
POST /taps
GET /taps
GET /taps/:id
GET /taps/:id/status
PUT /taps/:id
ü 간단하고 익숙한 설정
ü 표준 HTTP 호출
✘ 관계
✘ 필요 정보만 포함된 목록
✘ 쿼리 지원
✘ 정렬 및 페이징
✘ 알림
GraphQL이란?
• API를 위한 쿼리 언어
• 데이터에 쿼리를 수행하기 위한 런타임
• 클라이언트와 서버 애플리케이션의 약속된 데이터 형식
전통적인 데이터 추출 GraphQL
/posts
/postInfo
/postJustTitle
/postsByAuthor
/postNameStartsWithX
/commentsOnPost
API를 위한 쿼리 언어
쿼리: 데이터 읽기
변형: 데이터 쓰기
구독: 실시간 데이터 푸시
GraphQL 작동 방식
{
"id": "1",
"name": "Get Milk",
“priority": "1"
},
{
"id": “2",
"name": “Go to gym",
“priority": “5"
},…
type Query {
getTodos: [Todo]
}
type Todo {
id: ID!
name: String
description: String
priority: Int
duedate: String
}
query {
getTodos {
id
name
priority
}
}
데이터 정의 필요한 데이터를 요청 요청한 데이터만 획득
GraphQL 이점
• 신속한 프로토타이핑
• 데이터 요구사항과 뷰를 한 곳에서 수행
• 데이터 제어
• 일괄처리, 요청/응답, 실시간
• 대역폭 최적화 (N+1 문제)
인프라가 아닌 애플리케이션에 집중
AWS AppSync
실시간 기능과 오프라인 프로그래밍 모델을 갖춘 GraphQL을 사용하
여 애플리케이션 데이터를 위한 관리형 서비스
NEW!
AWS AppSync 기능
• 관리형 GraphQL 서비스
• AWS 계정의 리소스에 연결
• 오프라인 지원
• 클라우드에서 데이터 동기화 해결
• 엔터프라이즈 급 보안 기능
• 간단하고 확장 가능한 실시간 동기화
AWS AppSync 작동 방식
스키마 생성 및 업로드
개발자는 콘솔 에디터를 사용하여
GraphQL API를 정의 및 배포하여
애플리케이션이
쿼리, 데이터 변경 및 업데이트를
실시간으로 가능하게 함
데이터 소스 연결
AWS AppSync는
자동으로 데이터 소스와 컴퓨팅
자원들을 프로비저닝하거나,
이미 존재하는 자원들을
GraphQL API에 연결 시킴
AppSync는 데이터를 실시간으로
업데이트하고 오프라인일 때 관리
클라이언트 애플리케이션은
GraphQL API를 호출하여 데이터를
가져오고, 변경을 하며, 모든 사용자 및
기기들로 부터의 변경을 실시간으로 인
지. 오프라인 사용자는 지속적으로 앱
데이터에 접근 및 변경을 할 수 있고, 재
연결 시 변경사항을 가져옴.
개발자들이 겪는 어려움을 해결
데이터 요구사항은
기기에 따라 다양하며
여러 사용자가 데이터를
공유할 때 특히
더 어려움
사용자는
즉시 데이터에
접근하기를 원함
분산 시스템 개념 학습
없이 확장 가능한
데이터 기반
애플리케이션을
구축하는 것은 쉽지 않음
사용자는 연결성이
좋지 않거나
오프라인일 때에도
애플리케이션을 계속
사용하고 싶어함
이미지 및 리치 콘텐츠
type S3Object {
bucket: String!
key: String!
region: String!
}
input S3ObjectInput {
bucket: String!
key: String!
region: String!
localUri: String!
}
type Profile {
name: String!
profilePic: S3Object!
}
type Mutation {
updatePhoto(name: String!,
profilePicInput: S3ObjectInput!): Profile
}
GraphQL 구독: 근 실시간 데이터 업데이트
이벤트 기반 모드, 변형에 의해 트리거됨
- 일반적인 사용 사례를 위해 플랫폼으로 설계된 확장 가능한 모델
AppSync의 모든 데이터 소스와 함께 사용 가능
- Lambda, DynamoDB, Elasticsearch
mutation addPost( id:123
title:”New post!”
author:”Nadia”){
id
title
author
}
data: [{
id:123,
title:”New Post!”
author:”Nadia”
}]
핸드쉐이크 프로세스
subscription NewPostSub {
addedPost {…}
}
Websocket URL 및 연결 정보
Secure Websocket 연결 (wss://)
오프라인 변형
영희
버전 : 2 수정된 문서
영희
버전 : 2 수정된 문서
버전 : 3 수정된 문서
버전 : 1 새로운 문서
시간
철수
철수
오프라인 상태로 되는 영희
온라인 상태로 되는 영희
버전 : 4 수정된 문서
철수
영희
충돌 해결 및 동기화
클라우드에서의 충돌 해결
1. 서버 우선
2. 커스텀 로직 (AWS Lambda)
선택사항
- 만약을 위해 추가적인 콜백을 통해
클라이언트에서 충돌 해결을 처리할
수 있음
{
"version" : "2017-02-28",
"operation" : "PutItem",
"key" : {
"id" : { "S" : "1" }
},
"condition" : {
"expression" : "attribute_not_exists(id)"
}
}
예제: ID가 이미 존재하는지 확인:
"condition" : {
"expression" : "someExpression"
"conditionalCheckFailedHandler" : {
"strategy" : "Custom",
"lambdaArn" : "arn:..."
}
}
버전이 틀린 경우 Lambda를 실행:
서비스 요금
• 프리 티어는 AWS 계정에 가입한 후 12개월 동안 명시된
사용량을 무료로 제공
• 데이터 전송 및 데이터베이스 비용 추가 발생
• 최신 가격은 AWS 가격 페이지를 참조
프리 티어 가격
쿼리 및 데이터 수정 작업 250,000 $4 / 1백만 건
실시간 업데이트 250,000 $2 / 1백만 건
실시간 연결 600,000 $0.08 / 1백만 분
* 2018년 1월 18일 US 기준
서비스 요금
• 2,500 명의 월별 활성 사용자를 있는 채팅 애플리케이션
• 월별 평균 사용자 연결 시간: 1,500 분
• 월별 1,000 메시지 전송 및 1,000 메시지 수신
• 월별 250만 쿼리와 250만 실시간 업데이트
데이터 수정 작업 2500 (명) x 1,000 (메시지 전송) * $4 (1백만 건당) = $10.00
실시간 업데이트 2,500 (명) * 1,000 (메시지 수신) * $2 (1백만 건당) = $5.00
실시간 연결 2,500 x 1,500 x $0.08/1백만 = $0.30
데이터 전송 1KB x 2.5 (백만) = 2.4GB x $0.09 = $0.21
DynamoDB 데이터베이스 프리 티어 (25Gb 보다 작은 크기일때에만)
총액 $15.51
AWS AppSync 이점
• 클라이언트는 요청하는 데이터만 수신
• 단일 요청으로 다양한 데이터 소스에서 다양한 자원을 조회
• 인트로스펙션과 자체 문서화 API
• 강타입(strong type) 시스템
• 보다 강력한 개발자 도구
• 더 간단한 API 사용방법
• 개방형 표준을 사용하여 쉽게 확장 및 통합
• 저렴한 비용
AWS AppSync 적용
실시간 애플리케이션
- 대시보드
- 리더보드
- 필드 서비스 앱
채팅 애플리케이션 복잡한 데이터 구조
및 유형이 있는
애플리케이션
지리정보
애플리케이션
본 강연이 끝난 후…
1. 프리뷰 가입
• https://aws.amazon.com/appsync/
2. 사용해 보기
• https://github.com/aws-samples/aws-mobile-appsync-
events-starter-ios
• https://github.com/aws-samples/aws-mobile-appsync-
events-starter-react-native
• https://github.com/awslabs/aws-mobile-appsync-sdk-js
감사합니다

AWS CLOUD 2018- 손쉬운 모바일 서비스 데이터 처리, AWS AppSync  (김필중 솔루션즈 아키텍트)

  • 1.
    손쉬운 모바일 서비스데이터 처리, AWS AppSync 김필중 / AWS 솔루션즈 아키텍트
  • 2.
    사용자 인증 및권한 효율적인 네트워크 사용 다양한 기기와 플랫폼 다양한 데이터 저장소데이터 동기화 오프라인 데이터 접근 공유 데이터 저장 실시간 데이터 스트리밍비지니스 로직 실행 사용자 및 자격 증명 공급자 관리 연결 상태가 좋지 않은 상태에서 데이터에 빠르게 접근 여러 기기간 사용자 환경 설정 및 상태 동기화 서버 관리 없이 상태를 저장하지 않는 커스텀 코드 실행 여러 데이터 저장소의 다른 데이터에 접근 네트워크 연결 없이 즉시 데이터에 접근 사용자 및 장치에서 NoSQL 데이터를 빠르게 저장하고 쿼리 실시간 클릭스트림 로그를 수집하고 신속 하게 작업 수행 모바일 애플리케이션 고객이 사용하는 기기와 플랫폼을 지원 충돌 감지 및 해결 클라우드에서 데이터 충돌 감지 및 처리
  • 3.
  • 4.
    REST API Data GET /search GET/m_search POST /taps GET /taps GET /taps/:id GET /taps/:id/status PUT /taps/:id ü 간단하고 익숙한 설정 ü 표준 HTTP 호출 ✘ 관계 ✘ 필요 정보만 포함된 목록 ✘ 쿼리 지원 ✘ 정렬 및 페이징 ✘ 알림
  • 5.
    GraphQL이란? • API를 위한쿼리 언어 • 데이터에 쿼리를 수행하기 위한 런타임 • 클라이언트와 서버 애플리케이션의 약속된 데이터 형식 전통적인 데이터 추출 GraphQL /posts /postInfo /postJustTitle /postsByAuthor /postNameStartsWithX /commentsOnPost
  • 6.
    API를 위한 쿼리언어 쿼리: 데이터 읽기 변형: 데이터 쓰기 구독: 실시간 데이터 푸시
  • 7.
    GraphQL 작동 방식 { "id":"1", "name": "Get Milk", “priority": "1" }, { "id": “2", "name": “Go to gym", “priority": “5" },… type Query { getTodos: [Todo] } type Todo { id: ID! name: String description: String priority: Int duedate: String } query { getTodos { id name priority } } 데이터 정의 필요한 데이터를 요청 요청한 데이터만 획득
  • 8.
    GraphQL 이점 • 신속한프로토타이핑 • 데이터 요구사항과 뷰를 한 곳에서 수행 • 데이터 제어 • 일괄처리, 요청/응답, 실시간 • 대역폭 최적화 (N+1 문제)
  • 9.
  • 10.
    AWS AppSync 실시간 기능과오프라인 프로그래밍 모델을 갖춘 GraphQL을 사용하 여 애플리케이션 데이터를 위한 관리형 서비스 NEW!
  • 11.
    AWS AppSync 기능 •관리형 GraphQL 서비스 • AWS 계정의 리소스에 연결 • 오프라인 지원 • 클라우드에서 데이터 동기화 해결 • 엔터프라이즈 급 보안 기능 • 간단하고 확장 가능한 실시간 동기화
  • 12.
    AWS AppSync 작동방식 스키마 생성 및 업로드 개발자는 콘솔 에디터를 사용하여 GraphQL API를 정의 및 배포하여 애플리케이션이 쿼리, 데이터 변경 및 업데이트를 실시간으로 가능하게 함 데이터 소스 연결 AWS AppSync는 자동으로 데이터 소스와 컴퓨팅 자원들을 프로비저닝하거나, 이미 존재하는 자원들을 GraphQL API에 연결 시킴 AppSync는 데이터를 실시간으로 업데이트하고 오프라인일 때 관리 클라이언트 애플리케이션은 GraphQL API를 호출하여 데이터를 가져오고, 변경을 하며, 모든 사용자 및 기기들로 부터의 변경을 실시간으로 인 지. 오프라인 사용자는 지속적으로 앱 데이터에 접근 및 변경을 할 수 있고, 재 연결 시 변경사항을 가져옴.
  • 13.
    개발자들이 겪는 어려움을해결 데이터 요구사항은 기기에 따라 다양하며 여러 사용자가 데이터를 공유할 때 특히 더 어려움 사용자는 즉시 데이터에 접근하기를 원함 분산 시스템 개념 학습 없이 확장 가능한 데이터 기반 애플리케이션을 구축하는 것은 쉽지 않음 사용자는 연결성이 좋지 않거나 오프라인일 때에도 애플리케이션을 계속 사용하고 싶어함
  • 18.
    이미지 및 리치콘텐츠 type S3Object { bucket: String! key: String! region: String! } input S3ObjectInput { bucket: String! key: String! region: String! localUri: String! } type Profile { name: String! profilePic: S3Object! } type Mutation { updatePhoto(name: String!, profilePicInput: S3ObjectInput!): Profile }
  • 19.
    GraphQL 구독: 근실시간 데이터 업데이트 이벤트 기반 모드, 변형에 의해 트리거됨 - 일반적인 사용 사례를 위해 플랫폼으로 설계된 확장 가능한 모델 AppSync의 모든 데이터 소스와 함께 사용 가능 - Lambda, DynamoDB, Elasticsearch mutation addPost( id:123 title:”New post!” author:”Nadia”){ id title author } data: [{ id:123, title:”New Post!” author:”Nadia” }]
  • 20.
    핸드쉐이크 프로세스 subscription NewPostSub{ addedPost {…} } Websocket URL 및 연결 정보 Secure Websocket 연결 (wss://)
  • 21.
    오프라인 변형 영희 버전 :2 수정된 문서 영희 버전 : 2 수정된 문서 버전 : 3 수정된 문서 버전 : 1 새로운 문서 시간 철수 철수 오프라인 상태로 되는 영희 온라인 상태로 되는 영희 버전 : 4 수정된 문서 철수 영희
  • 22.
    충돌 해결 및동기화 클라우드에서의 충돌 해결 1. 서버 우선 2. 커스텀 로직 (AWS Lambda) 선택사항 - 만약을 위해 추가적인 콜백을 통해 클라이언트에서 충돌 해결을 처리할 수 있음 { "version" : "2017-02-28", "operation" : "PutItem", "key" : { "id" : { "S" : "1" } }, "condition" : { "expression" : "attribute_not_exists(id)" } } 예제: ID가 이미 존재하는지 확인: "condition" : { "expression" : "someExpression" "conditionalCheckFailedHandler" : { "strategy" : "Custom", "lambdaArn" : "arn:..." } } 버전이 틀린 경우 Lambda를 실행:
  • 26.
    서비스 요금 • 프리티어는 AWS 계정에 가입한 후 12개월 동안 명시된 사용량을 무료로 제공 • 데이터 전송 및 데이터베이스 비용 추가 발생 • 최신 가격은 AWS 가격 페이지를 참조 프리 티어 가격 쿼리 및 데이터 수정 작업 250,000 $4 / 1백만 건 실시간 업데이트 250,000 $2 / 1백만 건 실시간 연결 600,000 $0.08 / 1백만 분 * 2018년 1월 18일 US 기준
  • 27.
    서비스 요금 • 2,500명의 월별 활성 사용자를 있는 채팅 애플리케이션 • 월별 평균 사용자 연결 시간: 1,500 분 • 월별 1,000 메시지 전송 및 1,000 메시지 수신 • 월별 250만 쿼리와 250만 실시간 업데이트 데이터 수정 작업 2500 (명) x 1,000 (메시지 전송) * $4 (1백만 건당) = $10.00 실시간 업데이트 2,500 (명) * 1,000 (메시지 수신) * $2 (1백만 건당) = $5.00 실시간 연결 2,500 x 1,500 x $0.08/1백만 = $0.30 데이터 전송 1KB x 2.5 (백만) = 2.4GB x $0.09 = $0.21 DynamoDB 데이터베이스 프리 티어 (25Gb 보다 작은 크기일때에만) 총액 $15.51
  • 28.
    AWS AppSync 이점 •클라이언트는 요청하는 데이터만 수신 • 단일 요청으로 다양한 데이터 소스에서 다양한 자원을 조회 • 인트로스펙션과 자체 문서화 API • 강타입(strong type) 시스템 • 보다 강력한 개발자 도구 • 더 간단한 API 사용방법 • 개방형 표준을 사용하여 쉽게 확장 및 통합 • 저렴한 비용
  • 29.
    AWS AppSync 적용 실시간애플리케이션 - 대시보드 - 리더보드 - 필드 서비스 앱 채팅 애플리케이션 복잡한 데이터 구조 및 유형이 있는 애플리케이션 지리정보 애플리케이션
  • 30.
    본 강연이 끝난후… 1. 프리뷰 가입 • https://aws.amazon.com/appsync/ 2. 사용해 보기 • https://github.com/aws-samples/aws-mobile-appsync- events-starter-ios • https://github.com/aws-samples/aws-mobile-appsync- events-starter-react-native • https://github.com/awslabs/aws-mobile-appsync-sdk-js
  • 31.