효율적 모바일 서비스를 위한 aws 빌딩블럭 - api gateway 및 device farm을...
TRANSCRIPT
효율적 모바일 서비스를 위한 AWS 빌딩 블럭
Amazon API Gateway 및 AWS Device Farm을 중심으로
월간 웨비나 2015년 8월 26일 금요일 | 오후 3시
http://aws.amazon.com/ko
윤석찬, Tech Evangelist http://twitter.com/channyun http://facebook.com/channyblog http://channy.creation.net
User Applica,on
Applica,on Service
Middleware Service
Language Interpreter
Opera,ng System
Host
개발에만 집중하세요! 클라우드컴퓨팅이란?
v Your
Mobile App
사용자 인증
사용자 권한 부여
사용자 행동 분석
미디어의 저장 및 공유
인증정보 단말간 공유
미디어 전송
공유 데이터의 저장
실시간 데이터 스트림 처리
재방문 추적
푸시 알림 전송 모바일앱 요구사항
v
모바일 개발자 가라사대… 직면한 문제점 핵심 UX 만드는데도 시간 증가 효율적 백엔드 API 개발 필요 기기 플랫폼 파편화 앱 테스트 및 운영 비용 증가 사용자에게 줄 핵심 기능 구현 시간 저하
앱개발은 만만한 작업이 아니다!
모바일 앱 코드 사용자 인증 및 관리 사용자 데이터 싱크
비동기 커뮤니케이션 활성 디바이스 분석
사용자 행태 분석 사용자 참여 분석
푸시 노티피케이션 사용자 이벤트 기능처리
플랫폼 독립적 모바일 백엔드 데이터 유효성 및 전송
파일 및 미디어 저장 공유 데이터베이스 스토리지
데이터 수집 기타등등…
v
AWS 가라사대… 모바일 앱 코드
사용자 인증 및 관리 사용자 데이터 싱크
비동기 커뮤니케이션 디바이스 대응
푸시 노티피케이션 사용자 이벤트 기능처리
플랫폼 독립적 모바일 백엔드 데이터 유효성 및 전송
파일 및 미디어 저장 공유 데이터베이스 스토리지
데이터 수집 기타등등…
Amazon Mobile Analytics
Amazon SNS Mobile Push
AWS Lambda
Mobile-optimized Connectors (Amazon Kinesis, Amazon S3, Amazon DynamoDB, Amazon SQS)
Amazon Cognito
v
AWS 가라사대…
모바일 앱 관리 서버 없는 모바일 백엔드
API 개발 및 인증 관리 SDK 생성 및 개발자 지원
앱 자동 테스트 품질 관리 향상
다양한 디바이스 대응 AWS Device Farm
Amazon API Gateway
Amazon Cognito
Amazon Mobile Analytics
Amazon SNS Mobile Push
Amazon Kinesis Recorder
DynamoDB Mapper
S3 Transfer Manager
SQS Client Amazon SES Client
AWS 글로벌 인프라 핵심 서비스
모바일 최적화 커넥터
모바일 최적화 서비스
모바일 앱, 모바일 게임, IoT 디바이스 AWS 모바일 SDK(iOS, Android), API 엔드포인트, AWS 관리 콘솔
컴퓨팅 스토리지 네트워크 데이터 분석 데이터베이스
모바일용 인터페이스
AWS Lambda
Lambda Functions
λ λ λ λ
AWS 모바일 빌딩 블럭
Amazon API Gateway
Amazon Device Farm
v
AWS Mobile SDK
다운로드: http://aws.amazon.com/ko/mobile/sdk
v
AWS Mobile SDK
Amazon Mobile Analytics
Amazon Cognito (Sync)
AWS Identity and Access Management
Amazon Cognito (Identity Broker) Amazon S3
Transfer Manager
Amazon CloudFront (Device Detection)
Amazon DynamoDB (Object Mapper)
Amazon Kinesis (Recorder)
Amazon Mobile Analytics
Amazon SNS Mobile Push
Your Mobile App
사용자 인증
사용자 권한 부여
사용자 행동 분석
미디어의 저장 및 공유
인증정보 단말간 공유
미디어 전송
공유 데이터의 저장
실시간 데이터 스트림 처리 재방문 추적
푸시 알림 전송
AWS Mobile SDK
v
Amazon Cognito 소개
간단한 인증 방식 제공 및 접
근 관리
모바일 및 AWS 전체 서비스에 적용 가능한 안전한 아이덴티티 관리
가장 안전한 베스트 프랙티
스 적용
다양한 소셜 로그인 방식을 통해 쉽게 로그인 가능
Guest Your own Auth
디바이스 및 플랫폼간 데이터
동기화
디바이스 및 플랫폼 관계 없이 사용자 인증 및 데이터
동기화
v
Amazon Cognito: 동기화 기능 예제
CredentialsProvider 및 CognitoClient 초기화
데이터 동기화
원하는 데이터 셋이나 키/값 설정
provider = new CognitoCachingCredentialsProvider (context, AWS_ACCOUNT_ID, COGNITO_POOL_ID, COGNITO_ROLE_UNAUTH, COGNITO_ROLE_AUTH, Regions.US_EAST_1);
cognito = new CognitoSyncManager (context, Regions.US_EAST_1, provider);
dataset.synchronize(new SyncCallback(){..});
cognito.openOrCreateDataset(datasetName); dataset.put(key, value);
v
Amazon Mobile Analytics
비용이 저렴하다!
다양한 통계 분석을 60분 이내에 수행 가능
빠르다!
수백만의 사용자로 부터 오는 수십억건 데이터도
무료로 분석 가능!
데이터는 나의 것!
“간단하고도 비용 효율적인 모바일 앱 분석 도구”
수집된 데이터는 모두 자신의
AWS 자원에 저장!
v
주요 지표 (한라인코드로만도 추가 가능) 1. Monthly Active Users (MAU) 2. Daily Active Users (DAU) 3. New Users, 4. Daily Sessions, 5. Sticky Factor, 6. 1-Day Retention, 7. Avg. Revenue per DAU, 8. Daily Paying Users, 9. Avg. Paying DAU
v
Mobile Analytics 적용 코드 예제
앱 코드에서 MobileAnalyticsManager 초기화
별도 원하는 추가 이벤트 수집의 경우 선언
OnResume() 혹은 OnPause() 추가
private static MobileAnalyticsManager analytics; analytics = MobileAnalyticsManager.getOrCreateInstance( this.getApplicationContext(),"yourCompany.yourAppId",
Regions.YOUR_REGION, config, cognitoProvider );
EventClient eventClient = analytics.getEventClient(); MobileAnalyticsEvent visitEvent = eventClient.createEvent("speedSet"); eventClient.recordEvent(visitEvent);
analytics.getSessionClient().resumeSession(); analytics.getSessionClient().pauseSession(); Analytics.getEventClient().submitEvents();
v
서드파티를 활용한 시각화
mobile client
Amazon S3
Amazon Redshift
Amazon Mobile Analytics
외부 데이터
v
Amazon SNS Cross-platform
Mobile Push
Internet
Apple APNS
Google GCM
Amazon ADM
Windows WNS and MPNS
Baidu CP
With Amazon SNS, developers can
send push notifications on
multiple platforms and reach mobile users around the
world
Amazon SNS 모바일 푸시
Android Phones and Tablets
Apple iPhones and iPads
Kindle Fire Devices
Android Phones and Tablets in China
iOS
Windows Desktop and Windows Phone Devices
철수 영희 민수
• 지연 속도 없이 빠르게 데이터 추가 및 높은 성능을 가진 DynamoDB를 앱에서 간단한 코드로 접근 가능
• 모바일 클라이언트 데이터를 그대로 싱크 가능
• 멀티 디바이스에서 쉽게 이용 가능
게임 점수
철수 1500
영희 800
민수 750
DynamoDB Connector: Object Mapper
v
S3 Connector: 모바일 전송 관리
S3 Connector
멀티 파트 데이터 업로드(photos, videos, audio) 빠른 다운로드(e.g. assets) 자동 재시작 중단/재시작/취소 기능 제공 네이티브 OS 친화적
앱스토어 출시 사이클과 상관 없이 동적으로 자원을 업데이트할 수 있었으며, 170MB가 넘는 다바이스별 이미지를 모바일에서 직접 다운르도하여 서버 확장성을 고려할 필요가 없이 더 품질 높은 고해상도 이미지 전송도 가능
Amazon S3 connector를 통해 동적으로 게임 자원을 백그라운드로 다운로드
하여 사용자 경험이 늘어났습니다. Douglas Hare CEO, Outplay Entertainment
”
“
v
S3 이미지 관리 예제 // Creating the transfer manager TransferManager transferManager = new TransferManager(credentialProvider); // Upload image Upload upload = transferManager.upload(BUCKET_NAME, fileName, file); // Download image Download = transferManager.download(BUCKET_NAME, mKey, file); // Pause, and Resume try { PersistableDownload persistableDownload = download.pause(); //do something if we didn’t abort } catch(PauseException e) { //do something if we aborted }
download = transferManager.resumeDownload(persistableDownload);
v
Amazon Kinesis
Amazon Redshift
Kinesis enabled
Apps on EC2 AWS
Mobile SDK
Kinesis Connector for Mobile Apps For sophisticated
User Behavior Real-time Analysis
Amazon Kinesis를 통해 실시간 사용자 액션을 직접 모바일로 전송하여 분
석 할 수 있었습니다.
”
“ Amazon EMR
더 자세한 것은…
hCp://www.slideshare.net/awskorea/kr-‐webinar-‐2015-‐aws-‐mobile-‐services
v
AWS Mobile SDK
Amazon Mobile Analytics
Amazon Cognito (Sync)
AWS Identity and Access Management
Amazon Cognito (Identity Broker) Amazon S3
Transfer Manager
Amazon CloudFront (Device Detection)
Amazon DynamoDB (Object Mapper)
Amazon Kinesis (Recorder)
Amazon Mobile Analytics
Amazon SNS Mobile Push
Your Mobile App
사용자 인증
사용자 권한 부여
사용자 행동 분석
미디어의 저장 및 공유
인증정보 단말간 공유
미디어 전송
공유 데이터의 저장
실시간 데이터 스트림 처리 재방문 추적
푸시 알림 전송
AWS Mobile SDK
비지니스 로직/기능
AWS Lambda
AWS Lambda: 이벤트 기반 코드 실행
유연한 자동 확장 서버 설치 불필요 실행 시간에 따라 과금
프로그램 코드
“서버 없이도 클라우드 기반 무상태(Stateless) 함수 실행”
활용 예제: Data Triggers-Mobile Backend
AWS Lambda
λ Amazon Cognito User data change
Send SNS no,fica,ons
Update DynamoDB
Table
단계1: Lambda 함수 만들기
단계2: 테스트 해보기
v
단계3: 실행 결과 디버깅
v
다양한 활용 예제 • S3에 ZIP 파일 업로드시 자동 압축 해제 하기 • S3에 동영상 파일 업로드시 인코딩 하기 • S3에 XLS 파일 업로드시 DynamoDB로 저장하기 • S3에 정적 블로그 호스팅 하기 • Node.js 문자 인식 라이브러리로 이미지내 문자 인식하기 • Node.js 크롤러를 이용한 간단한 웹 크롤러 개발하기 • Node.js 활용 Cron Job 만들기
hCps://github.com/awscodes/lambda-‐snippet
v
예제: LambdaChat
• 예제: http://lambda-chat.s3-website-us-east-1.amazonaws.com/ • 코드: https://github.com/cloudnative/lambda-chat
v
모바일 빌딩블럭: 사진 공유 앱을 생각해 봅시다!
v
AWS Region
AUTHEN
TICATED (ASSUMED RO
LE)
서버없는 모바일 앱 AWS 모바일 서비스 기반
Download Photos & App Files
Session and Device Data, User Behavior
Social Content (Tagging, Likes, Comments, etc.) Auto Export
Metadata
Image Manipula,on
40 Func,on Invoked
Mul,-‐part Upload
User Login
Auto with Web Iden,ty Token
User
Friends
AWS Mobile SDK
Session & Photo Metadata
Role Associated With Iden,ty Pool
AWS Lambda
Amazon CloudFront
Amazon Mobile AnalyBcs
Amazon DynamoDB
Amazon Cognito
Amazon IAM Amazon
S3
Geo Look up
Amazon SNS Mobile Push
Amazon RedshiH
Targeted
Q: AWS 자원의 이벤트 없이도 AWS Lambda 함수를 실행할 수 있을까?
Q: 모바일 백엔드를 위한
API 관리를 쉽게 할 수 없을까?
Amazon API Gateway 안전하고 확장 가능한 API 서비스 유지 및 관리를 위한
클라우드 기반 관리형 서비스
API 관리에 대한 고객 피드백 API 버전 및 단계별 관리 비용이 높다
서드파티 개발자 접근 모니터링에 시간이 많이 든다
인증 관리 및 키 발급 관리도 힘들다.
트래픽이 갑자기 올라가면 확장성 고려를 해야 한다
서버 없이 개발을 하려고 한다면, 솔루션은?
v
Amazon API Gateway 소개 버전 관리 및 출시 단계별 관리 가능 개발자를 위한 API 키 발급 및 관리 용이 API 접근 인증을 위한 Signature Ver.4 지원 백엔드 보호를 위한 요청 모니터링 및 제한 AWS Lambda 활용
v
API Gateway 활용 이점 API 응답을 손쉽게 캐싱해서 제공 Amazon CloudFront를 활용하여 지연 속도 감소 및 DDoS 방어력 향상 iOS, Android 및 JavaScript SDK 자동 제작 Swagger 표준 형식 지원 요청/응답 데이터 변형 가능
API Gateway 모식도
Internet
Mobile Apps
Websites
Services
AWS Lambda functions
AWS API Gateway
Cache
Endpoints on Amazon EC2
Any other publicly accessible endpoint Amazon
CloudWatch Monitoring
Amazon CloudFront API Gateway
v
API 시작하기 • API 생성하기
• API 리소스 정의하기
• 리소스에 대한 메소드 정의하기 • REST 호출을 위한 HTTP verb 사용
Pet Store
/pets
/pets/{petId} • GET • POST • PUT
v
API 배포하기 • API 설정을 원하는 배포 단계에 따라 개별 구성 가능
• 각 단계는 전혀 다른 사용자 및 서비스 환경을 가지게 됨:
• Dev (e.g., example.com/dev) • Beta (e.g., example.com/beta) • Prod (e.g., example.com/prod) • As many stages as you need
Pet Store dev
beta
gamma
prod
v
API 버전 및 단계별 관리 방법 API 1 (v1)
Stage (dev)
Stage (prod)
API 2 (v2)
Stage (dev)
v
맞춤형 도메인 지원 • 소유하고 있는 자체 도메인 사용 가능
• HTTPS 인증서와 함께 API Gateway에 제공
• 자체 도메인명은 API 혹은 각 단계에 지정 가능 • Beta (e.g., yourapi.com/beta) • Prod (e.g., yourapi.com/prod)
API 사용량 측정 및 인증 관리
v
API Key를 통한 사용량 측정 • API keys 생성 지원
• API 및 단계 수준별 접근 제어 가능
• Amazon CloudWatch 로그를 통한 API Key 접근 통계 측정 가능
v
API Key에 대한 바른 인식 및 사용법 • “key”가 보안을 의미하지만, API Key는 앱 코드에 담기므로 보안을 의미 하지 않음
• API keys는 앱 및 사용자 트래픽을 측정하는데에만 사용 필요
• API keys는 더 강력한 인증 메카니즘 안에서 사용해야 함
v
AWS signature version 4 적용 방법 • API 호출을 서명 및 인증하기 위해 AWS signature version 4 활용 가능
• Amazon Cognito 및 AWS Security Token Service (AWS STS)을 통해 앱에 대한 임시 인증 토큰 생성
• 별도 헤더를 통해 Oauth나 유사한 다른 인증 메카니즘을 사용할 수 있음
• 백엔드로 별도 헤더를 전송하기 위해 API 메소드에 설정 가능
v
Signature version 4를 통한 API 호출 인증
Call login API, no authentication
required
Client API Gateway Backend
/login AWS Lambda fn_login
User accounts database
Credentials verified
Amazon Cognito developer
authenticated identities
Access and secret key /login
Receives credentials to sign API calls
트래픽 제어 및 캐싱 기능
v
API 트래픽 제어 • 백엔드 보호 및 관리를 위해 필요하며, 개발자가 지정한 방속으로 제공 가능 (예: 초단 접속 횟수)
• 제한 트래픽량을 초과할 경우 오류 반환 • HTTP 429 response
• 자동 생성된 SDK에서 트래픽 제어 처리 가능
v
API 응답 캐싱 지원 • 캐쉬 키 및 API응답에 대한 Time to Live (TTL) 설정가능
• 백엔드 호출 없이 캐싱 아이템 응답 가능
• 캐싱은 설정에 따라 가능하며 0.5 GB - 237 GB 사이
API 호출 시 워크플로
API 호출 • 캐시에 있는지 확인 • 캐시에 있으면 응답
트래픽설정 • 초당 접근 횟수 측정 • 허가량 초과시 HTTP 429 반환
백엔드 호출 • AWS Lambda • AWS EC2 혹
은 외부 자원
입출력 모델 및 데이터 변환
v
API 모델 • API 모델은 JSON으로 만들어진 호출 및 응답에 대한 표준 스키마
• SDK 생성 혹은 내부 백엔드 API로 입출력 필터링이 필요할 때 사용
• API 내 여러 메소드에서 모델을 재사용 가능
hCps://github.com/awslabs/aws-‐apigateway-‐swagger-‐importer
v
입출력 변환 • 데이터 변환에 Velocity 템플릿을 사용
• 출력 결과 필터링 • 테스트나 불필요한 데이터 제거 • API 성능 향상을 위해 데이터셋 크기 필터링
• GET to POST • GET 호출로 받은 모든 파라미터를 내부 API 백엔드로 POST로 변환해서 제공 가능
• JSON to XML • JSON 입력 결과를 내부 API 백엔드로 XML 변환 가능 • AWS Lambda로 부터 받은 JSON 결과를 XML로 변환 가능
v
변환 예제: JSON to XML API Gateway Back end
GET -‐ /sayHello AWS
Lambda fn_sayHell
o
/sayHello
{ “message” : “hello world” }
<xml> <message> Hello world </message> </xml>
#set($root = $input.path('$')) <xml> <message> $root.message </message> </xml>
SDK 자동 생성
v
네이티브 SDK 자동 생성 • API 배포(Deployement) 기준에 따라 SDK 자동 생성 가능
• 호출 및 응답 모델이 생성되어 있는 경우, SDK에서 메소드 입출력 처리 가능
• 응답에 대한 트래픽 제한 처리 가능
• AWS 임시 크리덴셜(Signature Version 4 지원)을 기반으로 호출 서명 가능
• 안드로이드, iOS 및 JavaScript 지원
Demo 1
외부 블로그 RSS Feed를 제공해주는 API 사례
Demo 2
API Gateway와 Lambda를 통한 간단한 모바일 백엔드
hCps://aws.amazon.com/blogs/compute/the-‐squirrelbin-‐architecture-‐a-‐serverless-‐microservice-‐using-‐aws-‐lambda/
샘플 사례: The SquirrelBin Architecture
v
API Gateway 가격 정책 • 1백만 호출당 $3.50 • AWS Free Tier
• 12개월 동안 월 백만 호출 무상 제공
• 데이터 전송 비용 (표준 AWS 가격) • $0.09/GB for the first 10 TB • $0.085/GB for the next 40 TB • $0.07/GB for the next 100 TB • $0.05/GB for the next 350 TB
Cache memory size (GB)
Price per hour (USD)
0.5 $0.020 1.6 $0.038 6 $0.200 13 $0.250 28 $0.500 58 $1.000 118 $1.900 237 $3.800
Dedicated cache pricing
v
Amazon API Gateway
API 버전 관리
API 트래픽 관리
데이터 캐싱 인증 및 보안 SDK 자동
생성
“확장성과 보안성 높은 API 개발, 관리 모니터링 서비스”
AWS Device Farm을 통한 모바일 앱 테스트 자동화
v
앱의 품질이 중요하다! • 48%의 사용자 버그나 성능 문제가 있다면 앱
을 삭제한다. • 32%의 사용자 이러한 문제가 발생하면 경쟁
앱을 찾는다. • 이용자 획득 비용은 앱마다 2.74달러로 되어
있으며, 2014년 4월에 비해서 연간 80%증가
Failing to meet mobile app user expectations -‐‑‒ A mobile app user survey from Dimensional Research (2015/3/30)http://go.saas.hp.com/apppulse-‐‑‒mobile-‐‑‒survey
Mobile Marketing Costs See Unprecedented Year-‐‑‒over-‐‑‒Year Growth, According to the Fiksu Indexes (2015/5/29)https://www.fiksu.com/about/news-‐‑‒releases/fiksu-‐‑‒indexes-‐‑‒mobile-‐‑‒marketing-‐‑‒costs-‐‑‒see-‐‑‒unprecedented-‐‑‒year-‐‑‒over-‐‑‒year-‐‑‒growth
v
고품질 앱을 제공하는 것이 왜 어렵나? • 대부분의 문제는 기기 스펙에 기인 • 사용자가 갖고 있는 실제 기기와 같은 것
에서 테스트해야함 • 시장에는 많은 디바이스와 OS버전 조합
이 존재 • 대량 테스트 디바이스를 테스트하는 것
은 매우 높은 비용 • 수작업에 의한 테스트는 시간 많이 소요
Open Signal -‐‑‒ Android Fragmentation Visualized (2014/8)http://opensignal.com/reports/2014/android-‐‑‒fragmentation/
v
디바이스/OS의 변화는 가속되는 중 • 사용자가 갖고 있는 Android 기기 종류
는 전년 11,868개에서 , 2014년 8월에는 18,796로 증가
• Android 사용자의 38%는 Jelly Bean, 39%는 KitKat, 12%는 Lolipop, 10%는 아직 Gingerbread와 Ice Cream Sandwich를 이용
Open Signal -‐‑‒ Android Fragmentation Visualized (2014/8)http://opensignal.com/reports/2014/android-‐‑‒fragmentation/
Android Developers (2015/6)http://developer.android.com/intl/zh-‐‑‒CN/about/dashboards/index.html
v
테스트에 드는 비용 및 복잡성 증가
• 엔터프라이즈 IT테스트와 QA예산 전체 비율은 2012년 18%에서 2014년 26%로 증가했으나, 여전히 35%는 불만족
• 40% IT경영자가 앱을 적절히 테스트할 시간이 부족
• 51% 개발자가 비용과 시간의 제약 때문에 테스트가 힘듬
Capgemini -‐‑‒ World Quality Report 2014-‐‑‒15https://www.capgemini.com/thought-‐‑‒leadership/world-‐‑‒quality-‐‑‒report-‐‑‒2014-‐‑‒15
77% of Mobile App Purchasers Have Concerns When Buying Mobile Apps -‐ Harris (2013/8/20)http://www.businesswire.com/news/home/20130820006244/en/77-‐‑‒Mobile-‐‑‒App-‐‑‒Purchasers-‐‑‒Concerns-‐‑‒Buying-‐‑‒Mobile#.Vaz9yaad1N0
AWS Device Farm
클라우드 기반 실제 디바이스에서 안드로이드, iOS 및 FireOS 앱 테스트 자동화 서비스
Android, iOS, Fire OS앱을 올리고 테스트 내용을 설정하
여 디바이스 선택
선택한 디바이스를 병렬적으로 앱을 빠르게 테스트
가능
버그, 성능 등의 문제를 몇분 안에 상세하게 테스트
결과 제공
YOURAPP +
AWS Device Farm AWS클라우드에 호스팅 된 수많은 스마트 폰, 태블릿, 기타의 실제 기기를 통해 빠르게 Android, iOS, Fire OS앱을 테스트 및 품질 향상 가능
자체 테스트 팜 운영
• 초기 투자/운용에 높은 비용 필요
• 신규 기기 추가와 OS 업데이트 비용
• 기기 사용을 온라인 상태 유지 필요
• 병렬 실행, 데이터 수집, 레포팅 등 자동화를 위한 기반 솔루션에 투자 필요
AWS Device Farm의 장점
AWS Device Farm
• 종량 과금제에 따른 비용 절감
• 신규 기기 및 OS에 빠른 접근 가능
• AWS 데이터 센터에서 높은 신뢰성과 가용성 보장
• 앱의 품질에만 집중 할 수 있음
Demo
간단한 모바일 앱 퍼지 테스트
모바일 기기 및 앱 테스트 종류
v
디바이스 종류 • 디바이스 프로파일은 제조 회사/모델/OS버전/통신사를 기준으로 제공 • AWS데이터 센터에 호스팅 되어 있어 사용자 요구에 따라 확장 가능 • 클라우드 서비스를 위한 충분한 용량 (다수 디바이스 프로파일)을 보유 • 보안 요구 조건을 충족 (예: 루트 권한이 동작않음) • 시장 정보를 바탕으로 기기 선택 및 제공 (새로운 디바이스 지속 추가)
신규 기기 입고 최신 기기를 활용 가능 AWS 데이터센터
v
디바이스 선택 • 호환성 있는 모든 디바이스에서 개별적으로 선택 가능 • 이용하고 싶은 디바이스를 사전에 선택하는 디바이스 풀 작성 가능
주의 기본적인 몇개의 시용 디바이스밖에 이용할 수 없음. 모든 디바이스를 이용하려면 별도 신청이 필요
v
기본 탑재 테스트 종류 • Fuzz 테스트
Fuzz 테스트는 앱에 여러 사용자 입력(터치, 스와이프, 키보드 입력)을 주고 UI테스트. 이벤트 수, 시간 간격, 무작위 이벤트에 사용되는 랜덤값(seed)를 설정할 수 있다. 테스트후, 같은 랜덤값(seed)을 이용하면 같은 이벤트 재현 가능
• 참고 사항 • 테스트 케이스 없이도 테스트 가능 • 짧은 시간내에 호환성 문제를 파악 가능 • 아래와 같은 테스트 진행 가능
ü 앱 설치/실행 / Fuzz 테스트 / 앱 제거
v
테스트 프레임웍 지원 • 테스트 자동화 프레임웍
• Appium(JUnit, TestNG) • Calabash • JUnit, Espresso, Robotium • uiautomator • XCTest(Xcode5∼), KIF
• 참고사항 • 프로젝트별로 최적인 솔루션을 사용해서 테스트를 만들 수 있다. • 개발 팀과 QA팀에서 요건이 다르더라도 하나의 공통 플랫폼에 통합
수 있다. • 새롭게 출현하는 체제도 지원됨으로써 통합 수 있다.
https://github.com/appium/sample-‐‑‒code – AndroidTest.java
https://github.com/appium/sample-‐‑‒code – AndroidContactsTest.java
http://calaba.sh/
v
테스트 케이스를 업로드한 경우…
v
병렬 테스트 • 병렬 테스트 • 선택한 기기로 병렬로 테스트 실행 가능 • 클라우드 기반 충분한 기기 ( 많은 동일한 디바이스 프로파일) 보유 • 디바이스 프로파일 이용이 많아지면 기기마다 큐 대기 • 테스트가 완료되면 기기 기반으로 결과 제공
• 참고사항 • 자동 테스트를 하루 몇 번씩 실행하는 경우 • 자기 자동화 솔루션에서 대량 기기를 병렬 테스트할 수 있는 인프라를 구
축하는 것은 복잡하고 기술적 도전이지만, AWS Device Farm로 있으면 쉽게 구현 가능
v
실제 시나리오를 재현 가능한 환경 설정 가능
• 언어/지역 선택 • 위치 정보(위경도) • 네트워크 상황
• WiFi, Bluetooth, GPS, NFC
• 추가 데이터 • 다른 앱 설치
앱 테스트 결과 보기
v
결과 보고
• 각 기기별 상세 정보뿐 아니라 다양한 결과를 담고 있다. • 성공/실패 정보 • 앱 크래시 리포트 • 테스트 로그 • 디바이스 로그 • 스크린샷 • 성능 정보
v
결과 보고 – 원인 조사• 각각의 문제에 대한 상세한 정보 확인 가능
v
결과 보고 – 스크린샷• 테스트 중 얻은 스크린샷을 다양하게 확보 가능
v
결과 보고 – 성능 조사• 테스트에서의 퍼포먼스(CPU, 메모리 이용, 스레드 수)을 조사 가능
v
결과 보고 – 로그 • 테스트에서 만들어진 테스트 로그 확보 가능
v
기존 개발/테스트 워크 플로와 통합 • AWS관리 콘솔에서 이용 가능 • Jenkins 플러그 인을 이용하고 Jenkins CI서버에서 이용 가능 • 기타 워크 플로 API 이용 가능
ü 테스트 설정 및 시작, 스크린샷 저장 ü 결과 보고서 다운로드
v
Jenkins 플러그인 • Jenkins CI서버와 AWS Device Farm을 기능적으로 연계 하는 플러그인
AWS Device Farm Jenkins Pluginhttps://github.com/awslabs/aws-‐‑‒device-‐‑‒farm-‐‑‒jenkins-‐‑‒plugin
v
Jenkins 플러그인 • 테스트 결과(스크린 샷 로그 등)을 다운로드하는 것도 가능.
보안 및 기타 참고사항
v
보안 관련 사항 • AWS Device Farm과 모든 통신은 SSL 통해 제공 • 테스트가 끝나면 설치된 앱은 모두 제거 • 전화 번호, 추가 계정, 외부 데이터를 포함한 디바이스상의 모든 데이터 삭제 • AWS 위에 임시 저장된 앱과 파일은 자동적으로 30일 경과후 삭제 • 테스트 중 각 기기는 그 사용자가 점유 • 각 기기는 독립되어 있어 WiFi, Bluetooth 등으로 다른 기기 접속 불가 • 외부 네트워크 접속은 인터넷만 가능하고 다른 기기 접속망은 없음 • 일부 기기에만 테스트 가능 (모든 기기를 이용하려면 별도 신청 필요)
• 업로드할 수 있는 앱은 최대 4GB까지 • 이용 가능 기기 갯수의 상한은 없으나, 병렬 테스트 최대 5개 까지 가능 • Wi-Fi에 의한 인터넷 접속은 가능 • 통신사 연결이나 전화 발신 SMS 송신 불가 • 카메라를 통한 사진을 찍을수는 있으나 기기 설치 환경상 블랙 이미지 • 안드로이드의 경우 Google Play서비스는 있으나 실계정 연동은 안됨 • 제조 업체와 통신사의 최소 기본앱만 설치되어 있음 • PhoneGap, Titanium, Xamarin, Unity 등의 하이브리드앱도 제공
기타 참고 사항
활용 방법
v
기업 형태별 활용 사례 • 엔터프라이즈 및 대형 업체
ü 모든 모바일 비즈니스에 활용할 수 있는 플랫폼 ü 자비로 자동화 솔루션을 구축/운용할 필요 없음 ü 새로운 기기에 대한 빠른 대응 가능
• 중소 규모 업체 ü 테스트하지 못했던 기기에 대한 대응 가능 ü 수작업이 아닌 자동화를 통한 효율적 테스트 가능
• SI업체 및 컨설팅 기업 ü 외부 개발 서비스를 제공하기 위한 플랫폼 활용 ü 재사용 가능한 기술과 자산 구축을 통한 비지니스 확대
v
활용 로드맵 • 기존 자동 테스트 이용 혹은 계획중 • 더 많은 기기에 테스트 활용 필요 • 직접 기기 및 QA룸을 운영하고 싶지 않을 때
• → Device Farm 프레임웍 기반 테스트 진행
• 아직 테스트 자동화를 이용하지 않음 • 테스트 스크립트를 작성하는 자원 부족 • 앱 테스트를 위한 자원 부족
→ Device Farm Fuzz 테스트 진행
이용 요금
v
이용 요금 • 종량 과금
테스트에 필요한 Device Minutes에 의해서 결정 • 즉, 디바이스 사용 시간에 따라 과금 • 무료 한도:250 Device Minutes • 이후: 1 Device Minute 0.17달러
• 정액 요금 • 1개 장치에 월 250달러
• 정액으로 디바이스 활용 가능 • 서브 스크립션을 변경하지 않아도 언제든지 수많은
Android장치에서 필요한 디바이스를 선택 가능
v
2개 기기 실제 정액 요금 병렬 테스트
시간 1
2
3 4
종량 요금
월간 250×2=$500
v
실제 기기에서 자동 테스트
안드로이드, iOS 및 Fire OS 지원
앱 및 디바이스 설정 가능
세부 테스트 결과 및 로그 분석
Amazon DeviceFarm
“클라우드를 통해 간단하게 모바일 앱 테스트 가능!”
• 클라우드 기반의 Android, iOS, Fire OS 실제 장치에서 테스트 진행 가능 • 주요 테스트 프레임워크 활용 가능 • 기본 탑재된 Fuzz 테스트 활용 가능 • 병렬 테스트를 통해 짧은 시간에 결과 도축 • 실제 시나리오 재현을 위한 테스트 환경 설정 가능(언어, 위치 및 기기 상태) • 테스트 결과 확보 가능 (스크린 샷, 디바이스 로그, 성능 데이터 등) • Jenkins 지속적 통합(CI)과 다른 워크 플로우의 일부로 테스트를 실시 가능
AWS Device Farm 요약
v
Amazon Cognito
Mobile Analytics
SNS Mobile Push
Free Tier: 1 Million push messages every month
Free Tier 1 Million syncs/month + 10GB of storage for Amazon Cognito
Free Tier: 100 Million events every month
AWS 모바일 무료 서비스
hCp://aws.amazon.com/mobile
AWS Lambda
Free Tier : 1M free requests per month 400,000 GB-‐seconds of compute ,me per month
AWS Device Farm
Free Tier : 250 Device minutes per month
여러분의 피드백을 기다립니다!
• 공식 블로그: http://aws.amazon.com/ko/blogs/korea
• 한국어 공식 소셜 미디어 @AWSKorea
AmazonWebServices
AWSKorea
AWSKorea ‘좋아요’ 눌러주세요!