aws mobile hub 개발자 안내서 - 개발자 안내서 · 2020-02-07 · ios - swift 1.ios를...

247
AWS Mobile Hub 개발자 안내서 개발자 안내서 AWS Mobile Hub 개발자 안내서: 개발자 안내서 Copyright © 2020 Amazon Web Services, Inc. and/or its affiliates. All rights reserved.

Upload: others

Post on 13-Mar-2020

5 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: AWS Mobile Hub 개발자 안내서 - 개발자 안내서 · 2020-02-07 · iOS - Swift 1.iOS를 플랫폼으로 선택하고 다음을 선택합니다. 2.Download Cloud Config(클라우드

AWS Mobile Hub 개발자 안내서개발자 안내서

AWS Mobile Hub 개발자 안내서: 개발자 안내서Copyright © 2020 Amazon Web Services, Inc. and/or its affiliates. All rights reserved.

Page 2: AWS Mobile Hub 개발자 안내서 - 개발자 안내서 · 2020-02-07 · iOS - Swift 1.iOS를 플랫폼으로 선택하고 다음을 선택합니다. 2.Download Cloud Config(클라우드

AWS Mobile Hub 개발자 안내서 개발자 안내서

Amazon's trademarks and trade dress may not be used in connection with any product or service that is not Amazon's,in any manner that is likely to cause confusion among customers, or in any manner that disparages or discreditsAmazon. All other trademarks not owned by Amazon are the property of their respective owners, who may or may notbe affiliated with, connected to, or sponsored by Amazon.

Page 3: AWS Mobile Hub 개발자 안내서 - 개발자 안내서 · 2020-02-07 · iOS - Swift 1.iOS를 플랫폼으로 선택하고 다음을 선택합니다. 2.Download Cloud Config(클라우드

AWS Mobile Hub 개발자 안내서 개발자 안내서

Table of Contents모바일 및 웹 앱 개발 .......................................................................................................................... 1참조 .................................................................................................................................................. 2

SDK API 레퍼런스 ...................................................................................................................... 2AWS Mobile Hub 참조 ............................................................................................................... 2

Android 및 iOS ................................................................................................................... 2웹 ................................................................................................................................. 140React Native .................................................................................................................. 173Mobile Hub 기능 ............................................................................................................. 188IAM 사용량 ..................................................................................................................... 212프로젝트 서비스 리전 호스팅 ............................................................................................ 221프로젝트 문제 해결 ......................................................................................................... 226프로젝트 내보내기 및 가져오기 ......................................................................................... 230Amazon CloudFront 보안 .................................................................................................. 241Amazon S3 보안 ............................................................................................................. 243

iii

Page 4: AWS Mobile Hub 개발자 안내서 - 개발자 안내서 · 2020-02-07 · iOS - Swift 1.iOS를 플랫폼으로 선택하고 다음을 선택합니다. 2.Download Cloud Config(클라우드

AWS Mobile Hub 개발자 안내서 개발자 안내서

모바일 및 웹 앱 개발Amplify Framework를 통해 개발자는 클라우드 기반의 모바일 및 웹 앱을 빌드할 수 있습니다. 여기에는 클라이언트 앱 개발을 위한 종합적인 SDK, 라이브러리, 도구 및 설명서가 포함되어 있습니다. 지금 AmplifyFramework에 대해 자세히 알아보거나 시작하십시오.

1

Page 5: AWS Mobile Hub 개발자 안내서 - 개발자 안내서 · 2020-02-07 · iOS - Swift 1.iOS를 플랫폼으로 선택하고 다음을 선택합니다. 2.Download Cloud Config(클라우드

AWS Mobile Hub 개발자 안내서 개발자 안내서SDK API 레퍼런스

AWS Mobile 참조주제

• Android 및 iOS API 참조 (p. 2)• AWS Mobile Hub 참조 (p. 2)

Android 및 iOS API 참조Android

• Android용 AWS Mobile SDK API 참조• AWS Mobile SDK for Android on GitHub• AWS Mobile SDK for Android Samples

iOS

• iOS용 AWS Mobile SDK API 참조• GitHub의 iOS용 AWS Mobile SDK• iOS용 AWS Mobile SDK 샘플

AWS Mobile Hub 참조주제

• Android 및 iOS용 AWS Mobile (p. 2)• 웹용 AWS Amplify 라이브러리 (p. 140)• React Native용 AWS Amplify 라이브러리 (p. 173)• AWS Mobile Hub 기능 (p. 188)• AWS Mobile Hub에서 AWS Identity and Access Management 사용 (p. 212)• Mobile Hub 프로젝트 서비스 리전 호스팅 (p. 221)• Mobile Hub 프로젝트 문제 해결 (p. 226)• AWS Mobile Hub 프로젝트 내보내기 및 가져오기 (p. 230)• Mobile Hub 사용자에 대한 Amazon CloudFront 보안 고려 사항 (p. 241)• Mobile Hub 사용자에 대한 Amazon S3 보안 고려 사항 (p. 243)

Android 및 iOS용 AWS Mobile

다음 참조 콘텐츠는 iOS 및 Android용 AWS Mobile SDK를 사용해 구성된 기존 앱에만 적용됩니다. 새 모바일 또는 웹 앱을 빌드하거나 기존 앱에 클라우드 기능을 추가하고 있다면 대신 Amplify Framework 웹사

2

Page 6: AWS Mobile Hub 개발자 안내서 - 개발자 안내서 · 2020-02-07 · iOS - Swift 1.iOS를 플랫폼으로 선택하고 다음을 선택합니다. 2.Download Cloud Config(클라우드

AWS Mobile Hub 개발자 안내서 개발자 안내서Android 및 iOS

이트를 방문하십시오. iOS 및 Android용 AWS Mobile SDK의 설명서는 Amplify Framework의 일부로 제공됩니다.

Android용 및 iOS용 AWS Mobile SDK를 사용하면 기존 모바일 앱에 견고한 클라우드 백엔드를 빠르고 쉽게통합할 수 있습니다.

주제• 시작 (p. 3)• AWS Mobile Android 및 iOS 방법 (p. 91)

시작

다음 참조 콘텐츠는 iOS 및 Android용 AWS Mobile SDK를 사용해 구성된 기존 앱에만 적용됩니다. 새 모바일 또는 웹 앱을 빌드하거나 기존 앱에 클라우드 기능을 추가하고 있다면 대신 Amplify Framework 웹사이트를 방문하십시오. iOS 및 Android용 AWS Mobile SDK의 설명서는 Amplify Framework의 일부로 제공됩니다.

개요

AWS Mobile Android 및 iOS SDK는 고품질 모바일 앱을 빠르고 쉽게 개발할 수 있도록 지원합니다. 이러한 SDK를 사용하면 Amazon Cognito, AWS Lambda, Amazon S3, Amazon Kinesis, Amazon DynamoDB,Amazon Pinpoint 등 다양한 AWS 서비스에 쉽게 액세스할 수 있습니다.

백엔드 설정

1. AWS 프리 티어에 가입합니다.2. 콘솔에 로그인하여 Mobile Hub 프로젝트를 생성합니다. Mobile Hub 콘솔은 앱의 클라우드 리소스를 관리

및 모니터링하기 위한 단일 위치를 제공합니다.3. 프로젝트에 이름을 지정하고 Mobile Hub가 사용자를 대신하여 리소스를 관리하도록 허용하는 확인란을

선택한 후 추가를 선택합니다.

Android - Java

1. Android를 플랫폼으로 선택한 이후 다음을 선택합니다.

3

Page 7: AWS Mobile Hub 개발자 안내서 - 개발자 안내서 · 2020-02-07 · iOS - Swift 1.iOS를 플랫폼으로 선택하고 다음을 선택합니다. 2.Download Cloud Config(클라우드

AWS Mobile Hub 개발자 안내서 개발자 안내서Android 및 iOS

2. Download Cloud Config(클라우드 구성 다운로드)를 선택한 이후 다음을 선택합니다.

다운로드하는 awsconfiguration.json 파일에는 Mobile Hub가 프로젝트에서 활성화한 백엔드리소스의 구성이 들어 있습니다. 기본적으로 앱에 대해 분석 클라우드 서비스가 활성화되어 있습니다.

3. 백엔드 서비스 구성 파일을 앱에 추가합니다.

Project Navigator에서 앱의 res 폴더를 마우스 오른쪽 버튼으로 클릭한 다음 New > Directory(새로생성 > 디렉터리)를 선택합니다. 디렉터리 이름으로 raw를 입력한 후 확인을 선택합니다.

이전 단계에서 구성 파일인 awsconfiguration.json을 다운로드한 위치에서, 이 파일을 res/raw 폴더로 끌어옵니다. Android는 이 폴더에 있는 임의 파일에 리소스 ID를 부여해 앱에서 쉽게 참조할 수 있게 해줍니다.

기억할 사항 Mobile Hub 프로젝트에서 기능을 생성하거나 업데이트할 때마다 awsconfiguration.json의새 버전을 다운로드하여 해당 업데이트를 사용할 프로젝트의 각 앱에 통합합니다.

이제 백엔드가 구성되었습니다. 다음 섹션의 단계를 사용하여 백엔드를 모바일 앱에 연결합니다.

4

Page 8: AWS Mobile Hub 개발자 안내서 - 개발자 안내서 · 2020-02-07 · iOS - Swift 1.iOS를 플랫폼으로 선택하고 다음을 선택합니다. 2.Download Cloud Config(클라우드

AWS Mobile Hub 개발자 안내서 개발자 안내서Android 및 iOS

Android - Kotlin

1. Android를 플랫폼으로 선택한 이후 다음을 선택합니다.

2. Download Cloud Config(클라우드 구성 다운로드)를 선택한 이후 다음을 선택합니다.

다운로드하는 awsconfiguration.json 파일에는 Mobile Hub가 프로젝트에서 활성화한 백엔드리소스의 구성이 들어 있습니다. 기본적으로 앱에 대해 분석 클라우드 서비스가 활성화되어 있습니다.

3. 백엔드 서비스 구성 파일을 앱에 추가합니다.

Project Navigator에서 앱의 res 폴더를 마우스 오른쪽 버튼으로 클릭한 다음 New > Directory(새로생성 > 디렉터리)를 선택합니다. 디렉터리 이름으로 raw를 입력한 후 확인을 선택합니다.

5

Page 9: AWS Mobile Hub 개발자 안내서 - 개발자 안내서 · 2020-02-07 · iOS - Swift 1.iOS를 플랫폼으로 선택하고 다음을 선택합니다. 2.Download Cloud Config(클라우드

AWS Mobile Hub 개발자 안내서 개발자 안내서Android 및 iOS

이전 단계에서 구성 파일인 awsconfiguration.json을 다운로드한 위치에서, 이 파일을 res/raw 폴더로 끌어옵니다. Android는 이 폴더에 있는 임의 파일에 리소스 ID를 부여해 앱에서 쉽게 참조할 수 있게 해줍니다.

기억할 사항 Mobile Hub 프로젝트에서 기능을 생성하거나 업데이트할 때마다 awsconfiguration.json의새 버전을 다운로드하여 해당 업데이트를 사용할 프로젝트의 각 앱에 통합합니다.

이제 백엔드가 구성되었습니다. 다음 섹션의 단계를 사용하여 백엔드를 모바일 앱에 연결합니다.iOS - Swift

1. iOS를 플랫폼으로 선택하고 다음을 선택합니다.

2. Download Cloud Config(클라우드 구성 다운로드)를 선택한 이후 다음을 선택합니다.

다운로드하는 awsconfiguration.json 파일에는 Mobile Hub가 프로젝트에서 활성화한 백엔드리소스의 구성이 들어 있습니다. 기본적으로 앱에 대해 분석 클라우드 서비스가 활성화되어 있습니다.

6

Page 10: AWS Mobile Hub 개발자 안내서 - 개발자 안내서 · 2020-02-07 · iOS - Swift 1.iOS를 플랫폼으로 선택하고 다음을 선택합니다. 2.Download Cloud Config(클라우드

AWS Mobile Hub 개발자 안내서 개발자 안내서Android 및 iOS

3. 백엔드 서비스 구성 파일을 앱에 추가합니다.

다운로드 위치에서 awsconfiguration.json을, Xcode 프로젝트의 info.plist 파일을 포함하는 폴더에 넣습니다. 옵션 대화 상자에서 Copy items if needed(필요 시 항목 복사) 및 Creategroups(그룹 생성)를 선택합니다. [Next]를 선택합니다.

기억할 사항 Mobile Hub 프로젝트에서 기능을 생성하거나 업데이트할 때마다 awsconfiguration.json의새 버전을 다운로드하여 해당 업데이트를 사용할 프로젝트의 각 앱에 통합합니다.

이제 백엔드가 구성되었습니다. 다음 섹션의 단계를 사용하여 백엔드를 모바일 앱에 연결합니다.

백엔드에 연결

Android - Java

1. 사전 조건• Android Studio 버전 2.33 이상을 설치합니다.• Android SDK v7.11(Nougat), API 레벨 25를 설치합니다.

2. AndroidManifest.xml에 다음을 포함해야 합니다.

<uses-permission android:name="android.permission.INTERNET"/><uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>

3. 종속성을 app/build.gradle에 추가한 다음, Android Studio의 오른쪽 위에서 Sync Now(지금 동기화)를 선택합니다. 이 라이브러리는 자격 증명 및 분석과 같은 기본 AWS 함수를 활성화합니다.

dependencies { implementation ('com.amazonaws:aws-android-sdk-mobile-client:2.7.+@aar') { transitive = true }}

4. 다음 코드를 기본 및 스타트업 활동의 onCreate 메서드에 추가합니다. AWSMobileClient는 AWS으로의 연결을 설정하고 서비스를 위한 인터페이스로서 역할을 하는 singleton입니다.

import com.amazonaws.mobile.client.AWSMobileClient;

7

Page 11: AWS Mobile Hub 개발자 안내서 - 개발자 안내서 · 2020-02-07 · iOS - Swift 1.iOS를 플랫폼으로 선택하고 다음을 선택합니다. 2.Download Cloud Config(클라우드

AWS Mobile Hub 개발자 안내서 개발자 안내서Android 및 iOS

public class YourMainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);

AWSMobileClient.getInstance().initialize(this, new AWSStartupHandler() { @Override public void onComplete(AWSStartupResult awsStartupResult) { Log.d("YourMainActivity", "AWSMobileClient is instantiated and you are connected to AWS!"); } }).execute();

// More onCreate code ... } }

이것은 무엇을 합니까? AWSMobileClient는 초기화될 때다른 SDK 클라이언트 생성에 사용할 AWSCredentialsProvider 및AWSConfiguration을 구성합니다. 그 다음에 이 클라이언트는 Amazon Cognito 연동 자격 증명에 대해 Sigv4.signed 네트워크 호출을수행하여 백엔드 리소스에 사용자 액세스 권한을 부여하는 AWS 자격 증명을 검색합니다. 네트워크 상호 작용이 성공하면 onComplete의AWSStartUpHandler 메서드가 호출됩니다.

앱은 이제 Mobile Hub 프로젝트에서 구성한 AWS 서비스와 상호 작용하도록 설정되었습니다.

Android Studio의 실행 아이콘(▶)을 선택하여 앱을 빌드하고 장치/에뮬레이터에서 실행합니다. AndroidLogcat 출력에서 Welcome to AWS!를 찾습니다(View > Tool Windows > Logcat(보기 > 도구 창 > 로그캣 선택)).

선택 사항: 다음 예에서는 다른 SDK 클라이언트를 인스턴스화하는 데 사용할 수 있는AWSCredentialsProvider 및 AWSConfiguration 객체에 대한 참조를 검색하는 방법을 보여줍니다. IdentityManager를 사용하여 Amazon Cognito에서 또는 로컬 캐시된 자격 증명 ID 값에서 직접 사용자의 AWS 자격 증명을 가져올 수 있습니다.

import com.amazonaws.auth.AWSCredentialsProvider;import com.amazonaws.mobile.auth.core.IdentityHandler;import com.amazonaws.mobile.auth.core.IdentityManager;import com.amazonaws.mobile.client.AWSMobileClient;import com.amazonaws.mobile.client.AWSStartupHandler;import com.amazonaws.mobile.client.AWSStartupResult;import com.amazonaws.mobile.config.AWSConfiguration;

public class YourMainActivity extends Activity {

private AWSCredentialsProvider credentialsProvider; private AWSConfiguration configuration;

@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);

AWSMobileClient.getInstance().initialize(this, new AWSStartupHandler() { @Override

8

Page 12: AWS Mobile Hub 개발자 안내서 - 개발자 안내서 · 2020-02-07 · iOS - Swift 1.iOS를 플랫폼으로 선택하고 다음을 선택합니다. 2.Download Cloud Config(클라우드

AWS Mobile Hub 개발자 안내서 개발자 안내서Android 및 iOS

public void onComplete(AWSStartupResult awsStartupResult) {

// Obtain the reference to the AWSCredentialsProvider and AWSConfiguration objects credentialsProvider = AWSMobileClient.getInstance().getCredentialsProvider(); configuration = AWSMobileClient.getInstance().getConfiguration();

// Use IdentityManager#getUserID to fetch the identity id. IdentityManager.getDefaultIdentityManager().getUserID(new IdentityHandler() { @Override public void onIdentityId(String identityId) { Log.d("YourMainActivity", "Identity ID = " + identityId);

// Use IdentityManager#getCachedUserID to // fetch the locally cached identity id. final String cachedIdentityId = IdentityManager.getDefaultIdentityManager().getCachedUserID(); }

@Override public void handleError(Exception exception) { Log.d("YourMainActivity", "Error in retrieving the identity" + exception); } }); } }).execute();

// .. more code }}

Android - Kotlin

1. 사전 조건• Android Studio 버전 2.33 이상을 설치합니다.• Android SDK v7.11(Nougat), API 레벨 25를 설치합니다.

2. AndroidManifest.xml에 다음을 포함해야 합니다.

<uses-permission android:name="android.permission.INTERNET"/><uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>

3. 종속성을 app/build.gradle에 추가한 다음, Android Studio의 오른쪽 위에서 Sync Now(지금 동기화)를 선택합니다. 이 라이브러리는 자격 증명 및 분석과 같은 기본 AWS 함수를 활성화합니다.

dependencies { implementation ('com.amazonaws:aws-android-sdk-mobile-client:2.7.+@aar') { transitive = true }}

4. 다음 코드를 기본 및 스타트업 활동의 onCreate 메서드에 추가합니다. AWSMobileClient는 AWS으로의 연결을 설정하고 서비스를 위한 인터페이스로서 역할을 하는 singleton입니다.

import com.amazonaws.mobile.client.AWSMobileClient;

class YourMainActivity : Activity() { companion object {

9

Page 13: AWS Mobile Hub 개발자 안내서 - 개발자 안내서 · 2020-02-07 · iOS - Swift 1.iOS를 플랫폼으로 선택하고 다음을 선택합니다. 2.Download Cloud Config(클라우드

AWS Mobile Hub 개발자 안내서 개발자 안내서Android 및 iOS

private val TAG: String = this::class.java.simpleName }

override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState);

AWSMobileClient.getInstance().initialize(this) { Log.d(TAG, "AWSMobileClient is initialized") }.execute()

// More onCreate code... }}

이것은 무엇을 합니까? AWSMobileClient는 초기화될 때다른 SDK 클라이언트 생성에 사용할 AWSCredentialsProvider 및AWSConfiguration을 구성합니다. 그 다음에 이 클라이언트는 Amazon Cognito 연동 자격증명에 대해 Sigv4.signed 네트워크 호출을 수행하여 백엔드 리소스에 사용자 액세스 권한을부여하는 AWS 자격 증명을 검색합니다. 네트워크 상호 작용이 성공하면 콜백(기술적으로는onComplete의 AWSStartUpHandler 메서드)이 호출됩니다.

앱은 이제 Mobile Hub 프로젝트에서 구성한 AWS 서비스와 상호 작용하도록 설정되었습니다.

Android Studio의 실행 아이콘(▶)을 선택하여 앱을 빌드하고 장치/에뮬레이터에서 실행합니다. AndroidLogcat 출력에서 Welcome to AWS!를 찾습니다(View > Tool Windows > Logcat(보기 > 도구 창 > 로그캣 선택)).

선택 사항: 다음 예에서는 다른 SDK 클라이언트를 인스턴스화하는 데 사용할 수 있는AWSCredentialsProvider 및 AWSConfiguration 객체에 대한 참조를 검색하는 방법을 보여줍니다. IdentityManager를 사용하여 Amazon Cognito에서 또는 로컬 캐시된 자격 증명 ID 값에서 직접 사용자의 AWS 자격 증명을 가져올 수 있습니다.

import com.amazonaws.auth.AWSCredentialsProviderimport com.amazonaws.mobile.auth.core.IdentityHandlerimport com.amazonaws.mobile.auth.core.IdentityManagerimport com.amazonaws.mobile.client.AWSMobileClientimport com.amazonaws.mobile.config.AWSConfiguration

class YourMainActivity : Activity() { companion object { private val TAG: String = this::class.java.simpleName }

private var credentialsProvider: AWSCredentialsProvider? = null private var awsConfiguration: AWSConfiguration? = null

override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState);

AWSMobileClient.getInstance().initialize(this) { credentialsProvider = AWSMobileClient.getInstance().credentialsProvider awsConfiguration = AWSMobileClient.getInstance().configuration

10

Page 14: AWS Mobile Hub 개발자 안내서 - 개발자 안내서 · 2020-02-07 · iOS - Swift 1.iOS를 플랫폼으로 선택하고 다음을 선택합니다. 2.Download Cloud Config(클라우드

AWS Mobile Hub 개발자 안내서 개발자 안내서Android 및 iOS

IdentityManager.getDefaultIdentityManager().getUserID(object : IdentityHandler { override fun handleError(exception: Exception?) { Log.e(TAG, "Retrieving identity: ${exception.message}") }

override fun onIdentityId(identityId: String?) { Log.d(TAG, "Identity = $identityId") val cachedIdentityId = IdentityManager.getDefaultIdentityManager().cachedUserID // Do something with the identity here } }) }.execute()

// More onCreate code... }}

iOS - Swift

1. 사전 조건• Xcode 버전 8.0 이상을 설치합니다.

2. Cocoapods 설치. 터미널 창에서 다음을 실행합니다.

sudo gem install cocoapods

3. Create Podfile. 터미널 창에서 프로젝트의 .xcodeproj 파일이 포함된 디렉터리로 이동하여 다음을 실행합니다.

pod init

4. 핵심 AWS Mobile SDK 구성 요소를 빌드에 추가합니다.

platform :ios, '9.0'target :'YOUR-APP-NAME' do use_frameworks! pod 'AWSMobileClient', '~> 2.6.13' # other podsend

5. 다음을 실행하여 종속 항목을 설치합니다.

pod install --repo-update

"[!] Failed to connect to GitHub to update the CocoaPods/Specs . . ."로 시작하는 오류 메시지가 표시되고 인터넷 연결이 작동하는 경우 openssl 및 Ruby 업데이트가 필요할 수있습니다.

6. pod install 명령은 새 작업 공간 파일을 생성합니다. Xcode 프로젝트를 닫고 ./YOUR-PROJECT-NAME.xcworkspace를 사용하여 다시 엽니다.

.xcworkspace만 사용합니다. 지금부터는 Xcode 프로젝트를 열 때 항상 ./YOUR-PROJECT-NAME.xcworkspace를 사용해야 합니다.

7. 코드에서 호출된 새 라이브러리로부터 API를 확인하기 위해 작업 영역에서 앱을 다시 연 후에 다시빌드합니다. 가져오기 설명문을 추가할 때마다 이렇게 하는 것이 좋습니다.

11

Page 15: AWS Mobile Hub 개발자 안내서 - 개발자 안내서 · 2020-02-07 · iOS - Swift 1.iOS를 플랫폼으로 선택하고 다음을 선택합니다. 2.Download Cloud Config(클라우드

AWS Mobile Hub 개발자 안내서 개발자 안내서Android 및 iOS

8. return true statement in didFinishLaunching 코드를 AppDelegate에 있는 다음 코드로 교체하여 AWS Mobile과 런타임 연결을 설정합니다.

import UIKitimport AWSMobileClient

@UIApplicationMainclass AppDelegate: UIResponder, UIApplicationDelegate {

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { // Override point for customization after application launch.

// Create AWSMobileClient to connect with AWS return AWSMobileClient.sharedInstance().interceptApplication( application, didFinishLaunchingWithOptions: launchOptions)

}

이것은 무엇을 합니까? AWSMobileClient 초기화가 완료되면 이 클라이언트는 AWS Cognito 연동 자격 증명에대해 Sigv4 signed 네트워크 호출을 수행하여 백엔드 리소스에 사용자 액세스 권한을 부여하는 AWS 자격 증명을 검색합니다. 네트워크 상호 작용이 성공하면 onComplete의AWSStartUpHandler 메서드가 호출됩니다.

앱은 이제 Mobile Hub 프로젝트에서 구성한 AWS 서비스와 상호 작용하도록 설정되었습니다.

Xcode 창의 왼쪽 위에 있는 실행 아이콘(▶)을 선택하거나 ⌘-R을 입력하여 앱을 빌드하고 실행합니다.로그 출력에서 Welcome to AWS!를 찾습니다.

선택 사항: AWS에 연결되어 있는지 확인하려면 AWSCore를 가져오고 AWSMobileClient를 반환하기 전에 다음 코드를 didFinishLaunchingWithOptions에 추가합니다.

import AWSCore

//. . .

AWSDDLog.add(AWSDDTTYLogger.sharedInstance)AWSDDLog.sharedInstance.logLevel = .info

선택 사항: 다음 예에서는 다른 SDK 클라이언트를 인스턴스화하는 데 사용할 수 있는 AWSCredentialsProvider 객체에 대한 참조를 검색하는 방법을 보여줍니다.AWSIdentityManager를 사용하여 Amazon Cognito에서 사용자의 AWS 자격 증명 ID를 가져올 수있습니다.

import UIKitimport AWSMobileClientimport AWSAuthCore

class ViewController: UIViewController {

@IBOutlet weak var textfield: UITextField! override func viewDidLoad() {

12

Page 16: AWS Mobile Hub 개발자 안내서 - 개발자 안내서 · 2020-02-07 · iOS - Swift 1.iOS를 플랫폼으로 선택하고 다음을 선택합니다. 2.Download Cloud Config(클라우드

AWS Mobile Hub 개발자 안내서 개발자 안내서Android 및 iOS

super.viewDidLoad() textfield.text = "View Controller Loaded"

// Get the AWSCredentialsProvider from the AWSMobileClient let credentialsProvider = AWSMobileClient.sharedInstance().getCredentialsProvider()

// Get the identity Id from the AWSIdentityManager let identityId = AWSIdentityManager.default().identityId }}

다음 단계

• 분석 추가 (p. 14)• 사용자 로그인 추가 (p. 20)• 푸시 알림 추가 (p. 43)• NoSQL 데이터베이스 추가 (p. 54)• 사용자 파일 스토리지 추가 (p. 66)• 클라우드 로직 추가 (p. 75)• 메시징 추가 (p. 84)• 대화형 봇 추가 (p. 85)

Amazon Pinpoint를 사용하여 모바일 앱에 분석 추가

다음 참조 콘텐츠는 iOS 및 Android용 AWS Mobile SDK를 사용해 구성된 기존 앱에만 적용됩니다. 새 모바일 또는 웹 앱을 빌드하거나 기존 앱에 클라우드 기능을 추가하고 있다면 대신 Amplify Framework 웹사이트를 방문하십시오. iOS 및 Android용 AWS Mobile SDK의 설명서는 Amplify Framework의 일부로 제공됩니다.

개요

앱의 활용도, 수익 창출 및 사용자 참여를 향상시키는 데 도움이 되는 데이터를 수집합니다. Mobile Hub는Amazon Pinpoint 서비스를 사용하는 메시징 및 분석 (p. 196) 기능을 활성화할 경우 분석 백엔드를 배포합니다.

백엔드 설정

1. 진행하기 전에 시작하기 (p. 3) 단계를 완료합니다.2. 프로젝트를 생성할 때 기본적으로 백엔드에서 분석이 활성화됩니다. 백엔드의 분석 타일에 녹색 확인 표

식 표시되어 이 기능이 활성화되었음을 나타냅니다. 확인 표시가 없으면 분석을 선택한 다음 활성화를 선택합니다.

13

Page 17: AWS Mobile Hub 개발자 안내서 - 개발자 안내서 · 2020-02-07 · iOS - Swift 1.iOS를 플랫폼으로 선택하고 다음을 선택합니다. 2.Download Cloud Config(클라우드

AWS Mobile Hub 개발자 안내서 개발자 안내서Android 및 iOS

백엔드에 연결

다음 단계에 따라 모바일 앱에 분석을 추가하고 Amazon Pinpoint를 통해 결과를 모니터링합니다.

분석 추가

Android - Java

1. 다음과 같이 AWS Mobile SDK 구성 요소를 설정합니다.a. app/build.gradle 종속 항목 목록에 다음 라이브러리를 포함시킵니다.

dependencies{ implementation 'com.amazonaws:aws-android-sdk-pinpoint:2.7.+' implementation ('com.amazonaws:aws-android-sdk-mobile-client:2.7.+@aar') { transitive = true } // other dependencies . . .}

• aws-android-sdk-pinpoint 라이브러리를 이용해 Amazon Pinpoint에 분석을 전송할 수 있습니다.

• aws-android-sdk-mobile-client 라이브러리를 이용해 AWS 자격 증명 공급자와 구성에액세스할 수 있습니다.

b. 앱 매니페스트에 필수 권한을 추가합니다.

AWS Mobile SDK에는 INTERNET 및 ACCESS_NETWORK_STATE 권한이 필요합니다. 이 두 가지권한은 AndroidManifest.xml 파일에 정의되어 있습니다.

<uses-permission android:name="android.permission.INTERNET"/><uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>

2. 세션 시작과 중지를 캡처하는 호출을 추가합니다.

앱 세션의 시작과 중지를 계측하는 일반적인 위치는 다음 세 곳입니다.• Application.onCreate() 메서드에서 시작되는 세션.• 앱 첫 활동의 onCreate() 메서드에서 시작되는 세션.• ActivityLifecycleCallbacks 클래스에서 시작 및/또는 중지되는 세션.

다음 예에서는 OnCreate의 MainActivity 이벤트에서 세션이 시작되는 것을 보여줍니다.

import android.support.v7.app.AppCompatActivity;import android.os.Bundle;

import com.amazonaws.mobileconnectors.pinpoint.PinpointManager;import com.amazonaws.mobileconnectors.pinpoint.PinpointConfiguration;

14

Page 18: AWS Mobile Hub 개발자 안내서 - 개발자 안내서 · 2020-02-07 · iOS - Swift 1.iOS를 플랫폼으로 선택하고 다음을 선택합니다. 2.Download Cloud Config(클라우드

AWS Mobile Hub 개발자 안내서 개발자 안내서Android 및 iOS

import com.amazonaws.mobile.client.AWSMobileClient;

public class MainActivity extends AppCompatActivity {

public static PinpointManager pinpointManager;

@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main);

// Initialize the AWS Mobile Client AWSMobileClient.getInstance().initialize(this).execute();

PinpointConfiguration config = new PinpointConfiguration( MainActivity.this, AWSMobileClient.getInstance().getCredentialsProvider(), AWSMobileClient.getInstance().getConfiguration() ); pinpointManager = new PinpointManager(config); pinpointManager.getSessionClient().startSession(); pinpointManager.getAnalyticsClient().submitEvents(); }}

세션을 중지하려면 캡처하고 싶은 세션의 마지막 지점에서 stopSession() 및submitEvents()를 사용합니다.

// . . .

pinpointManager.getSessionClient().stopSession();pinpointManager.getAnalyticsClient().submitEvents();

// . . .

Android - Kotlin

1. 다음과 같이 AWS Mobile SDK 구성 요소를 설정합니다.a. app/build.gradle 종속 항목 목록에 다음 라이브러리를 포함시킵니다.

dependencies { implementation 'com.amazonaws:aws-android-sdk-pinpoint:2.7.+' implementation ('com.amazonaws:aws-android-sdk-mobile-client:2.7.+@aar') { transitive = true } // other dependencies . . .}

• aws-android-sdk-pinpoint 라이브러리를 이용해 Amazon Pinpoint에 분석을 전송할 수 있습니다.

• aws-android-sdk-mobile-client 라이브러리를 이용해 AWS 자격 증명 공급자와 구성에액세스할 수 있습니다.

b. 앱 매니페스트에 필수 권한을 추가합니다.

AWS Mobile SDK에는 INTERNET 및 ACCESS_NETWORK_STATE 권한이 필요합니다. 이 두 가지권한은 AndroidManifest.xml 파일에 정의되어 있습니다.

<uses-permission android:name="android.permission.INTERNET"/><uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>

15

Page 19: AWS Mobile Hub 개발자 안내서 - 개발자 안내서 · 2020-02-07 · iOS - Swift 1.iOS를 플랫폼으로 선택하고 다음을 선택합니다. 2.Download Cloud Config(클라우드

AWS Mobile Hub 개발자 안내서 개발자 안내서Android 및 iOS

2. 세션 시작과 중지를 캡처하는 호출을 추가합니다.

앱 세션의 시작과 중지를 계측하는 일반적인 위치는 다음 세 곳입니다.• Application.onCreate() 메서드에서 시작되는 세션.• 앱 첫 활동의 onCreate() 메서드에서 시작되는 세션.• ActivityLifecycleCallbacks 클래스에서 시작 및/또는 중지되는 세션.

다음 예에서는 OnCreate의 MainActivity 이벤트에서 세션이 시작되는 것을 보여줍니다.

import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import com.amazonaws.mobileconnectors.pinpoint.PinpointManager;import com.amazonaws.mobileconnectors.pinpoint.PinpointConfiguration;import com.amazonaws.mobile.client.AWSMobileClient;

class MainActivity : AppCompatActivity() { companion object { var pinpointManager: PinpointManager? = null }

override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main)

// Initialize the AWS Mobile client AWSMobileClient.getInstance().initialize(this).execute()

with (AWSMobileClient.getInstance()) { val config = PinpointConfiguration(this, credentialsProvider, configuration) pinpointManager = PinpointManager(config) }

pinpointManager?.sessionClient?.startSession() pinpointManager?.analyticsClient?.submitEvents() }}

세션을 중지하려면 캡처하고 싶은 세션의 마지막 지점에서 stopSession() 및submitEvents()를 사용합니다.

// . . .

pinpointManager?.sessionClient?.stopSession();pinpointManager?.analyticsClient?.submitEvents();

// . . .

iOS - Swift

1. 다음과 같이 AWS Mobile SDK 구성 요소를 설정합니다.2. AWS Mobile SDK를 설치하도록 구성한 Podfile에는 다음을 포함해야 합니다.

platform :ios, '9.0'target :'YourAppName' do use_frameworks!

pod 'AWSPinpoint', '~> 2.6.13'

16

Page 20: AWS Mobile Hub 개발자 안내서 - 개발자 안내서 · 2020-02-07 · iOS - Swift 1.iOS를 플랫폼으로 선택하고 다음을 선택합니다. 2.Download Cloud Config(클라우드

AWS Mobile Hub 개발자 안내서 개발자 안내서Android 및 iOS

# other pods

end

계속하기 전에 pod install --repo-update를 실행합니다.

"[!] Failed to connect to GitHub to update the CocoaPods/Specs . . ."로 시작하는 오류 메시지가 표시되고 인터넷 연결이 작동하는 경우 openssl 및 Ruby 업데이트가 필요할 수있습니다.

3. Amazon Pinpoint API를 호출하는 클래스에서 다음 가져오기 문을 사용해야 합니다.

import AWSCoreimport AWSPinpoint

4. 다음 코드를 앱의 application(_:didFinishLaunchingWithOptions:)의AppDelegate.swift 메서드에 삽입합니다.

class AppDelegate: UIResponder, UIApplicationDelegate {

var pinpoint: AWSPinpoint?

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {

//. . .

// Initialize Pinpoint pinpoint = AWSPinpoint(configuration: AWSPinpointConfiguration.defaultPinpointConfiguration(launchOptions: launchOptions))

//. . . }}

분석 모니터링

앱을 구축 및 실행하여 Amazon Pinpoint에서 사용 지표를 확인합니다.

1. 앱에서 들어 오는 분석의 시각화를 확인하려면 Mobile Hub 콘솔에서 프로젝트를 엽니다.2. 오른쪽 위에 있는 분석을 선택하여 Amazon Pinpoint 콘솔을 엽니다.

17

Page 21: AWS Mobile Hub 개발자 안내서 - 개발자 안내서 · 2020-02-07 · iOS - Swift 1.iOS를 플랫폼으로 선택하고 다음을 선택합니다. 2.Download Cloud Config(클라우드

AWS Mobile Hub 개발자 안내서 개발자 안내서Android 및 iOS

1. 콘솔의 왼쪽에 있는 아이콘에서 분석을 선택하고 앱의 사용 그래프를 봅니다. 지표가 표시되려면 최대 15분이 걸릴 수 있습니다.

Amazon Pinpoint에 대해 자세히 알아봅니다.

사용자 지정 앱 분석 활성화

코드를 계측하여 정의한 속성 등 앱 사용 이벤트 정보를 캡처합니다. Amazon Pinpoint 콘솔에서 사용자 지정사용 이벤트 데이터의 그래프를 사용합니다. Amazon Pinpoint Funnel Analytics를 이용하여 설계하는 모델과 사용자의 행동 간의 관계를 시각화하거나 심층 분석을 위해 데이터 스트리밍을 사용합니다.

다음 단계를 사용하여 앱에 대한 Amazon Pinpoint 사용자 지정 분석을 구현합니다.

Android - Java

import com.amazonaws.mobileconnectors.pinpoint.analytics.AnalyticsEvent;

public void logEvent() { final AnalyticsEvent event = pinpointManager.getAnalyticsClient().createEvent("EventName") .withAttribute("DemoAttribute1", "DemoAttributeValue1") .withAttribute("DemoAttribute2", "DemoAttributeValue2") .withMetric("DemoMetric1", Math.random());

pinpointManager.getAnalyticsClient().recordEvent(event); pinpointManager.getAnalyticsClient().submitEvents();}

Android - Kotlin

import com.amazonaws.mobileconnectors.pinpoint.analytics.AnalyticsEvent;

fun logEvent() { pintpointManager?.analyticsClient?.let { val event = it.createEvent("EventName") .withAttribute("DemoAttribute1", "DemoAttributeValue1")

18

Page 22: AWS Mobile Hub 개발자 안내서 - 개발자 안내서 · 2020-02-07 · iOS - Swift 1.iOS를 플랫폼으로 선택하고 다음을 선택합니다. 2.Download Cloud Config(클라우드

AWS Mobile Hub 개발자 안내서 개발자 안내서Android 및 iOS

.withAttribute("DemoAttribute2", "DemoAttributeValue2") .withMetric("DemoMetric1", Math.random()); it.recordEvent(event) it.submitEvents()}

iOS - Swift

func logEvent() {

let pinpointAnalyticsClient = AWSPinpoint(configuration: AWSPinpointConfiguration.defaultPinpointConfiguration(launchOptions: nil)).analyticsClient

let event = pinpointAnalyticsClient.createEvent(withEventType: "EventName") event.addAttribute("DemoAttributeValue1", forKey: "DemoAttribute1") event.addAttribute("DemoAttributeValue2", forKey: "DemoAttribute2") event.addMetric(NSNumber.init(value: arc4random() % 65535), forKey: "EventName") pinpointAnalyticsClient.record(event) pinpointAnalyticsClient.submitEvents()

}

앱을 빌드, 실행 및 시도한 다음, Amazon Pinpoint 콘솔의 이벤트 탭에서 사용자 지정 이벤트를 봅니다(Mobile Hub 프로젝트/분석 > Amazon Pinpoint 콘솔 / 분석 > 이벤트 사용). 이벤트 드롭다운 메뉴에서 이벤트의 이름을 찾습니다.

수익 분석 활성화

Amazon Pinpoint는 수입 창출 이벤트 데이터 수집을 지원합니다. 다음 단계를 사용하여 앱을 통한 구입 관련분석을 배치 및 설계합니다.

Android - Java

import com.amazonaws.mobileconnectors.pinpoint.analytics.monetization.AmazonMonetizationEventBuilder;

public void logMonetizationEvent() { final AnalyticsEvent event = AmazonMonetizationEventBuilder.create(pinpointManager.getAnalyticsClient()) .withFormattedItemPrice("$10.00") .withProductId("DEMO_PRODUCT_ID") .withQuantity(1.0) .withProductId("DEMO_TRANSACTION_ID").build();

pinpointManager.getAnalyticsClient().recordEvent(event); pinpointManager.getAnalyticsClient().submitEvents();}

Android - Kotlin

import com.amazonaws.mobileconnectors.pinpoint.analytics.monetization.AmazonMonetizationEventBuilder;

public void logMonetizationEvent() { pinpointManager?.analyticsClient?.let { val event = AmazonMonetizationEventBuilder.create(it) .withFormattedItemPrice("$10.00") .withProductId("DEMO_PRODUCT_ID")

19

Page 23: AWS Mobile Hub 개발자 안내서 - 개발자 안내서 · 2020-02-07 · iOS - Swift 1.iOS를 플랫폼으로 선택하고 다음을 선택합니다. 2.Download Cloud Config(클라우드

AWS Mobile Hub 개발자 안내서 개발자 안내서Android 및 iOS

.withQuantity(1.0) .withProductId("DEMO_TRANSACTION_ID").build(); it.recordEvent(event) it.submitEvents() }}

iOS - Swift

func sendMonetizationEvent() { let pinpointClient = AWSPinpoint(configuration: AWSPinpointConfiguration.defaultPinpointConfiguration(launchOptions: nil))

let pinpointAnalyticsClient = pinpointClient.analyticsClient

let event = pinpointAnalyticsClient.createVirtualMonetizationEvent(withProductId: "DEMO_PRODUCT_ID", withItemPrice: 1.00, withQuantity: 1, withCurrency: "USD") pinpointAnalyticsClient.record(event) pinpointAnalyticsClient.submitEvents() }

Amazon Cognito를 사용하여 모바일 앱에 사용자 로그인 추가

다음 참조 콘텐츠는 iOS 및 Android용 AWS Mobile SDK를 사용해 구성된 기존 앱에만 적용됩니다. 새 모바일 또는 웹 앱을 빌드하거나 기존 앱에 클라우드 기능을 추가하고 있다면 대신 Amplify Framework 웹사이트를 방문하십시오. iOS 및 Android용 AWS Mobile SDK의 설명서는 Amplify Framework의 일부로 제공됩니다.

사용자가 Facebook, Google 또는 고유한 사용자 디렉터리의 자격 증명을 사용하여 로그인하도록 할 수 있습니다. AWS Mobile Hub 사용자 로그인 (p. 204) 기능은 Amazon Cognito에서 지원되며, SDK는 사용자가구성하는 자격 증명 공급자(들)를 토대로 사전 빌드된 구성 가능한 로그인 UI를 제공합니다.

백엔드 설정

사전 조건 진행하기 전에 먼저 시작하기 (p. 3) 단계를 완료합니다.

Email & Password

1. User Sign-in(사용자 로그인) 활성화: Mobile Hub 콘솔에서 프로젝트를 열고 User Sign-in(사용자 로그인) 타일을 선택합니다.

2. Email and Password sign-in(이메일 및 암호 로그인)을 선택합니다.

20

Page 24: AWS Mobile Hub 개발자 안내서 - 개발자 안내서 · 2020-02-07 · iOS - Swift 1.iOS를 플랫폼으로 선택하고 다음을 선택합니다. 2.Download Cloud Config(클라우드

AWS Mobile Hub 개발자 안내서 개발자 안내서Android 및 iOS

• Create a new user pool(새 사용자 풀 생성) 기능을 선택한 다음, 허용된 로그인 방법, 멀티 팩터 인증, 암호 요구 사항 등 로그인 설정을 선택합니다. 그런 다음 Create user pool(사용자 풀 생성)을 선택합니다.

Or:• Import an existing user pool(기존 사용자 풀 가져오기)를 선택한 다음, 계정에서 사용할 수 있는 풀

목록에서 사용자 풀을 선택합니다. 로그인 필수 여부를 선택한 다음, Create user pool(사용자 풀 생성)을 선택합니다. 다른 앱이 사용 중인 사용자 풀을 가져오는 경우 두 앱이 사용자 디렉터리를 공유하며 동일한 사용자 집합의 로그인을 인증합니다.

21

Page 25: AWS Mobile Hub 개발자 안내서 - 개발자 안내서 · 2020-02-07 · iOS - Swift 1.iOS를 플랫폼으로 선택하고 다음을 선택합니다. 2.Download Cloud Config(클라우드

AWS Mobile Hub 개발자 안내서 개발자 안내서Android 및 iOS

3. 공급자 구성이 완료되면 상단의 파란색 배너에서 Click here to return to project details page(프로젝트 세부 정보 페이지로 돌아가려면 여기를 클릭)을 선택합니다.

4. 프로젝트 세부 정보 페이지에서 깜박이는 통합 버튼을 선택한 다음, 백엔드 연결 절차를 완료합니다.

프로젝트에 둘 이상의 플랫폼을 대상으로 한 앱이 포함되어 있다면 이러한 절차를 완료해야 하는 부분에 깜박이는 통합 버튼이 표시됩니다. 이 미리 알림 배너는 프로젝트에서 각 앱의 구성을 업데이트하는 절차를 완료할 때까지 유지됩니다.

5. 이메일 및 암호 로그인 설정 (p. 24) 단계에 따라 앱에서 백엔드에 연결합니다.

Facebook

1. User Sign-in(사용자 로그인) 활성화: Mobile Hub 콘솔에서 프로젝트를 열고 User Sign-in(사용자 로그인) 타일을 선택합니다.

2. Facebook 로그인 구성: 이 기능을 선택한 다음 Facebook 앱 ID를 입력한 다음 Enable Facebooklogin(Facebook 로그인 활성화)을 선택합니다. Facebook 앱 ID를 검색하거나 생성하려면 Facebook인증 설정을 참조하십시오.

22

Page 26: AWS Mobile Hub 개발자 안내서 - 개발자 안내서 · 2020-02-07 · iOS - Swift 1.iOS를 플랫폼으로 선택하고 다음을 선택합니다. 2.Download Cloud Config(클라우드

AWS Mobile Hub 개발자 안내서 개발자 안내서Android 및 iOS

3. 공급자 구성이 완료되면 상단의 파란색 배너에서 Click here to return to project details page(프로젝트 세부 정보 페이지로 돌아가려면 여기를 클릭)을 선택합니다.

4. 프로젝트 세부 정보 페이지에서 깜박이는 통합 버튼을 선택한 다음, 백엔드 연결 절차를 완료합니다.

프로젝트에 둘 이상의 플랫폼을 대상으로 한 앱이 포함되어 있다면 이러한 절차를 완료해야 하는 부분에 깜박이는 통합 버튼이 표시됩니다. 이 미리 알림 배너는 프로젝트에서 각 앱의 구성을 업데이트하는 절차를 완료할 때까지 유지됩니다.

5. Facebook 로그인 설정 (p. 30) 단계에 따라 앱에서 백엔드에 연결합니다.

Google

1. User Sign-in(사용자 로그인) 활성화: Mobile Hub 콘솔에서 프로젝트를 열고 User Sign-in(사용자 로그인) 타일을 선택합니다.

2. Google 로그인 구성: 이 기능을 선택하고 Google 웹 앱 클라이언트 ID와 Google Android 또는 iOS 클라이언트 ID(또는 둘 다)를 입력한 다음, Enable Google Sign-In(Google 로그인 활성화)을 선택합니다. Google 클라이언트 ID를 검색하거나 생성하려면 Google 인증 설정을 참조하십시오.

23

Page 27: AWS Mobile Hub 개발자 안내서 - 개발자 안내서 · 2020-02-07 · iOS - Swift 1.iOS를 플랫폼으로 선택하고 다음을 선택합니다. 2.Download Cloud Config(클라우드

AWS Mobile Hub 개발자 안내서 개발자 안내서Android 및 iOS

3. 공급자 구성이 완료되면 상단의 파란색 배너에서 Click here to return to project details page(프로젝트 세부 정보 페이지로 돌아가려면 여기를 클릭)을 선택합니다.

4. 프로젝트 세부 정보 페이지에서 깜박이는 통합 버튼을 선택한 다음, 백엔드 연결 절차를 완료합니다.

프로젝트에 둘 이상의 플랫폼을 대상으로 한 앱이 포함되어 있다면 이러한 절차를 완료해야 하는 부분에 깜박이는 통합 버튼이 표시됩니다. 이 미리 알림 배너는 프로젝트에서 각 앱의 구성을 업데이트하는 절차를 완료할 때까지 유지됩니다.

5. Google 로그인 설정 (p. 37) 단계에 따라 앱에서 백엔드에 연결합니다.

모바일 앱에서 이메일 및 암호 로그인 설정

플랫폼 선택:

Android - Java

Android API 레벨 23 이상 사용 Android 로그인용 AWS Mobile SDK 라이브러리(aws-android-sdk-auth-ui)는 사용자가 구성한 로그인 공급자에게 SignInUI를 제시하기위한 활동 및 보기를 제공합니다. 이 라이브러리는 Android SDK API 레벨 23 이상에 종속됩니다.

1. AWS 백엔드 구성 파일을 추가 또는 업데이트하여 새 로그인을 포함시킵니다. 자세한 내용은 백엔드설정 시작하기 (p. 3) 섹션의 마지막 단계를 참조하십시오.

2. 이러한 권한을 AndroidManifest.xml 파일에 추가합니다.

<uses-permission android:name="android.permission.INTERNET"/>

24

Page 28: AWS Mobile Hub 개발자 안내서 - 개발자 안내서 · 2020-02-07 · iOS - Swift 1.iOS를 플랫폼으로 선택하고 다음을 선택합니다. 2.Download Cloud Config(클라우드

AWS Mobile Hub 개발자 안내서 개발자 안내서Android 및 iOS

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>

3. 이러한 종속성을 app/build.gradle 파일에 추가합니다.

dependencies { // Mobile Client for initializing the SDK implementation ('com.amazonaws:aws-android-sdk-mobile-client:2.7.+@aar') { transitive = true }

// Cognito UserPools for SignIn implementation 'com.android.support:support-v4:24.+' implementation ('com.amazonaws:aws-android-sdk-auth-userpools:2.7.+@aar') { transitive = true }

// Sign in UI Library implementation 'com.android.support:appcompat-v7:24.+' implementation ('com.amazonaws:aws-android-sdk-auth-ui:2.7.+@aar') { transitive = true }}

4. 로그인 화면을 표시하는 활동을 생성합니다.

Android Studio에서 File > New > Activity > Basic Activity(파일 > 새로 생성 > 활동 > 기본 활동)를선택한 다음, AuthenticatorActivity와 같은 활동 이름을 입력합니다. 이 활동을 시작 활동으로 설정하려면 .LAUNCHER를 포함하는 의도한 필터 블록을 앱의 AndroidManifest.xml에 있는AuthenticatorActivity로 이동합니다.

<activity android:name=".AuthenticatorActivity"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter></activity>

5. onCreate를 호출하기 위해 AuthenticatorActivity의 AWSMobileClient 함수를 업데이트합니다. 이 구성 요소는 로그인 인증 세션을 다시 시작하는 기능을 제공합니다. 또한 네트워크 호출이 사용자에게 AWS 리소스 액세스를 허용하는 AWS 자격 증명을 검색하고 해당 트랜잭션이 완료되는 시점에 대해 콜백을 등록하도록 합니다.

사용자가 로그인한 경우 앱이 NextActivity로 이동합니다. 그렇지 않으면 사용자에게 이미 만들어진 구성 가능한 AWS Mobile 로그인 UI가 표시됩니다. 사용자가 로그인에 성공하면 표시되는NextActivity Activity 클래스.

import android.app.Activity;import android.os.Bundle;

import com.amazonaws.mobile.auth.ui.SignInUI;import com.amazonaws.mobile.client.AWSMobileClient;import com.amazonaws.mobile.client.AWSStartupHandler;import com.amazonaws.mobile.client.AWSStartupResult;

public class AuthenticatorActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_authenticator);

// Add a call to initialize AWSMobileClient AWSMobileClient.getInstance().initialize(this, new AWSStartupHandler() { @Override public void onComplete(AWSStartupResult awsStartupResult) { SignInUI signin = (SignInUI) AWSMobileClient.getInstance().getClient(

25

Page 29: AWS Mobile Hub 개발자 안내서 - 개발자 안내서 · 2020-02-07 · iOS - Swift 1.iOS를 플랫폼으로 선택하고 다음을 선택합니다. 2.Download Cloud Config(클라우드

AWS Mobile Hub 개발자 안내서 개발자 안내서Android 및 iOS

AuthenticatorActivity.this, SignInUI.class); signin.login( AuthenticatorActivity.this, NextActivity.class).execute(); } }).execute(); }}

Android Studio의 실행 아이콘(▶)을 선택하여 앱을 빌드하고 장치/에뮬레이터에서 실행합니다. 앱에 대해 이미 만들어진 로그인 UI가 표시됩니다. UI를 사용자 지정하는 방법에 대한 자세한 내용은

API 참조 • AWSMobileClientSDK를 초기화하는 라이브러리는 CredentialsProvider 및AWSConfiguration 객체를 구성하고, AWS 자격 증명을 가져오고, SDK SignInUI 클라이언트 인스턴스를 생성합니다.

• Auth UserPools관리형 이메일/암호 로그인 UI를 제공하는 Amazon CognitoUserPools용 래퍼 라이브러리.

• Auth CoreAmazon Cognito 연동 자격 증명을 사용하여 로그인 공급자 인증 토큰을 캐시 및 연동하고, 연동 AWS 자격 증명을 캐시하고,로그인 흐름을 처리하는 라이브러리.

Android - Kotlin

Android API 레벨 23 이상 사용 Android 로그인용 AWS Mobile SDK 라이브러리(aws-android-sdk-auth-ui)는 사용자가 구성한 로그인 공급자에게 SignInUI를 제시하기위한 활동 및 보기를 제공합니다. 이 라이브러리는 Android SDK API 레벨 23 이상에 종속됩니다.

1. AWS 백엔드 구성 파일을 추가 또는 업데이트하여 새 로그인을 포함시킵니다. 자세한 내용은 백엔드설정 시작하기 (p. 3) 섹션의 마지막 단계를 참조하십시오.

2. 이러한 권한을 AndroidManifest.xml 파일에 추가합니다.

<uses-permission android:name="android.permission.INTERNET"/><uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>

3. 이러한 종속성을 app/build.gradle 파일에 추가합니다.

dependencies { // Mobile Client for initializing the SDK implementation ('com.amazonaws:aws-android-sdk-mobile-client:2.7.+@aar') { transitive = true }

// Cognito UserPools for SignIn implementation 'com.android.support:support-v4:24.+' implementation ('com.amazonaws:aws-android-sdk-auth-userpools:2.7.+@aar') { transitive = true }

26

Page 30: AWS Mobile Hub 개발자 안내서 - 개발자 안내서 · 2020-02-07 · iOS - Swift 1.iOS를 플랫폼으로 선택하고 다음을 선택합니다. 2.Download Cloud Config(클라우드

AWS Mobile Hub 개발자 안내서 개발자 안내서Android 및 iOS

// Sign in UI Library implementation 'com.android.support:appcompat-v7:24.+' implementation ('com.amazonaws:aws-android-sdk-auth-ui:2.7.+@aar') { transitive = true }}

4. 로그인 화면을 표시하는 활동을 생성합니다.

Android Studio에서 File > New > Activity > Basic Activity(파일 > 새로 생성 > 활동 > 기본 활동)를선택한 다음, AuthenticatorActivity와 같은 활동 이름을 입력합니다. 이 활동을 시작 활동으로 설정하려면 .LAUNCHER를 포함하는 의도한 필터 블록을 앱의 AndroidManifest.xml에 있는AuthenticatorActivity로 이동합니다.

<activity android:name=".AuthenticatorActivity"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter></activity>

5. onCreate를 호출하기 위해 AuthenticatorActivity의 AWSMobileClient 함수를 업데이트합니다. 이 구성 요소는 로그인 인증 세션을 다시 시작하는 기능을 제공합니다. 또한 네트워크 호출이 사용자에게 AWS 리소스 액세스를 허용하는 AWS 자격 증명을 검색하고 해당 트랜잭션이 완료되는 시점에 대해 콜백을 등록하도록 합니다.

사용자가 로그인한 경우 앱이 NextActivity로 이동합니다. 그렇지 않으면 사용자에게 이미 만들어진 구성 가능한 AWS Mobile 로그인 UI가 표시됩니다. 사용자가 로그인에 성공하면 표시되는NextActivity Activity 클래스.

import android.app.Activity;import android.os.Bundle;

import com.amazonaws.mobile.auth.ui.SignInUI;import com.amazonaws.mobile.client.AWSMobileClient;import com.amazonaws.mobile.client.AWSStartupHandler;import com.amazonaws.mobile.client.AWSStartupResult;

class AuthenticatorActivity : Activity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState)

AWSMobileClient.getInstance().initialize(this) { val ui = AWSMobileClient.getInstance().getClient( this@AuthenticatorActivity, SignInUI::class.java) as SignInUI? ui?.login( this@AuthenticatorActivity, MainActivity::class.java)?.execute() }.execute()}

Android Studio의 실행 아이콘(▶)을 선택하여 앱을 빌드하고 장치/에뮬레이터에서 실행합니다. 앱에 대해 이미 만들어진 로그인 UI가 표시됩니다. 다음 단계를 확인하여UI를 사용자 지정하는방법에 대해 알아봅니다.

API 참조 • AWSMobileClientSDK를 초기화하는 라이브러리는 CredentialsProvider 및AWSConfiguration 객체를 구성하고, AWS 자격 증명을 가져오고, SDK SignInUI 클라이언트 인스턴스를 생성합니다.

27

Page 31: AWS Mobile Hub 개발자 안내서 - 개발자 안내서 · 2020-02-07 · iOS - Swift 1.iOS를 플랫폼으로 선택하고 다음을 선택합니다. 2.Download Cloud Config(클라우드

AWS Mobile Hub 개발자 안내서 개발자 안내서Android 및 iOS

• Auth UserPools관리형 이메일/암호 로그인 UI를 제공하는 Amazon CognitoUserPools용 래퍼 라이브러리.

• Auth CoreAmazon Cognito 연동 자격 증명을 사용하여 로그인 공급자 인증 토큰을 캐시 및 연동하고, 연동 AWS 자격 증명을 캐시하고,로그인 흐름을 처리하는 라이브러리.

iOS - Swift

1. AWS 백엔드 구성 파일을 추가 또는 업데이트하여 새 로그인을 포함시킵니다. 자세한 내용은 백엔드설정 시작하기 (p. 3) 섹션의 마지막 단계를 참조하십시오.

2. 다음 종속성을 프로젝트의 Podfile에 추가합니다.

platform :ios, '9.0'target :'YOUR-APP-NAME' do use_frameworks! pod 'AWSUserPoolsSignIn', '~> 2.6.13' pod 'AWSAuthUI', '~> 2.6.13' pod 'AWSMobileClient', '~> 2.6.13' # other podsend

3. SDK 라이브러리를 로컬 리포지토리로 가져옵니다.

$ pod install --repo-update

"[!] Failed to connect to GitHub to update the CocoaPods/Specs . . ."로 시작하는 오류 메시지가 표시되고 인터넷 연결이 작동하는 경우 openssl 및 Ruby 업데이트가 필요할 수있습니다.

4. AWSMobileClient를 생성하고 SDK를 초기화합니다.

AWSMobileClient 인스턴스를 생성하는 코드를 application:open url의AppDelegate.swift 함수에 추가해 앞서 로그인한 인증 세션을 다시 시작합니다.

그런 다음 또 다른 AWSMobileClient 인스턴스를 didFinishLaunching 함수에 추가해 로그인공급자를 등록하고, 사용자가 로그인 하면 AWS가 액세스 인증에 사용할 Amazon Cognito 자격 증명을 가져옵니다.

import UIKit

import AWSMobileClient

@UIApplicationMain

class AppDelegate: UIResponder, UIApplicationDelegate {

// Add a AWSMobileClient call in application:open url func application(_ application: UIApplication, open url: URL, sourceApplication: String?, annotation: Any) -> Bool {

return AWSMobileClient.sharedInstance().interceptApplication( application, open: url, sourceApplication: sourceApplication, annotation: annotation)

28

Page 32: AWS Mobile Hub 개발자 안내서 - 개발자 안내서 · 2020-02-07 · iOS - Swift 1.iOS를 플랫폼으로 선택하고 다음을 선택합니다. 2.Download Cloud Config(클라우드

AWS Mobile Hub 개발자 안내서 개발자 안내서Android 및 iOS

}

// Add a AWSMobileClient call in application:didFinishLaunching func application( _ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {

return AWSMobileClient.sharedInstance().interceptApplication( application, didFinishLaunchingWithOptions: launchOptions) }

// Other functions in AppDelegate . . .

}

5. SDK에서 제공되는 라이브러리를 호출하여 로그인 UI를 구현합니다.

import UIKitimport AWSAuthCoreimport AWSAuthUI

class SampleViewController: UIViewController {

override func viewDidLoad() {

super.viewDidLoad()

if !AWSSignInManager.sharedInstance().isLoggedIn { AWSAuthUIViewController .presentViewController(with: self.navigationController!, configuration: nil, completionHandler: { (provider: AWSSignInProvider, error: Error?) in if error != nil { print("Error occurred: \(String(describing: error))") } else { // Sign in successful. } }) } }}

Xcode 창의 왼쪽 위에 있는 실행 아이콘(▶)을 선택하거나 ⌘-R을 입력하여 앱을 빌드하고 실행합니다.앱에 대해 미리 빌드된 로그인 UI가 표시됩니다. 다음 단계를 확인하여UI를 사용자 지정하는방법에 대해알아봅니다.

API 참조 • AWSMobileClientSDK를 초기화하고, AWS 자격 증명을 가져오고, SDK SignInUI클라이언트 인스턴스를 생성하는 라이브러리.

• Auth UserPools관리형 이메일/암호 로그인 UI를 제공하는 Amazon CognitoUserPools용 래퍼 라이브러리.

• Auth Core

29

Page 33: AWS Mobile Hub 개발자 안내서 - 개발자 안내서 · 2020-02-07 · iOS - Swift 1.iOS를 플랫폼으로 선택하고 다음을 선택합니다. 2.Download Cloud Config(클라우드

AWS Mobile Hub 개발자 안내서 개발자 안내서Android 및 iOS

Amazon Cognito 연동 자격 증명을 사용하여 로그인 공급자 인증 토큰을 캐시 및 연동하고, 연동 AWS 자격 증명을 캐시하고,로그인 흐름을 처리하는 라이브러리.

모바일 앱에서 Facebook 로그인 설정

Android - Java

Android API 레벨 23 이상 사용 Android 로그인용 AWS Mobile SDK 라이브러리(aws-android-sdk-auth-ui)는 사용자가 구성한 로그인 공급자에게 SignInUI를 제시하기위한 활동 및 보기를 제공합니다. 이 라이브러리는 Android SDK API 레벨 23 이상에 종속됩니다.

1. AWS 백엔드 구성 파일을 추가 또는 업데이트하여 새 로그인을 포함시킵니다. 자세한 내용은 백엔드설정 시작하기 (p. 3) 섹션의 마지막 단계를 참조하십시오.

2. 다음 권한 및 활동을 AndroidManifest.xml 파일에 추가합니다.

<!-- ... -->

<uses-permission android:name="android.permission.INTERNET"/><uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>

<!-- ... -->

<activity android:name="com.facebook.FacebookActivity" android:exported="true"> <intent-filter> <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.BROWSABLE" /> <data android:scheme="@string/fb_login_protocol_scheme" /> </intent-filter></activity>

<!-- ... -->

<meta-data android:name="com.facebook.sdk.ApplicationId" android:value="@string/facebook_app_id" />

<!-- ... -->

3. 다음 종속성을 app/build.gradle 파일에 추가합니다.

dependencies { // Mobile Client for initializing the SDK implementation ('com.amazonaws:aws-android-sdk-mobile-client:2.7.+@aar') { transitive = true }

// Facebook SignIn implementation 'com.android.support:support-v4:24.+' implementation ('com.amazonaws:aws-android-sdk-auth-facebook:2.7.+@aar') { transitive = true }

// Sign in UI implementation 'com.android.support:appcompat-v7:24.+'

30

Page 34: AWS Mobile Hub 개발자 안내서 - 개발자 안내서 · 2020-02-07 · iOS - Swift 1.iOS를 플랫폼으로 선택하고 다음을 선택합니다. 2.Download Cloud Config(클라우드

AWS Mobile Hub 개발자 안내서 개발자 안내서Android 및 iOS

implementation ('com.amazonaws:aws-android-sdk-auth-ui:2.7.+@aar') { transitive = true }}

4. strings.xml에서 Facebook 앱 ID에 대한 문자열 정의와 로그인 프로토콜 체계를 추가합니다. 두경우 모두 이 값에 Facebook AppID가 포함되어야 하며, 로그인 프로토콜 값 앞에는 항상 fb가 붙습니다.

<string name="facebook_app_id">1231231231232123123</string><string name="fb_login_protocol_scheme">fb1231231231232123123</string>

5. 로그인 화면을 표시하는 활동을 생성합니다.

Android Studio에서 File > New > Activity > Basic Activity(파일 > 새로 생성 > 활동 > 기본 활동)를선택한 다음, AuthenticatorActivity와 같은 활동 이름을 입력합니다. 이 활동을 시작 활동으로 설정하려면 .LAUNCHER를 포함하는 의도한 필터 블록을 앱의 AndroidManifest.xml에 있는AuthenticatorActivity로 이동합니다.

<activity android:name=".AuthenticatorActivity"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter></activity>

6. onCreate를 호출하기 위해 AuthenticatorActivity의 AWSMobileClient 함수를 업데이트합니다. 이 구성 요소는 로그인 인증 세션을 다시 시작하는 기능을 제공합니다. 또한 네트워크 호출이 사용자에게 AWS 리소스 액세스를 허용하는 AWS 자격 증명을 검색하고 해당 트랜잭션이 완료되는 시점에 대해 콜백을 등록하도록 합니다.

사용자가 로그인한 경우 앱이 NextActivity로 이동합니다. 그렇지 않으면 사용자에게 이미 만들어진 구성 가능한 AWS Mobile 로그인 UI가 표시됩니다. 사용자가 로그인에 성공하면 표시되는NextActivity Activity 클래스.

import android.app.Activity;import android.os.Bundle;

import com.amazonaws.mobile.auth.ui.SignInUI;import com.amazonaws.mobile.client.AWSMobileClient;import com.amazonaws.mobile.client.AWSStartupHandler;import com.amazonaws.mobile.client.AWSStartupResult;

public class AuthenticatorActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_authenticator);

// Add a call to initialize AWSMobileClient AWSMobileClient.getInstance().initialize(this, new AWSStartupHandler() { @Override public void onComplete(AWSStartupResult awsStartupResult) { SignInUI signin = (SignInUI) AWSMobileClient.getInstance().getClient(AuthenticatorActivity.this, SignInUI.class); signin.login(AuthenticatorActivity.this, NextActivity.class).execute(); } }).execute(); }}

31

Page 35: AWS Mobile Hub 개발자 안내서 - 개발자 안내서 · 2020-02-07 · iOS - Swift 1.iOS를 플랫폼으로 선택하고 다음을 선택합니다. 2.Download Cloud Config(클라우드

AWS Mobile Hub 개발자 안내서 개발자 안내서Android 및 iOS

Android Studio의 실행 아이콘(▶)을 선택하여 앱을 빌드하고 장치/에뮬레이터에서 실행합니다. 앱에 대해 이미 만들어진 로그인 UI가 표시됩니다. 다음 단계를 확인하여UI를 사용자 지정하는방법에 대해 알아봅니다.

API 참조 • AWSMobileClientSDK를 초기화하는 라이브러리는 CredentialsProvider 및AWSConfiguration 객체를 구성하고, AWS 자격 증명을 가져오고, SDK SignInUI 클라이언트 인스턴스를 생성합니다.

• Auth UserPools관리형 이메일/암호 로그인 UI를 제공하는 Amazon CognitoUserPools용 래퍼 라이브러리.

• Auth CoreAmazon Cognito 연동 자격 증명을 사용하여 로그인 공급자 인증 토큰을 캐시 및 연동하고, 연동 AWS 자격 증명을 캐시하고,로그인 흐름을 처리하는 라이브러리.

Android - Kotlin

Android API 레벨 23 이상 사용 Android 로그인용 AWS Mobile SDK 라이브러리(aws-android-sdk-auth-ui)는 사용자가 구성한 로그인 공급자에게 SignInUI를 제시하기위한 활동 및 보기를 제공합니다. 이 라이브러리는 Android SDK API 레벨 23 이상에 종속됩니다.

1. AWS 백엔드 구성 파일을 추가 또는 업데이트하여 새 로그인을 포함시킵니다. 자세한 내용은 백엔드설정 시작하기 (p. 3) 섹션의 마지막 단계를 참조하십시오.

2. 다음 권한 및 활동을 AndroidManifest.xml 파일에 추가합니다.

<!-- ... -->

<uses-permission android:name="android.permission.INTERNET"/><uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>

<!-- ... -->

<activity android:name="com.facebook.FacebookActivity" android:exported="true"> <intent-filter> <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.BROWSABLE" /> <data android:scheme="@string/fb_login_protocol_scheme" /> </intent-filter></activity>

<!-- ... -->

<meta-data android:name="com.facebook.sdk.ApplicationId" android:value="@string/facebook_app_id" />

<!-- ... -->

32

Page 36: AWS Mobile Hub 개발자 안내서 - 개발자 안내서 · 2020-02-07 · iOS - Swift 1.iOS를 플랫폼으로 선택하고 다음을 선택합니다. 2.Download Cloud Config(클라우드

AWS Mobile Hub 개발자 안내서 개발자 안내서Android 및 iOS

3. 다음 종속성을 app/build.gradle 파일에 추가합니다.

dependencies { // Mobile Client for initializing the SDK implementation ('com.amazonaws:aws-android-sdk-mobile-client:2.7.+@aar') { transitive = true }

// Facebook SignIn implementation 'com.android.support:support-v4:24.+' implementation ('com.amazonaws:aws-android-sdk-auth-facebook:2.7.+@aar') { transitive = true }

// Sign in UI implementation 'com.android.support:appcompat-v7:24.+' implementation ('com.amazonaws:aws-android-sdk-auth-ui:2.7.+@aar') { transitive = true }}

4. strings.xml에서 Facebook 앱 ID에 대한 문자열 정의와 로그인 프로토콜 체계를 추가합니다. 두경우 모두 이 값에 Facebook AppID가 포함되어야 하며, 로그인 프로토콜 값 앞에는 항상 fb가 붙습니다.

<string name="facebook_app_id">1231231231232123123</string><string name="fb_login_protocol_scheme">fb1231231231232123123</string>

5. 로그인 화면을 표시하는 활동을 생성합니다.

Android Studio에서 File > New > Activity > Basic Activity(파일 > 새로 생성 > 활동 > 기본 활동)를선택한 다음, AuthenticatorActivity와 같은 활동 이름을 입력합니다. 이 활동을 시작 활동으로 설정하려면 .LAUNCHER를 포함하는 의도한 필터 블록을 앱의 AndroidManifest.xml에 있는AuthenticatorActivity로 이동합니다.

<activity android:name=".AuthenticatorActivity"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter></activity>

6. onCreate를 호출하기 위해 AuthenticatorActivity의 AWSMobileClient 함수를 업데이트합니다. 이 구성 요소는 로그인 인증 세션을 다시 시작하는 기능을 제공합니다. 또한 네트워크 호출이 사용자에게 AWS 리소스 액세스를 허용하는 AWS 자격 증명을 검색하고 해당 트랜잭션이 완료되는 시점에 대해 콜백을 등록하도록 합니다.

사용자가 로그인한 경우 앱이 NextActivity로 이동합니다. 그렇지 않으면 사용자에게 이미 만들어진 구성 가능한 AWS Mobile 로그인 UI가 표시됩니다. 사용자가 로그인에 성공하면 표시되는NextActivity Activity 클래스.

import android.app.Activity;import android.os.Bundle;

import com.amazonaws.mobile.auth.ui.SignInUI;import com.amazonaws.mobile.client.AWSMobileClient;import com.amazonaws.mobile.client.AWSStartupHandler;import com.amazonaws.mobile.client.AWSStartupResult;

class AuthenticatorActivity : Activity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState)

AWSMobileClient.getInstance().initialize(this) {

33

Page 37: AWS Mobile Hub 개발자 안내서 - 개발자 안내서 · 2020-02-07 · iOS - Swift 1.iOS를 플랫폼으로 선택하고 다음을 선택합니다. 2.Download Cloud Config(클라우드

AWS Mobile Hub 개발자 안내서 개발자 안내서Android 및 iOS

val ui = AWSMobileClient.getInstance().getClient( this@AuthenticatorActivity, SignInUI::class.java) as SignInUI? ui?.login( this@AuthenticatorActivity, MainActivity::class.java)?.execute() }.execute() }

Android Studio의 실행 아이콘(▶)을 선택하여 앱을 빌드하고 장치/에뮬레이터에서 실행합니다. 앱에 대해 이미 만들어진 로그인 UI가 표시됩니다. 다음 단계를 확인하여UI를 사용자 지정하는방법에 대해 알아봅니다.

API 참조 • AWSMobileClientSDK를 초기화하는 라이브러리는 CredentialsProvider 및AWSConfiguration 객체를 구성하고, AWS 자격 증명을 가져오고, SDK SignInUI 클라이언트 인스턴스를 생성합니다.

• Auth UserPools관리형 이메일/암호 로그인 UI를 제공하는 Amazon CognitoUserPools용 래퍼 라이브러리.

• Auth CoreAmazon Cognito 연동 자격 증명을 사용하여 로그인 공급자 인증 토큰을 캐시 및 연동하고, 연동 AWS 자격 증명을 캐시하고,로그인 흐름을 처리하는 라이브러리.

iOS - Swift

1. AWS 백엔드 구성 파일을 추가 또는 업데이트하여 새 로그인을 포함시킵니다. 자세한 내용은 백엔드설정 시작하기 (p. 3) 섹션의 마지막 단계를 참조하십시오.

2. 다음 종속성을 프로젝트의 Podfile에 추가합니다.

platform :ios, '9.0' target :'YOUR-APP-NAME' do use_frameworks! pod 'AWSMobileClient', '~> 2.6.13' pod 'AWSFacebookSignIn', '~> 2.6.13' pod 'AWSAuthUI', '~> 2.6.13' # other pods end

실행 pod install --repo-update.

"[!] Failed to connect to GitHub to update the CocoaPods/Specs . . ."로 시작하는 오류 메시지가 표시되고 인터넷 연결이 작동하는 경우 openssl 및 Ruby 업데이트가 필요할 수있습니다.

3. Facebook 메타 데이터를 Info.plist에 추가합니다.

Facebook 로그인을 사용하도록 Xcode 프로젝트를 구성하려면 Info.plist 파일을 마우스 오른쪽버튼으로 선택한 다음 Open As > Source Code(다음으로 열기 > 소스 코드)를 선택합니다.

프로젝트 이름, Facebook ID 및 로그인 스키마 ID를 사용하여 다음 항목을 추가합니다.

34

Page 38: AWS Mobile Hub 개발자 안내서 - 개발자 안내서 · 2020-02-07 · iOS - Swift 1.iOS를 플랫폼으로 선택하고 다음을 선택합니다. 2.Download Cloud Config(클라우드

AWS Mobile Hub 개발자 안내서 개발자 안내서Android 및 iOS

<plist version="1.0"><!-- ... --><dict><key>FacebookAppID</key><string>0123456789012345</string><key>FacebookDisplayName</key><string>YOUR-PROJECT-NAME</string><key>LSApplicationQueriesSchemes</key><array> <string>fbapi</string> <string>fb-messenger-api</string> <string>fbauth2</string> <string>fbshareextension</string></array><key>CFBundleURLTypes</key><array> <dict> <key>CFBundleURLSchemes</key> <array> <string>fb0123456789012345</string> </array> </dict></array></dict><!-- ... -->

4. AWSMobileClient를 생성하고 SDK를 초기화합니다.

AWSMobileClient 인스턴스를 생성하는 코드를 application:open url의AppDelegate.swift 함수에 추가해 앞서 로그인한 인증 세션을 다시 시작합니다.

그런 다음 또 다른 AWSMobileClient 인스턴스를 didFinishLaunching 함수에 추가해 로그인공급자를 등록하고, 사용자가 로그인 하면 AWS가 액세스 인증에 사용할 Amazon Cognito 자격 증명을 가져옵니다.

import UIKit

//import AWSMobileClientimport AWSMobileClient

@UIApplicationMain

class AppDelegate: UIResponder, UIApplicationDelegate {

// Add a AWSMobileClient call in application:open url func application(_ application: UIApplication, open url: URL, sourceApplication: String?, annotation: Any) -> Bool {

return AWSMobileClient.sharedInstance().interceptApplication( application, open: url, sourceApplication: sourceApplication, annotation: annotation)

}

// Add a AWSMobileClient call in application:didFinishLaunching func application( _ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {

return AWSMobileClient.sharedInstance().interceptApplication( application, didFinishLaunchingWithOptions:

35

Page 39: AWS Mobile Hub 개발자 안내서 - 개발자 안내서 · 2020-02-07 · iOS - Swift 1.iOS를 플랫폼으로 선택하고 다음을 선택합니다. 2.Download Cloud Config(클라우드

AWS Mobile Hub 개발자 안내서 개발자 안내서Android 및 iOS

launchOptions) }

// Other functions in AppDelegate . . .

}

5. SDK에서 제공하는 라이브러리를 호출하여 로그인 UI를 구현합니다.

import UIKitimport AWSAuthCoreimport AWSAuthUI

class SampleViewController: UIViewController {

override func viewDidLoad() {

super.viewDidLoad()

if !AWSSignInManager.sharedInstance().isLoggedIn { AWSAuthUIViewController .presentViewController(with: self.navigationController!, configuration: nil, completionHandler: { (provider: AWSSignInProvider, error: Error?) in if error != nil { print("Error occurred: \(String(describing: error))") } else { // sign in successful. } }) } }}

Xcode 창의 왼쪽 위에 있는 실행 아이콘(▶)을 선택하거나 ⌘-R을 입력하여 앱을 빌드하고 실행합니다.앱에 대해 미리 빌드된 로그인 UI가 표시됩니다. 다음 단계를 확인하여UI를 사용자 지정하는방법에 대해알아봅니다.

API 참조 • AWSMobileClientSDK를 초기화하고, AWS 자격 증명을 가져오고, SDK SignInUI클라이언트 인스턴스를 생성하는 라이브러리.

• Auth UserPools관리형 이메일/암호 로그인 UI를 제공하는 Amazon CognitoUserPools용 래퍼 라이브러리.

• Auth CoreAmazon Cognito 연동 자격 증명을 사용하여 로그인 공급자 인증 토큰을 캐시 및 연동하고, 연동 AWS 자격 증명을 캐시하고,로그인 흐름을 처리하는 라이브러리.

36

Page 40: AWS Mobile Hub 개발자 안내서 - 개발자 안내서 · 2020-02-07 · iOS - Swift 1.iOS를 플랫폼으로 선택하고 다음을 선택합니다. 2.Download Cloud Config(클라우드

AWS Mobile Hub 개발자 안내서 개발자 안내서Android 및 iOS

모바일 앱에서 Google 로그인 설정

Android - Java

Android API 레벨 23 이상 사용 Android 로그인용 AWS Mobile SDK 라이브러리(aws-android-sdk-auth-ui)는 사용자가 구성한 로그인 공급자에게 SignInUI를 제시하기위한 활동 및 보기를 제공합니다. 이 라이브러리는 Android SDK API 레벨 23 이상에 종속됩니다.

1. AWS 백엔드 구성 파일을 추가 또는 업데이트하여 새 로그인을 포함시킵니다. 자세한 내용은 백엔드설정 시작하기 (p. 3) 섹션의 마지막 단계를 참조하십시오.

2. 다음 권한을 AndroidManifest.xml 파일에 추가합니다.

<uses-permission android:name="android.permission.INTERNET"/><uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>

3. 다음 종속성을 app/build.gradle 파일에 추가합니다.

dependencies { // Mobile Client for initializing the SDK implementation ('com.amazonaws:aws-android-sdk-mobile-client:2.7.+@aar') { transitive = true }

// Google SignIn implementation 'com.android.support:support-v4:24.+' implementation ('com.amazonaws:aws-android-sdk-auth-google:2.7.+@aar') { transitive = true }

// Sign in UI Library implementation 'com.android.support:appcompat-v7:24.+' implementation ('com.amazonaws:aws-android-sdk-auth-ui:2.7.+@aar') { transitive = true }}

4. 로그인 화면을 표시하는 활동을 생성합니다.

Android Studio에서 File > New > Activity > Basic Activity(파일 > 새로 생성 > 활동 > 기본 활동)를선택한 다음, AuthenticatorActivity와 같은 활동 이름을 입력합니다. 이 활동을 시작 활동으로 설정하려면 .LAUNCHER를 포함하는 의도한 필터 블록을 앱의 AndroidManifest.xml에 있는AuthenticatorActivity로 이동합니다.

<activity android:name=".AuthenticatorActivity"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter></activity>

5. onCreate를 호출하기 위해 AuthenticatorActivity의 AWSMobileClient 함수를 업데이트합니다. 이 구성 요소는 로그인 인증 세션을 다시 시작하는 기능을 제공합니다. 또한 네트워크 호출이 사용자에게 AWS 리소스 액세스를 허용하는 AWS 자격 증명을 검색하고 해당 트랜잭션이 완료되는 시점에 대해 콜백을 등록하도록 합니다.

사용자가 로그인한 경우 앱이 NextActivity로 이동합니다. 그렇지 않으면 사용자에게 이미 만들어진 구성 가능한 AWS Mobile 로그인 UI가 표시됩니다. 사용자가 로그인에 성공하면 표시되는NextActivity Activity 클래스.

37

Page 41: AWS Mobile Hub 개발자 안내서 - 개발자 안내서 · 2020-02-07 · iOS - Swift 1.iOS를 플랫폼으로 선택하고 다음을 선택합니다. 2.Download Cloud Config(클라우드

AWS Mobile Hub 개발자 안내서 개발자 안내서Android 및 iOS

import android.app.Activity;import android.os.Bundle;

import com.amazonaws.mobile.auth.ui.SignInUI;import com.amazonaws.mobile.client.AWSMobileClient;import com.amazonaws.mobile.client.AWSStartupHandler;import com.amazonaws.mobile.client.AWSStartupResult;

public class AuthenticatorActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_authenticator);

// Add a call to initialize AWSMobileClient AWSMobileClient.getInstance().initialize(this, new AWSStartupHandler() { @Override public void onComplete(AWSStartupResult awsStartupResult) { SignInUI signin = (SignInUI) AWSMobileClient.getInstance().getClient(AuthenticatorActivity.this, SignInUI.class); signin.login(AuthenticatorActivity.this, MainActivity.class).execute(); } }).execute(); }}

Android Studio의 실행 아이콘(▶)을 선택하여 앱을 빌드하고 장치/에뮬레이터에서 실행합니다. 앱에 대해 이미 만들어진 로그인 UI가 표시됩니다. 다음 단계를 확인하여UI를 사용자 지정하는방법에 대해 알아봅니다.

API 참조 • AWSMobileClientSDK를 초기화하는 라이브러리는 CredentialsProvider 및AWSConfiguration 객체를 구성하고, AWS 자격 증명을 가져오고, SDK SignInUI 클라이언트 인스턴스를 생성합니다.

• Auth UserPools관리형 이메일/암호 로그인 UI를 제공하는 Amazon CognitoUserPools용 래퍼 라이브러리.

• Auth CoreAmazon Cognito 연동 자격 증명을 사용하여 로그인 공급자 인증 토큰을 캐시 및 연동하고, 연동 AWS 자격 증명을 캐시하고,로그인 흐름을 처리하는 라이브러리.

Android - Kotlin

Android API 레벨 23 이상 사용 Android 로그인용 AWS Mobile SDK 라이브러리(aws-android-sdk-auth-ui)는 사용자가 구성한 로그인 공급자에게 SignInUI를 제시하기위한 활동 및 보기를 제공합니다. 이 라이브러리는 Android SDK API 레벨 23 이상에 종속됩니다.

38

Page 42: AWS Mobile Hub 개발자 안내서 - 개발자 안내서 · 2020-02-07 · iOS - Swift 1.iOS를 플랫폼으로 선택하고 다음을 선택합니다. 2.Download Cloud Config(클라우드

AWS Mobile Hub 개발자 안내서 개발자 안내서Android 및 iOS

1. AWS 백엔드 구성 파일을 추가 또는 업데이트하여 새 로그인을 포함시킵니다. 자세한 내용은 백엔드설정 시작하기 (p. 3) 섹션의 마지막 단계를 참조하십시오.

2. 다음 권한을 AndroidManifest.xml 파일에 추가합니다.

<uses-permission android:name="android.permission.INTERNET"/><uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>

3. 다음 종속성을 app/build.gradle 파일에 추가합니다.

dependencies { // Mobile Client for initializing the SDK implementation ('com.amazonaws:aws-android-sdk-mobile-client:2.7.+@aar') { transitive = true }

// Google SignIn implementation 'com.android.support:support-v4:24.+' implementation ('com.amazonaws:aws-android-sdk-auth-google:2.7.+@aar') { transitive = true }

// Sign in UI Library implementation 'com.android.support:appcompat-v7:24.+' implementation ('com.amazonaws:aws-android-sdk-auth-ui:2.7.+@aar') { transitive = true }}

4. 로그인 화면을 표시하는 활동을 생성합니다.

Android Studio에서 File > New > Activity > Basic Activity(파일 > 새로 생성 > 활동 > 기본 활동)를선택한 다음, AuthenticatorActivity와 같은 활동 이름을 입력합니다. 이 활동을 시작 활동으로 설정하려면 .LAUNCHER를 포함하는 의도한 필터 블록을 앱의 AndroidManifest.xml에 있는AuthenticatorActivity로 이동합니다.

<activity android:name=".AuthenticatorActivity"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter></activity>

5. onCreate를 호출하기 위해 AuthenticatorActivity의 AWSMobileClient 함수를 업데이트합니다. 이 구성 요소는 로그인 인증 세션을 다시 시작하는 기능을 제공합니다. 또한 네트워크 호출이 사용자에게 AWS 리소스 액세스를 허용하는 AWS 자격 증명을 검색하고 해당 트랜잭션이 완료되는 시점에 대해 콜백을 등록하도록 합니다.

사용자가 로그인한 경우 앱이 NextActivity로 이동합니다. 그렇지 않으면 사용자에게 이미 만들어진 구성 가능한 AWS Mobile 로그인 UI가 표시됩니다. 사용자가 로그인에 성공하면 표시되는NextActivity Activity 클래스.

import android.app.Activity;import android.os.Bundle;

import com.amazonaws.mobile.auth.ui.SignInUI;import com.amazonaws.mobile.client.AWSMobileClient;import com.amazonaws.mobile.client.AWSStartupHandler;import com.amazonaws.mobile.client.AWSStartupResult;

class AuthenticatorActivity : Activity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState)

AWSMobileClient.getInstance().initialize(this) {

39

Page 43: AWS Mobile Hub 개발자 안내서 - 개발자 안내서 · 2020-02-07 · iOS - Swift 1.iOS를 플랫폼으로 선택하고 다음을 선택합니다. 2.Download Cloud Config(클라우드

AWS Mobile Hub 개발자 안내서 개발자 안내서Android 및 iOS

val ui = AWSMobileClient.getInstance().getClient( this@AuthenticatorActivity, SignInUI::class.java) as SignInUI? ui?.login( this@AuthenticatorActivity, MainActivity::class.java)?.execute() }.execute()}

Android Studio의 실행 아이콘(▶)을 선택하여 앱을 빌드하고 장치/에뮬레이터에서 실행합니다. 앱에 대해 이미 만들어진 로그인 UI가 표시됩니다. 다음 단계를 확인하여UI를 사용자 지정하는방법에 대해 알아봅니다.

API 참조 • AWSMobileClientSDK를 초기화하는 라이브러리는 CredentialsProvider 및AWSConfiguration 객체를 구성하고, AWS 자격 증명을 가져오고, SDK SignInUI 클라이언트 인스턴스를 생성합니다.

• Auth UserPools관리형 이메일/암호 로그인 UI를 제공하는 Amazon CognitoUserPools용 래퍼 라이브러리.

• Auth CoreAmazon Cognito 연동 자격 증명을 사용하여 로그인 공급자 인증 토큰을 캐시 및 연동하고, 연동 AWS 자격 증명을 캐시하고,로그인 흐름을 처리하는 라이브러리.

iOS - Swift

1. AWS 백엔드 구성 파일을 추가 또는 업데이트하여 새 로그인을 포함시킵니다. 자세한 내용은 백엔드설정 시작하기 (p. 3) 섹션의 마지막 단계를 참조하십시오.

2. 다음 종속성을 Podfile에 추가합니다.

platform :ios, '9.0' target :'YOUR-APP-NAME' do use_frameworks! pod 'AWSMobileClient', '~> 2.6.13' pod 'AWSGoogleSignIn', '~> 2.6.13' pod 'AWSAuthUI', '~> 2.6.13' pod 'GoogleSignIn', '~> 4.0' # other pods end

계속하기 전에 pod install --repo-update를 실행합니다.

"[!] Failed to connect to GitHub to update the CocoaPods/Specs . . ."로 시작하는 오류 메시지가 표시되고 인터넷 연결이 작동하는 경우 openssl 및 Ruby 업데이트가 필요할 수있습니다.

3. info.plist에 Google 메타 데이터를 추가합니다.

Google 로그인을 사용하도록 Xcode 프로젝트를 구성하려면 Right-click > Open As > SourceCode(마우스 오른쪽 클릭 > 다음으로 열기 > 소스 코드)를 사용하여 Info.plist 파일을 엽니다. 다음 항목을 추가합니다. 프로젝트 이름을 플레이스홀더 문자열로 대체합니다.

40

Page 44: AWS Mobile Hub 개발자 안내서 - 개발자 안내서 · 2020-02-07 · iOS - Swift 1.iOS를 플랫폼으로 선택하고 다음을 선택합니다. 2.Download Cloud Config(클라우드

AWS Mobile Hub 개발자 안내서 개발자 안내서Android 및 iOS

<plist version="1.0"><!-- ... --><key>CFBundleURLTypes</key><array> <dict> <key>CFBundleURLSchemes</key> <array> <string>com.googleusercontent.apps.xxxxxxxxxxxx-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx</string> </array> </dict></array><!-- ... -->

4. AWSMobileClient를 생성하고 SDK를 초기화합니다.

AWSMobileClient 인스턴스를 생성하는 코드를 application:open url의AppDelegate.swift 함수에 추가해 앞서 로그인한 인증 세션을 다시 시작합니다.

그런 다음 또 다른 AWSMobileClient 인스턴스를 didFinishLaunching 함수에 추가해 로그인공급자를 등록하고, 사용자가 로그인 하면 AWS가 액세스 인증에 사용할 Amazon Cognito 자격 증명을 가져옵니다.

import UIKit

//import AWSMobileClientimport AWSMobileClient

@UIApplicationMain

class AppDelegate: UIResponder, UIApplicationDelegate {

// Add a AWSMobileClient call in application:open url func application(_ application: UIApplication, open url: URL, sourceApplication: String?, annotation: Any) -> Bool {

return AWSMobileClient.sharedInstance().interceptApplication( application, open: url, sourceApplication: sourceApplication, annotation: annotation)

}

// Add a AWSMobileClient call in application:didFinishLaunching func application( _ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {

return AWSMobileClient.sharedInstance().interceptApplication( application, didFinishLaunchingWithOptions: launchOptions) }

// Other functions in AppDelegate . . .

}

5. SDK에서 제공하는 라이브러리를 호출하여 로그인 UI를 구현합니다.

import UIKitimport AWSAuthCore

41

Page 45: AWS Mobile Hub 개발자 안내서 - 개발자 안내서 · 2020-02-07 · iOS - Swift 1.iOS를 플랫폼으로 선택하고 다음을 선택합니다. 2.Download Cloud Config(클라우드

AWS Mobile Hub 개발자 안내서 개발자 안내서Android 및 iOS

import AWSAuthUI

class SampleViewController: UIViewController {

override func viewDidLoad() {

super.viewDidLoad()

if !AWSSignInManager.sharedInstance().isLoggedIn { AWSAuthUIViewController .presentViewController(with: self.navigationController!, configuration: nil, completionHandler: { (provider: AWSSignInProvider, error: Error?) in if error != nil { print("Error occurred: \(String(describing: error))") } else { // Sign in successful. } }) } }}

Xcode 창의 왼쪽 위에 있는 실행 아이콘(▶)을 선택하거나 ⌘-R을 입력하여 앱을 빌드하고 실행합니다.앱에 대해 미리 빌드된 로그인 UI가 표시됩니다. 다음 단계를 확인하여UI를 사용자 지정하는방법에 대해알아봅니다.

API 참조 • AWSMobileClientSDK를 초기화하고, AWS 자격 증명을 가져오고, SDK SignInUI클라이언트 인스턴스를 생성하는 라이브러리.

• Auth UserPools관리형 이메일/암호 로그인 UI를 제공하는 Amazon CognitoUserPools용 래퍼 라이브러리.

• Auth CoreAmazon Cognito 연동 자격 증명을 사용하여 로그인 공급자 인증 토큰을 캐시 및 연동하고, 연동 AWS 자격 증명을 캐시하고,로그인 흐름을 처리하는 라이브러리.

로그아웃 활성화

Android - Java

사용자가 앱에서 로그아웃할 수 있게 하려면 SignInStateChangeListener를IdentityManager에 추가해 로그인 이벤트에 대해 콜백을 등록합니다. 이 리스너는onUserSignedIn 및 onUserSignedOut 이벤트를 캡처합니다.

IdentityManager.getDefaultIdentityManager().addSignInStateChangeListener(new SignInStateChangeListener() { @Override // Sign-in listener public void onUserSignedIn() { Log.d(LOG_TAG, "User Signed In"); }

// Sign-out listener

42

Page 46: AWS Mobile Hub 개발자 안내서 - 개발자 안내서 · 2020-02-07 · iOS - Swift 1.iOS를 플랫폼으로 선택하고 다음을 선택합니다. 2.Download Cloud Config(클라우드

AWS Mobile Hub 개발자 안내서 개발자 안내서Android 및 iOS

@Override public void onUserSignedOut() {

// return to the sign-in screen upon sign-out showSignIn(); }});

로그아웃을 시작하려면 signOut의 IdentityManager 메서드를 호출합니다.

IdentityManager.getDefaultIdentityManager().signOut();

Android - Kotlin

사용자가 앱에서 로그아웃할 수 있게 하려면 SignInStateChangeListener를IdentityManager에 추가해 로그인 이벤트에 대해 콜백을 등록합니다. 이 리스너는onUserSignedIn 및 onUserSignedOut 이벤트를 캡처합니다.

IdentityManager.getDefaultIdentityManager().addSignInStateChangeListener( object : SignInStateChangeListener() { override fun onUserSignedIn() { Log.d(TAG, "User signed in"); }

override fun onUserSignedOut() { Log.d(TAG, "User signed out"); } });

로그아웃을 시작하려면 signOut의 IdentityManager 메서드를 호출합니다.

IdentityManager.getDefaultIdentityManager().signOut();

iOS - Swift

로그아웃을 시작하려면 AWSSignInManager.sharedInstance().logout에 호출을 추가합니다.

@IBAction func signOutButtonPress(_ sender: Any) {

AWSSignInManager.sharedInstance().logout(completionHandler: {(result: Any?, error: Error?) in self.showSignIn() // print("Sign-out Successful: \(signInProvider.getDisplayName)");

})}

다음 단계

• UI 사용자 지정• Amazon Cognito 개발자 안내서

Amazon Pinpoint를 사용하여 모바일 앱에 푸시 알림 추가

다음 참조 콘텐츠는 iOS 및 Android용 AWS Mobile SDK를 사용해 구성된 기존 앱에만 적용됩니다. 새 모바일 또는 웹 앱을 빌드하거나 기존 앱에 클라우드 기능을 추가하고 있다면 대신 Amplify Framework 웹사

43

Page 47: AWS Mobile Hub 개발자 안내서 - 개발자 안내서 · 2020-02-07 · iOS - Swift 1.iOS를 플랫폼으로 선택하고 다음을 선택합니다. 2.Download Cloud Config(클라우드

AWS Mobile Hub 개발자 안내서 개발자 안내서Android 및 iOS

이트를 방문하십시오. iOS 및 Android용 AWS Mobile SDK의 설명서는 Amplify Framework의 일부로 제공됩니다.

개요

Mobile Hub는 Amazon Pinpoint 서비스를 사용하는 메시징 및 분석 (p. 196) 기능을 활성화할 경우 푸시 알림 백엔드 서비스를 배포합니다. Amazon Pinpoint를 사용하면 앱이 Apple(APN) 및 Google(FCM/GCM) 플랫폼에서 전송된 모바일 푸시 메시지를 수신할 수 있습니다. 또한 사용자 행동을 푸시 또는 다른 형태의 메시징에 연결하는 Amazon Pinpoint 캠페인을 생성할 수 있습니다.

백엔드 설정

1. 진행하기 전에 시작하기 (p. 3) 단계를 완료합니다.2. 메시징 및 분석 타일을 선택합니다.3. 모바일 푸시를 선택합니다.

Android - Firebase/Google Cloud Messaging(FCM/GCM): Android를 선택하고 Firebase/Google 애플리케이션 API 키 및 발신자 ID를 지정합니다. 이러한 값을 검색하거나 생성하려면 Android 푸시 알림 설정을참조하십시오.

iOS - Apple 푸시 알림 서비스(APN): iOS를 선택하고 Apple 앱 P12 인증서와 인증서 암호(선택 사항)를 지정합니다. 이러한 항목을 검색하거나 생성하려면 iOS 푸시 알림 설정을 참조하십시오.

4. 이 작업이 완료되면 "Your Backend has been updated"(백엔드가 업데이트되었습니다.)라는 경고가 팝업되고 클라우드 구성 파일의 최신 복사본을 다운로드하라는 메시지가 표시됩니다. 이 기능의 구성이 완료되면 배너를 선택하여 프로젝트 세부 정보 페이지로 돌아갑니다.

5. 프로젝트 세부 정보 페이지에서 최신 클라우드 구성 파일로 업데이트해야 하는 모든 앱에는 깜박이는 통합 버튼이 있습니다. 해당 버튼을 선택하여 통합 마법사로 들어갑니다.

6. 클라우드 구성 파일의 최신 버전으로 앱을 업데이트합니다. 이제 앱에서 백엔드의 최신 버전을 참조합니다. 다음을 선택하고 아래의 푸시 알림 설명서에 따라 백엔드에 연결합니다.

백엔드에 연결

앱에 푸시 알림을 추가하려면

Android - Java

1. 다음 단계를 통해 AWS Mobile SDK 구성 요소를 설정합니다.a. 다음을 AndroidManifest.xml에 추가합니다.

<uses-permission android:name="android.permission.WAKE_LOCK"/><uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />

44

Page 48: AWS Mobile Hub 개발자 안내서 - 개발자 안내서 · 2020-02-07 · iOS - Swift 1.iOS를 플랫폼으로 선택하고 다음을 선택합니다. 2.Download Cloud Config(클라우드

AWS Mobile Hub 개발자 안내서 개발자 안내서Android 및 iOS

<permission android:name="com.mysampleapp.permission.C2D_MESSAGE" android:protectionLevel="signature" /><uses-permission android:name="com.mysampleapp.permission.C2D_MESSAGE" />

<application

<!--Add these to your Application declaration to filter for the notification intent--> <receiver android:name="com.google.android.gms.gcm.GcmReceiver" android:exported="true" android:permission="com.google.android.c2dm.permission.SEND" > <intent-filter> <action android:name="com.google.android.c2dm.intent.RECEIVE" /> <category android:name="com.mysampleapp" /> </intent-filter> </receiver>

<service android:name=".PushListenerService" android:exported="false" > <intent-filter> <action android:name="com.google.android.c2dm.intent.RECEIVE" /> </intent-filter> </service>

</application>

b. 다음을 app/build.gradle에 추가합니다.

dependencies{ implementation 'com.amazonaws:aws-android-sdk-pinpoint:2.7.+' implementation ('com.amazonaws:aws-android-sdk-auth-core:2.7.+@aar') {transitive = true;}

implementation 'com.google.android.gms:play-services-iid:11.6.0' implementation 'com.google.android.gms:play-services-gcm:11.6.0'}

c. 프로젝트가 포함된 폴더에서 다음을 프로젝트 레벨 build.gradle에 추가합니다.

buildscript { dependencies { classpath 'com.google.gms:google-services:3.1.1' }}

allprojects { repositories { maven { url "https://maven.google.com" } }}

2. 푸시 알림 코드의 위치에서 Amazon Pinpoint 클라이언트를 생성합니다.

import com.amazonaws.mobileconnectors.pinpoint.PinpointConfiguration;import com.amazonaws.mobileconnectors.pinpoint.PinpointManager;import com.google.android.gms.gcm.GoogleCloudMessaging;import com.google.android.gms.iid.InstanceID;

public class MainActivity extends AppCompatActivity { public static final String LOG_TAG = MainActivity.class.getSimpleName();

45

Page 49: AWS Mobile Hub 개발자 안내서 - 개발자 안내서 · 2020-02-07 · iOS - Swift 1.iOS를 플랫폼으로 선택하고 다음을 선택합니다. 2.Download Cloud Config(클라우드

AWS Mobile Hub 개발자 안내서 개발자 안내서Android 및 iOS

public static PinpointManager pinpointManager;

@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main);

if (pinpointManager == null) { PinpointConfiguration pinpointConfig = new PinpointConfiguration( getApplicationContext(), AWSMobileClient.getInstance().getCredentialsProvider(), AWSMobileClient.getInstance().getConfiguration());

pinpointManager = new PinpointManager(pinpointConfig);

new Thread(new Runnable() { @Override public void run() { try { String deviceToken = InstanceID.getInstance(MainActivity.this).getToken( "123456789Your_GCM_Sender_Id", GoogleCloudMessaging.INSTANCE_ID_SCOPE); Log.e("NotError", deviceToken); pinpointManager.getNotificationClient() .registerGCMDeviceToken(deviceToken); } catch (Exception e) { e.printStackTrace(); } } }).start(); } } }

Android - Kotlin

1. 다음 단계를 통해 AWS Mobile SDK 구성 요소를 설정합니다.a. 다음을 AndroidManifest.xml에 추가합니다.

<uses-permission android:name="android.permission.WAKE_LOCK"/><uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" /><permission android:name="com.mysampleapp.permission.C2D_MESSAGE" android:protectionLevel="signature" /><uses-permission android:name="com.mysampleapp.permission.C2D_MESSAGE" />

<application

<!--Add these to your Application declaration to filter for the notification intent--> <receiver android:name="com.google.android.gms.gcm.GcmReceiver" android:exported="true" android:permission="com.google.android.c2dm.permission.SEND" > <intent-filter> <action android:name="com.google.android.c2dm.intent.RECEIVE" /> <category android:name="com.mysampleapp" /> </intent-filter> </receiver>

<service android:name=".PushListenerService"

46

Page 50: AWS Mobile Hub 개발자 안내서 - 개발자 안내서 · 2020-02-07 · iOS - Swift 1.iOS를 플랫폼으로 선택하고 다음을 선택합니다. 2.Download Cloud Config(클라우드

AWS Mobile Hub 개발자 안내서 개발자 안내서Android 및 iOS

android:exported="false" > <intent-filter> <action android:name="com.google.android.c2dm.intent.RECEIVE" /> </intent-filter> </service>

</application>

b. 다음을 app/build.gradle에 추가합니다.

dependencies{ implementation 'com.amazonaws:aws-android-sdk-pinpoint:2.7.+' implementation ('com.amazonaws:aws-android-sdk-auth-core:2.7.+@aar') {transitive = true;}

implementation 'com.google.android.gms:play-services-iid:11.6.0' implementation 'com.google.android.gms:play-services-gcm:11.6.0'}

c. 프로젝트가 포함된 폴더에서 다음을 build.gradle 파일에 추가합니다.

buildscript { dependencies { classpath 'com.google.gms:google-services:3.1.1' }}

allprojects { repositories { maven { url "https://maven.google.com" } }}

2. 푸시 알림 코드의 위치에서 Amazon Pinpoint 클라이언트를 생성합니다.

import com.amazonaws.mobileconnectors.pinpoint.PinpointConfiguration;import com.amazonaws.mobileconnectors.pinpoint.PinpointManager;import com.google.android.gms.gcm.GoogleCloudMessaging;import com.google.android.gms.iid.InstanceID;

class MainActivity : AppCompatActivity() { companion object { private val LOG_TAG = this::class.java.getSimpleName var pinpointManager: PinpointManager? = null }

override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main)

AWSMobileClient.getInstance().initialize(this).execute() with (AWSMobileClient.getInstance()) { if (pinpointManager == null) { val config = PinpointConfiguration(applicationContext, credentialsProvider, configuration) pinpointManager = PinpointManager(config) } }

thread(start = true) { try { val deviceToken = InstanceID.getInstance(this@MainActivity)

47

Page 51: AWS Mobile Hub 개발자 안내서 - 개발자 안내서 · 2020-02-07 · iOS - Swift 1.iOS를 플랫폼으로 선택하고 다음을 선택합니다. 2.Download Cloud Config(클라우드

AWS Mobile Hub 개발자 안내서 개발자 안내서Android 및 iOS

.getToken("YOUR-GCM-SENDER-ID", GoogleCloudMessaging.INSTANCE_ID_SCOPE) Log.i(LOG_TAG, "GCM DeviceToken = $deviceToken") pinpointManager?.notificationClient?.registerGCMDeviceToken(deviceToken) } catch (e: Exception) { e.printStackTrace() } } }}

iOS - Swift

1. 다음 단계를 통해 AWS Mobile SDK 구성 요소를 설정합니다.a. AWS Mobile SDK를 설치하도록 구성한 Podfile에는 다음을 포함해야 합니다.

platform :ios, '9.0'

target :'YOUR-APP-NAME' do use_frameworks!

pod 'AWSPinpoint', '~> 2.6.13' # other pods

end

계속하기 전에 pod install --repo-update를 실행합니다.

"[!] Failed to connect to GitHub to update the CocoaPods/Specs . . ."로 시작하는 오류 메시지가 표시되고 인터넷 연결이 작동하는 경우 openssl 및 Ruby 업데이트가 필요할수 있습니다.

b. Amazon Pinpoint API를 호출하는 클래스에서 다음 가져오기 문을 사용해야 합니다.

import AWSCoreimport AWSPinpoint

2. 다음 코드를 앱의 didFinishLaunchwithOptions의 AppDelegate.swift 메서드에서 사용하여 Amazon Pinpoint 클라이언트를 생성합니다. 그러면 Amazon Pinpoint에 디바이스 토큰도 등록됩니다.

var pinpoint: AWSPinpoint?

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {

pinpoint = AWSPinpoint(configuration: AWSPinpointConfiguration.defaultPinpointConfiguration(launchOptions: launchOptions))

return true}

48

Page 52: AWS Mobile Hub 개발자 안내서 - 개발자 안내서 · 2020-02-07 · iOS - Swift 1.iOS를 플랫폼으로 선택하고 다음을 선택합니다. 2.Download Cloud Config(클라우드

AWS Mobile Hub 개발자 안내서 개발자 안내서Android 및 iOS

Amazon Pinpoint 대상 및 캠페인 푸시 메시지 추가

Amazon Pinpoint 콘솔을 사용하면 푸시 메시징으로 앱 사용자를 대상으로 지정할 수 있습니다. 개별 메시지를 전송하거나 정의한 프로필과 일치하는 사용자 그룹을 대상으로 하는 캠페인을 구성할 수 있습니다. 예를들어 30일 이내에 앱을 사용하지 않은 사용자에게 이메일을 발송하거나 앱의 지정된 기능을 자주 사용하는사용자에게 SMS를 발송할 수 있습니다.

Android - Java

다음 2단계에서는 앱을 대상으로 하는 푸시 알림을 수신하는 방법을 보여줍니다.

1. 푸시 리스너 서비스를 앱에 추가합니다.

클래스 이름이 앱 매니페스트에 사용되는 푸시 리스너 서비스 이름과 일치해야 합니다.pinpointManager는 이전 단계에 표시된 MainActivity에서 선언한 정적 PinpointManager 변수에 대한 참조입니다. 다음 단계를 사용하여 앱에서 수신하는 푸시 알림을 설정합니다.a. 다음 푸시 리스너 코드는 앱의 MainActivity가 이전 단원에 설명된 매니페스트 설정을 사용하여 구

성되어 있다고 가정합니다.

import android.content.Intent;import android.os.Bundle;import android.support.v4.content.LocalBroadcastManager;import android.util.Log;

import com.amazonaws.mobileconnectors.pinpoint.targeting.notification.NotificationClient;import com.google.android.gms.gcm.GcmListenerService;

public class YOUR-PUSH-LISTENER-SERVICE-NAME extends GcmListenerService { public static final String LOGTAG = PushListenerService.class.getSimpleName();

// Intent action used in local broadcast public static final String ACTION_PUSH_NOTIFICATION = "push-notification"; // Intent keys public static final String INTENT_SNS_NOTIFICATION_FROM = "from"; public static final String INTENT_SNS_NOTIFICATION_DATA = "data";

/** * Helper method to extract push message from bundle. * * @param data bundle * @return message string from push notification */ public static String getMessage(Bundle data) { // If a push notification is sent as plain // text, then the message appears in "default". // Otherwise it's in the "message" for JSON format. return data.containsKey("default") ? data.getString("default") : data.getString( "message", ""); }

private void broadcast(final String from, final Bundle data) { Intent intent = new Intent(ACTION_PUSH_NOTIFICATION); intent.putExtra(INTENT_SNS_NOTIFICATION_FROM, from); intent.putExtra(INTENT_SNS_NOTIFICATION_DATA, data); LocalBroadcastManager.getInstance(this).sendBroadcast(intent); }

@Override public void onMessageReceived(final String from, final Bundle data) { Log.d(LOGTAG, "From:" + from); Log.d(LOGTAG, "Data:" + data.toString());

49

Page 53: AWS Mobile Hub 개발자 안내서 - 개발자 안내서 · 2020-02-07 · iOS - Swift 1.iOS를 플랫폼으로 선택하고 다음을 선택합니다. 2.Download Cloud Config(클라우드

AWS Mobile Hub 개발자 안내서 개발자 안내서Android 및 iOS

final NotificationClient notificationClient = MainActivity.pinpointManager.getNotificationClient();

NotificationClient.CampaignPushResult pushResult = notificationClient.handleGCMCampaignPush(from, data, this.getClass());

if (!NotificationClient.CampaignPushResult.NOT_HANDLED.equals(pushResult)) { // The push message was due to a Pinpoint campaign. // If the app was in the background, a local notification was added // in the notification center. If the app was in the foreground, an // event was recorded indicating the app was in the foreground, // for the demo, we will broadcast the notification to let the main // activity display it in a dialog. if ( NotificationClient.CampaignPushResult.APP_IN_FOREGROUND.equals(pushResult)) { // Create a message that will display the raw //data of the campaign push in a dialog. data.putString(" message", String.format("Received Campaign Push:\n%s", data.toString())); broadcast(from, data); } return; } }}

b. 푸시 리스너 서비스에 대응할 코드를 추가합니다.

앱이 수신되는 알림에 대응할 위치에 다음 코드를 배치할 수 있습니다.

import android.app.Activity;import android.app.AlertDialog;import android.content.BroadcastReceiver;import android.content.Context;import android.content.Intent;import android.content.IntentFilter;import android.support.v4.content.LocalBroadcastManager;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.util.Log;

public class MainActivity extends AppCompatActivity { public static final String LOG_TAG = MainActivity.class.getSimpleName();

@Override protected void onPause() { super.onPause();

// unregister notification receiver LocalBroadcastManager.getInstance(this).unregisterReceiver(notificationReceiver); }

@Override protected void onResume() { super.onResume();

// register notification receiver

50

Page 54: AWS Mobile Hub 개발자 안내서 - 개발자 안내서 · 2020-02-07 · iOS - Swift 1.iOS를 플랫폼으로 선택하고 다음을 선택합니다. 2.Download Cloud Config(클라우드

AWS Mobile Hub 개발자 안내서 개발자 안내서Android 및 iOS

LocalBroadcastManager.getInstance(this).registerReceiver(notificationReceiver, new IntentFilter(PushListenerService.ACTION_PUSH_NOTIFICATION)); }

private final BroadcastReceiver notificationReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { Log.d(LOG_TAG, "Received notification from local broadcast. Display it in a dialog.");

Bundle data = intent.getBundleExtra(PushListenerService.INTENT_SNS_NOTIFICATION_DATA); String message = PushListenerService.getMessage(data);

new AlertDialog.Builder(MainActivity.this) .setTitle("Push notification") .setMessage(message) .setPositiveButton(android.R.string.ok, null) .show(); } };

}

Android - Kotlin

다음 2단계에서는 앱을 대상으로 하는 푸시 알림을 수신하는 방법을 보여줍니다.

1. 푸시 리스너 서비스를 앱에 추가합니다.

클래스 이름이 앱 매니페스트에 사용되는 푸시 리스너 서비스 이름과 일치해야 합니다.pinpointManager는 이전 단계에 표시된 MainActivity에서 선언한 정적 PinpointManager 변수에 대한 참조입니다. 다음 단계를 사용하여 앱에서 수신하는 푸시 알림을 설정합니다.a. 다음 푸시 리스너 코드는 앱의 MainActivity가 이전 단원에 설명된 매니페스트 설정을 사용하여 구

성되어 있다고 가정합니다.

import android.content.Intent;import android.os.Bundle;import android.support.v4.content.LocalBroadcastManager;import android.util.Log;

import com.amazonaws.mobileconnectors.pinpoint.targeting.notification.NotificationClient;import com.google.android.gms.gcm.GcmListenerService;

class YOUR-PUSH-LISTENER-SERVICE-NAME : GcmListenerService() { companion object { private val LOG_TAG = this::class.java.simpleName const val ACTION_PUSH_NOTIFICATION: String = "push-notification" const val INTENT_SNS_NOTIFICATION_FROM: String = "from" const val INTENT_SNS_NOTIFICATION_DATA: String = "data"

// Helper method to extract push message from bundle. fun getMessage(data: Bundle) = if (data.containsKey("default") data.getString("default") else data.getString("message", "") }

51

Page 55: AWS Mobile Hub 개발자 안내서 - 개발자 안내서 · 2020-02-07 · iOS - Swift 1.iOS를 플랫폼으로 선택하고 다음을 선택합니다. 2.Download Cloud Config(클라우드

AWS Mobile Hub 개발자 안내서 개발자 안내서Android 및 iOS

private fun broadcast(from: String, data: Bundle) { val intent = Intent(ACTION_PUSH_NOTIFICATION).apply { putExtra(INTENT_SNS_NOTIFICATION_FROM, from) putExtra(INTENT_SNS_NOTIFICATION_DATA, data) } LocalBroadcastManager.getInstance(this).sendBroadcast(intent) }

override fun onMessageReceived(from: String?, data: Bundle?) { Log.d(LOG_TAG, "From: $from") Log.d(LOG_TAG, "Data: $data")

val notificationClient = MainActivity.pinpointManager!!.notificationClient!! val pushResult = notificationClient.handleGCMCampaignPush(from, data, this::class.java) if (pushResult != NotificationClient.CampaignPushResult.NOT_HANDLED) { // The push message was due to a Pinpoint campaign // If the app was in the background, a local notification was added // in the notification center. If the app was in the foreground, an // event was recorded indicating the app was in the foreground, // for the demo, we will broadcast the notification to let the main // activity display it in a dialog. if (pushResult == NotificationClient.CampaignPushResult.APP_IN_FOREGROUND) { data.putString("message", "Received Campaign Push:\n$data") broadcast(from, data) } return } }}

b. 푸시 리스너 서비스에 대응할 코드를 추가합니다.

앱이 수신되는 알림에 대응할 위치에 다음 코드를 배치할 수 있습니다.

import android.app.Activity;import android.app.AlertDialog;import android.content.BroadcastReceiver;import android.content.Context;import android.content.Intent;import android.content.IntentFilter;import android.support.v4.content.LocalBroadcastManager;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.util.Log;

class MainActivity : AppCompatActivity() { companion object { // ...

val notificationReceiver = object : BroadcastReceiver() { override fun onReceive(context: Context, intent: Intent) { Log.d(LOG_TAG, "Received notification from local broadcast.")

val data = intent.getBundleExtra(PushListenerService.INTENT_SNS_NOTIFICATION_DATA) val message = PushListenerService.getMessage(data)

// Uses anko library to display an alert dialog alert(message) { title = "Push notification" positiveButton("OK") { /* Do nothing */ } }.show()

52

Page 56: AWS Mobile Hub 개발자 안내서 - 개발자 안내서 · 2020-02-07 · iOS - Swift 1.iOS를 플랫폼으로 선택하고 다음을 선택합니다. 2.Download Cloud Config(클라우드

AWS Mobile Hub 개발자 안내서 개발자 안내서Android 및 iOS

} } }

override fun onPause() { super.onPause() LocalBroadcastManager.getInstance(this).unregisterReceiver(notificationReceiver) }

override fun onResume() { super.onResume() LoadBroadcastManager.getInstance(this).registerReceiver(notificationReceiver, IntentFilter(PushListenerService.ACTION_PUSH_NOTIFICATION)) }

// ...}

iOS - Swift

1. AppDelegate가 인스턴스화된 PinpointManager에서 푸시 수신 코드가 다음 함수에 존재하는지확인하십시오.

// . . .

func application( _ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {

pinpoint!.notificationManager.interceptDidRegisterForRemoteNotifications( withDeviceToken: deviceToken) }

func application( _ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable: Any], fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void) {

pinpoint!.notificationManager.interceptDidReceiveRemoteNotification( userInfo, fetchCompletionHandler: completionHandler)

if (application.applicationState == .active) { let alert = UIAlertController(title: "Notification Received", message: userInfo.description, preferredStyle: .alert) alert.addAction(UIAlertAction(title: "Ok", style: .default, handler: nil))

UIApplication.shared.keyWindow?.rootViewController?.present( alert, animated: true, completion:nil) } }// . . .}

2. 알림 권한을 요청하는 ViewController에 다음 코드를 추가합니다.

var userNotificationTypes : UIUserNotificationType

53

Page 57: AWS Mobile Hub 개발자 안내서 - 개발자 안내서 · 2020-02-07 · iOS - Swift 1.iOS를 플랫폼으로 선택하고 다음을 선택합니다. 2.Download Cloud Config(클라우드

AWS Mobile Hub 개발자 안내서 개발자 안내서Android 및 iOS

userNotificationTypes = [.alert , .badge , .sound]let notificationSettings = UIUserNotificationSettings.init(types: userNotificationTypes, categories: nil)UIApplication.shared.registerUserNotificationSettings(notificationSettings)UIApplication.shared.registerForRemoteNotifications()

3. Xcode의 프로젝트 탐색기에서 앱 대상을 선택하고 기능을 선택하고 푸시 알림을 활성화합니다.

4. AWS Mobile Hub에서 샘플 iOS 앱 빌드의 정보를 사용하여 앱을 빌드하고 실행합니다.

Amazon DynamoDB를 사용하여 모바일 앱에 NoSQL 데이터베이스 추가

다음 참조 콘텐츠는 iOS 및 Android용 AWS Mobile SDK를 사용해 구성된 기존 앱에만 적용됩니다. 새 모바일 또는 웹 앱을 빌드하거나 기존 앱에 클라우드 기능을 추가하고 있다면 대신 Amplify Framework 웹사이트를 방문하십시오. iOS 및 Android용 AWS Mobile SDK의 설명서는 Amplify Framework의 일부로 제공됩니다.

개요

AWS Mobile Hub nosqldb 기능은 Amazon DynamoDB를 사용하여 사용자가 데이터베이스 테이블을 생성하여 앱에 사용할 데이터를 저장 및 검색할 수 있도록 합니다.

백엔드 설정

1. 진행하기 전에 시작하기 (p. 3) 단계를 완료합니다. 이미 Amazon DynamoDB 테이블이 있는 경우How to integrate Integrate Your Existing NoSQL Table (p. 95) 단원을 참조하십시오.

2. NoSQL Database(NoSQL 데이터베이스) 활성화: Mobile Hub에서 해당 프로젝트를 열고 NoSQLDatabase(NoSQL 데이터베이스) 타일을 선택하여 이 기능을 활성화합니다.

3. 콘솔 작업 흐름에 따라 필요한 테이블을 정의합니다. 자세한 내용은 NoSQL 데이터베이스 기능 구성 (p. 192)을 참조하십시오.

4. 이 작업이 완료되면 "Your Backend has been updated"(백엔드가 업데이트되었습니다.)라는 경고가 팝업되고 클라우드 구성 파일의 최신 복사본을 다운로드하라는 메시지가 표시됩니다. 이 기능의 구성이 완료되면 배너를 선택하여 프로젝트 세부 정보 페이지로 돌아갑니다.

5. 프로젝트 세부 정보 페이지에서 최신 클라우드 구성 파일로 업데이트해야 하는 모든 앱에는 깜박이는 통합 버튼이 있습니다. 해당 버튼을 선택하여 통합 마법사로 들어갑니다.

54

Page 58: AWS Mobile Hub 개발자 안내서 - 개발자 안내서 · 2020-02-07 · iOS - Swift 1.iOS를 플랫폼으로 선택하고 다음을 선택합니다. 2.Download Cloud Config(클라우드

AWS Mobile Hub 개발자 안내서 개발자 안내서Android 및 iOS

6. 클라우드 구성 파일의 최신 버전으로 앱을 업데이트합니다. 이제 앱에서 백엔드의 최신 버전을 참조합니다. 다음을 선택하고 아래의 NoSQL 데이터베이스 설명서에 따라 백엔드에 연결합니다.

7. 앱에 필요한 모델을 다운로드합니다. 데이터 모델은 DynamoDB 테이블의 각 속성에 대한 설정 및 가져오기 메서드를 제공합니다.

백엔드에 연결

앱에 AWS Mobile NoSQL 데이터베이스를 추가하려면

Android - Java

1. 다음 단계를 통해 AWS Mobile SDK 구성 요소를 설정합니다.a. 다음을 app/build.gradle에 추가합니다.

dependencies{ implementation 'com.amazonaws:aws-android-sdk-ddb-mapper:2.7.+'}

b. 데이터베이스 작업을 수행하기 위해 호출을 수행하는 각 활동마다 다음의 API를 가져옵니다.

import com.amazonaws.mobileconnectors.dynamodbv2.dynamodbmapper.DynamoDBMapper;

2. 다음 예제에서 앱을 위한 DynamoDBMapper 클라이언트를 생성합니다.

import com.amazonaws.auth.AWSCredentialsProvider;import com.amazonaws.mobile.client.AWSMobileClient;import com.amazonaws.mobile.config.AWSConfiguration;

import com.amazonaws.mobileconnectors.dynamodbv2.dynamodbmapper.DynamoDBMapper;import com.amazonaws.services.dynamodbv2.AmazonDynamoDBClient;

import java.util.Random;

public class MainActivity extends AppCompatActivity {

// Declare a DynamoDBMapper object DynamoDBMapper dynamoDBMapper;

@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main);

// AWSMobileClient enables AWS user credentials to access your table AWSMobileClient.getInstance().initialize(this).execute();

AWSCredentialsProvider credentialsProvider = AWSMobileClient.getInstance().getCredentialsProvider(); AWSConfiguration configuration = AWSMobileClient.getInstance().getConfiguration();

55

Page 59: AWS Mobile Hub 개발자 안내서 - 개발자 안내서 · 2020-02-07 · iOS - Swift 1.iOS를 플랫폼으로 선택하고 다음을 선택합니다. 2.Download Cloud Config(클라우드

AWS Mobile Hub 개발자 안내서 개발자 안내서Android 및 iOS

// Add code to instantiate a AmazonDynamoDBClient AmazonDynamoDBClient dynamoDBClient = new AmazonDynamoDBClient(credentialsProvider);

this.dynamoDBMapper = DynamoDBMapper.builder() .dynamoDBClient(dynamoDBClient) .awsConfiguration(configuration) .build();

// other activity code ... }}

3. Mobile Hub 콘솔에서 다운로드한 프로젝트 데이터 모델 파일을 추가합니다. 데이터 모델은 모델링하는 테이블의 각 속성에 대해 집합을 제공하고 메서드를 가져옵니다.a. 다운로드한 데이터 모델인 ./YOUR-PROJECT-NAME-integration-lib-aws-my-sample-

app-android/src/main/java/com/amazonaws/models/nosqlYOUR-TABLE-NAMEDO.java를 주요 활동을 포함하는 Android Studio 폴더로 복사합니다.

Note

DynamoDB에 대한 비동기식 호출 사용DynamoDB에 대한 호출은 동기식이기 때문에 UI 스레드에 소속되지 않습니다. Runnable랩퍼 같은 비동기식 메서드를 사용하여 별도의 스레드에서 DynamoDBObjectMapper를 호출합니다.

Runnable runnable = new Runnable() { public void run() { //DynamoDB calls go here }};Thread mythread = new Thread(runnable);mythread.start();

Android - Kotlin

1. 다음 단계를 통해 AWS Mobile SDK 구성 요소를 설정합니다.a. 다음을 app/build.gradle에 추가합니다.

dependencies{ implementation 'com.amazonaws:aws-android-sdk-ddb-mapper:2.7.+' }

b. 데이터베이스 작업을 수행하기 위해 호출을 수행하는 각 활동마다 다음의 API를 가져옵니다.

import com.amazonaws.mobileconnectors.dynamodbv2.dynamodbmapper.DynamoDBMapper;

2. 다음 예제에서 앱을 위한 DynamoDBMapper 클라이언트를 생성합니다.

// import DynamoDBMapper import com.amazonaws.mobileconnectors.dynamodbv2.dynamodbmapper.DynamoDBMapper;

class MainActivity : AppCompatActivity() { private var dynamoDBMapper: DynamoDBMapper? = null

override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState)

56

Page 60: AWS Mobile Hub 개발자 안내서 - 개발자 안내서 · 2020-02-07 · iOS - Swift 1.iOS를 플랫폼으로 선택하고 다음을 선택합니다. 2.Download Cloud Config(클라우드

AWS Mobile Hub 개발자 안내서 개발자 안내서Android 및 iOS

setContentView(R.layout.activity_main)

val client = AmazonDynamoDBClient(AWSMobileClient.getInstance().credentialsProvider) dynamoDBMapper = DynamoDBMapper.builder() .dynamoDBClient(client) .awsConfiguration(AWSMobileClient.getInstance().configuration) .build() }}

3. Mobile Hub 콘솔에서 다운로드한 프로젝트 데이터 모델 파일을 추가합니다. 데이터 모델은 모델링하는 테이블의 각 속성에 대해 집합을 제공하고 메서드를 가져옵니다.a. 다운로드한 데이터 모델인 ./YOUR-PROJECT-NAME-integration-lib-aws-my-sample-

app-android/src/main/java/com/amazonaws/models/nosqlYOUR-TABLE-NAMEDO.java를 주요 활동을 포함하는 Android Studio 폴더로 복사합니다.

Note

DynamoDB에 대한 비동기식 호출 사용DynamoDB에 대한 호출은 동기식이기 때문에 UI 스레드에 소속되지 않습니다. thread 랩퍼같은 비동기식 메서드를 사용하여 별도의 스레드에서 DynamoDBObjectMapper를 호출합니다.

thread(start = true) { // DynamoDB calls go here}

iOS - Swift

1. 다음 단계를 통해 AWS Mobile SDK 구성 요소를 설정합니다.a. AWS Mobile SDK를 설치하도록 구성한 Podfile에는 다음을 포함해야 합니다.

platform :ios, '9.0'

target :'YOUR-APP-NAME' do use_frameworks!

pod 'AWSDynamoDB', '~> 2.6.13' # other podsend

계속하기 전에 pod install --repo-update를 실행합니다.

"[!] Failed to connect to GitHub to update the CocoaPods/Specs . . ."로 시작하는 오류 메시지가 표시되고 인터넷 연결이 작동하는 경우 openssl 및 Ruby 업데이트가 필요할수 있습니다.

b. DynamoDB API를 호출하는 클래스는 다음 가져오기 문을 사용해야 합니다.

import AWSCoreimport AWSDynamoDB

2. 데이터 모델 파일을 다운로드한 위치에서 your-table-name.swift 형태의 각 파일을AppDelegate.swift이 포함된 폴더로 끌어옵니다. Copy items if needed(필요 시 항목 복사) 및Create groups(그룹 생성)를 선택합니다(이러한 옵션이 제공되는 경우).

57

Page 61: AWS Mobile Hub 개발자 안내서 - 개발자 안내서 · 2020-02-07 · iOS - Swift 1.iOS를 플랫폼으로 선택하고 다음을 선택합니다. 2.Download Cloud Config(클라우드

AWS Mobile Hub 개발자 안내서 개발자 안내서Android 및 iOS

CRUD 작업 수행

주제• 데이터 모델 사용 (p. 58)• 항목 생성(저장) (p. 60)• 항목 읽기(로딩) (p. 61)• 항목 업데이트 (p. 62)• 항목 삭제 (p. 63)

데이터 모델 사용

생성한 Amazon DynamoDB 테이블에 앱을 연결하려면 Mobile Hub가 생성한 데이터 모델을 사용하거나 다음 형식으로 모델을 생성하십시오. 예를 들어 다음 섹션의 조각은 News라는 테이블에 근거하여 작성한 것입니다. 이 테이블의 파티션 키(해시 키) 이름은 userID이며, 정렬 키(범위 키)는 articleId이고, 기타 속성인 author, title, category, content, content가 있습니다.

Android - Java

다음 예에서는 NewsDO 클래스를 통해 News 테이블의 데이터 모델이 정의됩니다. 이 클래스는 이 섹션의 CRUD 메서드가 테이블 및 속성에 액세스하는 데 사용합니다. 이전 단계에서 Mobile Hub에서 다운로드한 데이터 모델 파일에는 테이블의 모델을 정의하는 유사한 클래스가 포함되어 있습니다.

이 클래스에는 Amazon DynamoDB 테이블 이름에 매핑하도록 주석이 추가되어 있습니다. 이 클래스에있는 getter의 속성 이름, 해시 키, 범위 키에는 앱이 데이터 작업 수행에 사용하는 로컬 변수 이름에 매핑하도록 주석이 추가되어 있습니다.

package com.amazonaws.models.nosql;

import com.amazonaws.mobileconnectors.dynamodbv2.dynamodbmapper.DynamoDBAttribute;import com.amazonaws.mobileconnectors.dynamodbv2.dynamodbmapper.DynamoDBHashKey;import com.amazonaws.mobileconnectors.dynamodbv2.dynamodbmapper.DynamoDBIndexHashKey;import com.amazonaws.mobileconnectors.dynamodbv2.dynamodbmapper.DynamoDBIndexRangeKey;import com.amazonaws.mobileconnectors.dynamodbv2.dynamodbmapper.DynamoDBRangeKey;import com.amazonaws.mobileconnectors.dynamodbv2.dynamodbmapper.DynamoDBTable;

import java.util.List;import java.util.Map;import java.util.Set;

@DynamoDBTable(tableName = "nosqlnews-mobilehub-1234567890-News")

public class NewsDO { private String _userId; private String _articleId; private String _author; private String _category; private String _content; private Double _creationDate; private String _title;

@DynamoDBHashKey(attributeName = "userId") @DynamoDBAttribute(attributeName = "userId") public String getUserId() { return _userId; }

public void setUserId(final String _userId) { this._userId = _userId; } @DynamoDBRangeKey(attributeName = "articleId")

58

Page 62: AWS Mobile Hub 개발자 안내서 - 개발자 안내서 · 2020-02-07 · iOS - Swift 1.iOS를 플랫폼으로 선택하고 다음을 선택합니다. 2.Download Cloud Config(클라우드

AWS Mobile Hub 개발자 안내서 개발자 안내서Android 및 iOS

@DynamoDBAttribute(attributeName = "articleId") public String getArticleId() { return _articleId; }

public void setArticleId(final String _articleId) { this._articleId = _articleId; } @DynamoDBAttribute(attributeName = "author") public String getAuthor() { return _author; }

public void setAuthor(final String _author) { this._author = _author; }

// setters and getters for other attributes ...

}

Android - Kotlin

다음 예에서는 NewsDO 클래스를 통해 News 테이블의 데이터 모델이 정의됩니다. 이 클래스는 이 섹션의 CRUD 메서드가 테이블 및 속성에 액세스하는 데 사용합니다. 이전 단계에서 Mobile Hub에서 다운로드한 데이터 모델 파일에는 테이블의 모델을 정의하는 유사한 클래스가 포함되어 있습니다.

이 클래스에는 Amazon DynamoDB 테이블 이름에 매핑하도록 주석이 추가되어 있습니다. 이 클래스에있는 getter의 속성 이름, 해시 키, 범위 키에는 앱이 데이터 작업 수행에 사용하는 로컬 변수 이름에 매핑하도록 주석이 추가되어 있습니다.

package com.amazonaws.models.nosql;

import com.amazonaws.mobileconnectors.dynamodbv2.dynamodbmapper.DynamoDBAttribute;import com.amazonaws.mobileconnectors.dynamodbv2.dynamodbmapper.DynamoDBHashKey;import com.amazonaws.mobileconnectors.dynamodbv2.dynamodbmapper.DynamoDBIndexHashKey;import com.amazonaws.mobileconnectors.dynamodbv2.dynamodbmapper.DynamoDBIndexRangeKey;import com.amazonaws.mobileconnectors.dynamodbv2.dynamodbmapper.DynamoDBRangeKey;import com.amazonaws.mobileconnectors.dynamodbv2.dynamodbmapper.DynamoDBTable;

import java.util.List;import java.util.Map;import java.util.Set;

@DynamoDBTable(tableName = "nosqlnews-mobilehub-1234567890-News")

data class NewsDO { @DynamoDBHashKey(attributeName = "userId" ) @DynamoDBAttribute(attributeName = "userId") var userId: String?

@DynamoDBRangeKey(attributeName = "articleId") @DynamoDBAttribute(attributeName = "articleId") var articleId: String?

@DynamoDBAttribute(attributeName = "author") var author: String?

// setters and getters for other attributes ...}

Mobile Hub에서 생성된 Android 모델 파일을 다운로드하는 경우 이 파일은 Java로 제공되므로 수정하지 않고도 Kotlin 프로젝트에 사용할 수 있습니다.

59

Page 63: AWS Mobile Hub 개발자 안내서 - 개발자 안내서 · 2020-02-07 · iOS - Swift 1.iOS를 플랫폼으로 선택하고 다음을 선택합니다. 2.Download Cloud Config(클라우드

AWS Mobile Hub 개발자 안내서 개발자 안내서Android 및 iOS

iOS - Swift

다음 예에서는 News 클래스를 통해 News 테이블의 데이터 모델이 정의됩니다. 이 클래스는 이 섹션의CRUD 메서드가 테이블 및 속성에 액세스하는 데 사용합니다. 이전 단계에서 Mobile Hub에서 다운로드한 데이터 모델 파일에는 테이블의 모델을 정의하는 유사한 클래스가 포함되어 있습니다.

이 모델 클래스의 함수는 앱이 데이터 작업에 사용하는 Amazon DynamoDB 테이블, 해시 키, 범위 키 속성 이름을 반환합니다. 예를 들어 dynamoDBTableName()은 AWS의 테이블 객체 이름을 반환합니다.로컬 변수 이름은 테이블의 속성 이름에 매핑됩니다. 예를 들어 userId는 Amazon DynamoDB 테이블의 로컬 변수 및 속성에 대한 이름입니다.

이 예는 Mobile Hub가 생성한 데이터 모델보다 조금 더 단순하지만 기능적으로는 동일합니다.

// News.swift

import Foundationimport UIKitimport AWSDynamoDB

class News: AWSDynamoDBObjectModel, AWSDynamoDBModeling {

@objc var userId: String? @objc var articleId: String? @objc var author: String? @objc var category: String? @objc var content: String? @objc var creationDate: NSNumber? @objc var title: String?

class func dynamoDBTableName() -> String {

return "nosqlnews-mobilehub-1200412570-News" }

class func hashKeyAttribute() -> String {

return "userId" }

class func rangeKeyAttribute() -> String {

return "articleId" }

}

항목 생성(저장)

다음 코드를 사용하여 NoSQL 데이터베이스 테이블에서 항목을 생성합니다.

Android - Java

public void createNews() { final NewsDO newsItem = new NewsDO();

newsItem.setUserId(unique-user-id);

newsItem.setArticleId("Article1"); newsItem.setContent("This is the article content");

new Thread(new Runnable() {

60

Page 64: AWS Mobile Hub 개발자 안내서 - 개발자 안내서 · 2020-02-07 · iOS - Swift 1.iOS를 플랫폼으로 선택하고 다음을 선택합니다. 2.Download Cloud Config(클라우드

AWS Mobile Hub 개발자 안내서 개발자 안내서Android 및 iOS

@Override public void run() { dynamoDBMapper.save(newsItem); // Item saved } }).start();}

Android - Kotlin

fun createNews() { val NewsDO newsItem = NewsDO() newsItem.userId = "unique-user-id" newsItem.articleId = UUID.randomUUID().toString() newsItem.author = "Your Name" newsItem.content = "This is the article content"

thread(start = true) { dynamoDBMapper.save(newsItem) } }

iOS - Swift

func createNews() { let dynamoDbObjectMapper = AWSDynamoDBObjectMapper.default()

// Create data object using data models you downloaded from Mobile Hub let newsItem: News = News()

newsItem.userId = AWSIdentityManager.default().identityId

newsItem.articleId = "YourArticleId" newsItem.title = "YourTitlestring" newsItem.author = "YourAuthor" newsItem.creationDate = NSDate().timeIntervalSince1970 as NSNumber

//Save a new item dynamoDbObjectMapper.save(newsItem, completionHandler: { (error: Error?) -> Void in

if let error = error { print("Amazon DynamoDB Save Error: \(error)") return } print("An item was saved.") })}

항목 읽기(로딩)

다음 코드를 사용하여 NoSQL 데이터베이스 테이블에서 항목을 읽습니다.

Android - Java

public void readNews() { new Thread(new Runnable() { @Override public void run() {

NewsDO newsItem = dynamoDBMapper.load(

61

Page 65: AWS Mobile Hub 개발자 안내서 - 개발자 안내서 · 2020-02-07 · iOS - Swift 1.iOS를 플랫폼으로 선택하고 다음을 선택합니다. 2.Download Cloud Config(클라우드

AWS Mobile Hub 개발자 안내서 개발자 안내서Android 및 iOS

NewsDO.class, unique-user-id, "Article1");

// Item read // Log.d("News Item:", newsItem.toString()); } }).start();}

Android - Kotlin

fun readNews(userId: String, articleId: String, callback: (NewsDO?) -> Unit) { thread(start = true) { var newsItem = dynamoDBMapper.load(NewsDO::class.java, userId, articleId) runOnUiThread { callback(newsItem) } } }

iOS - Swift

func readNews() { let dynamoDbObjectMapper = AWSDynamoDBObjectMapper.default()

// Create data object using data models you downloaded from Mobile Hub let newsItem: News = News(); newsItem.userId = AWSIdentityManager.default().identityId

dynamoDbObjectMapper.load( News.self, hashKey: newsItem.userId, rangeKey: "YourArticleId", completionHandler: { (objectModel: AWSDynamoDBObjectModel?, error: Error?) -> Void in if let error = error { print("Amazon DynamoDB Read Error: \(error)") return } print("An item was read.") }) }

항목 업데이트

다음 코드를 사용하여 NoSQL 데이터베이스 테이블에서 항목을 업데이트합니다.

Android - Java

public void updateNews() { final NewsDO newsItem = new NewsDO();

newsItem.setUserId(unique-user-id);

newsItem.setArticleId("Article1"); newsItem.setContent("This is the updated content.");

new Thread(new Runnable() { @Override public void run() {

62

Page 66: AWS Mobile Hub 개발자 안내서 - 개발자 안내서 · 2020-02-07 · iOS - Swift 1.iOS를 플랫폼으로 선택하고 다음을 선택합니다. 2.Download Cloud Config(클라우드

AWS Mobile Hub 개발자 안내서 개발자 안내서Android 및 iOS

dynamoDBMapper.save(newsItem);

// Item updated } }).start();}

Android - Kotlin

fun updateNews(updatedNews: NewsDO) { thread(start = true) { dynamoDBMapper.save(updatedNews) } }

iOS - Swift

func updateNews() { let dynamoDbObjectMapper = AWSDynamoDBObjectMapper.default()

let newsItem: News = News();

newsItem.userId = "unique-user-id"

newsItem.articleId = "YourArticleId" newsItem.title = "This is the Title" newsItem.author = "B Smith" newsItem.creationDate = NSDate().timeIntervalSince1970 as NSNumber newsItem.category = "Local News"

dynamoDbObjectMapper.save(newsItem, completionHandler: {(error: Error?) -> Void in if let error = error { print(" Amazon DynamoDB Save Error: \(error)") return } print("An item was updated.") })}

항목 삭제

다음 코드를 사용하여 NoSQL 데이터베이스 테이블에서 항목을 삭제합니다.

Android - Java

public void deleteNews() { new Thread(new Runnable() { @Override public void run() {

NewsDO newsItem = new NewsDO();

newsItem.setUserId(unique-user-id); //partition key

newsItem.setArticleId("Article1"); //range (sort) key

dynamoDBMapper.delete(newsItem);

// Item deleted } }).start();

63

Page 67: AWS Mobile Hub 개발자 안내서 - 개발자 안내서 · 2020-02-07 · iOS - Swift 1.iOS를 플랫폼으로 선택하고 다음을 선택합니다. 2.Download Cloud Config(클라우드

AWS Mobile Hub 개발자 안내서 개발자 안내서Android 및 iOS

}

Android - Kotlin

public void deleteNews(userId: String, articleId: String) { thread(start = true) { val item = NewsDO() item.userId = userId item.articleId = articleId

dynamoDBMapper.delete(item) } }

iOS - Swift

func deleteNews() { let dynamoDbObjectMapper = AWSDynamoDBObjectMapper.default()

let itemToDelete = News() itemToDelete?.userId = "unique-user-id" itemToDelete?.articleId = "YourArticleId"

dynamoDbObjectMapper.remove(itemToDelete!, completionHandler: {(error: Error?) -> Void in if let error = error { print(" Amazon DynamoDB Save Error: \(error)") return } print("An item was deleted.") })}

쿼리 수행

쿼리 작업을 통해 테이블에서 항목을 찾을 수 있습니다. 테이블의 해시 키(파티션 키) 및 범위 키(정렬 키) 속성 모두를 사용하여 쿼리를 정의해야 합니다. 찾고자 하는 속성들을 지정하여 결과를 필터링할 수 있습니다.

다음 예제 코드는 userId(범위 키)로 시작하는 문서 ID 및 Trial(해시 키)와 함께 제출된 뉴스 쿼리를 보여줍니다.

Android - Java

public void queryNews() {

new Thread(new Runnable() { @Override public void run() { NewsDO news = new NewsDO(); news.setUserId(unique-user-id); news.setArticleId("Article1");

Condition rangeKeyCondition = new Condition() .withComparisonOperator(ComparisonOperator.BEGINS_WITH) .withAttributeValueList(new AttributeValue().withS("Trial"));

DynamoDBQueryExpression queryExpression = new DynamoDBQueryExpression() .withHashKeyValues(note) .withRangeKeyCondition("articleId", rangeKeyCondition) .withConsistentRead(false);

64

Page 68: AWS Mobile Hub 개발자 안내서 - 개발자 안내서 · 2020-02-07 · iOS - Swift 1.iOS를 플랫폼으로 선택하고 다음을 선택합니다. 2.Download Cloud Config(클라우드

AWS Mobile Hub 개발자 안내서 개발자 안내서Android 및 iOS

PaginatedList<NewsDO> result = dynamoDBMapper.query(NewsDO.class, queryExpression);

Gson gson = new Gson(); StringBuilder stringBuilder = new StringBuilder();

// Loop through query results for (int i = 0; i < result.size(); i++) { String jsonFormOfItem = gson.toJson(result.get(i)); stringBuilder.append(jsonFormOfItem + "\n\n"); }

// Add your code here to deal with the data result Log.d("Query result: ", stringBuilder.toString());

if (result.isEmpty()) { // There were no items matching your query. } } }).start();}

Android - Kotlin

public void queryNews(userId: String, articleId: String, callback: (List<NewsDO>?) -> Unit) { thread(start = true) { val item = NewsDO() item.userId = userId item.articleId = articleId

val rangeKeyCondition = Condition() .withComparisonOperator(ComparisonOperator.BEGINS_WITH) .withAttributeValueList(AttributeValue().withS("Trial")) val queryExpression = DynamoDBQueryExpression() .withHashKeyValues(item) .withRangeKeyCondition("articleId", rangeKeyCondition) .withConsistentRead(false); val result = dynamoDBMapper.query(NewsDO::class.java, queryExpression) runOnUiThread { callback(result) } }}

iOS - Swift

func queryNote() { // 1) Configure the query let queryExpression = AWSDynamoDBQueryExpression() queryExpression.keyConditionExpression = "#articleId >= :articleId AND #userId = :userId"

queryExpression.expressionAttributeNames = [ "#userId": "userId", "#articleId": "articleId" ] queryExpression.expressionAttributeValues = [ ":articleId": "SomeArticleId", ":userId": "unique-user-id" ]

// 2) Make the query

let dynamoDbObjectMapper = AWSDynamoDBObjectMapper.default()

65

Page 69: AWS Mobile Hub 개발자 안내서 - 개발자 안내서 · 2020-02-07 · iOS - Swift 1.iOS를 플랫폼으로 선택하고 다음을 선택합니다. 2.Download Cloud Config(클라우드

AWS Mobile Hub 개발자 안내서 개발자 안내서Android 및 iOS

dynamoDbObjectMapper.query(News.self, expression: queryExpression) { (output: AWSDynamoDBPaginatedOutput?, error: Error?) in if error != nil { print("The request failed. Error: \(String(describing: error))") } if output != nil { for news in output!.items { let newsItem = news as? News print("\(newsItem!.title!)") } } }}

Amazon S3를 사용하여 모바일 앱에 사용자 파일 스토리지 추가

다음 참조 콘텐츠는 iOS 및 Android용 AWS Mobile SDK를 사용해 구성된 기존 앱에만 적용됩니다. 새 모바일 또는 웹 앱을 빌드하거나 기존 앱에 클라우드 기능을 추가하고 있다면 대신 Amplify Framework 웹사이트를 방문하십시오. iOS 및 Android용 AWS Mobile SDK의 설명서는 Amplify Framework의 일부로 제공됩니다.

개요

사용자 앱이 목적에 따른 권한 모델을 통해 사용자 파일을 클라우드 스토리지에 저장하거나 클라우드 스토리지에서 가져올 수 있습니다. Mobile Hub 사용자 파일 스토리지 (p. 209)는 Amazon Simple StorageService(Amazon S3)를 사용하여 클라우드 스토리지 버킷을 배포 및 구성합니다.

백엔드 설정

1. 진행하기 전에 시작하기 (p. 3) 단계를 완료합니다.2. User File Storage(사용자 파일 스토리지) 활성화: Mobile Hub에서 해당 프로젝트를 열고 User File

Storage(사용자 파일 스토리지) 타일을 선택하여 이 기능을 활성화합니다.3. 이 작업이 완료되면 "Your Backend has been updated"(백엔드가 업데이트되었습니다.)라는 경고가 팝업

되고 클라우드 구성 파일의 최신 복사본을 다운로드하라는 메시지가 표시됩니다. 이 기능의 구성이 완료되면 배너를 선택하여 프로젝트 세부 정보 페이지로 돌아갑니다.

4. 프로젝트 세부 정보 페이지에서 최신 클라우드 구성 파일로 업데이트해야 하는 모든 앱에는 깜박이는 통합 버튼이 있습니다. 해당 버튼을 선택하여 통합 마법사로 들어갑니다.

5. 클라우드 구성 파일의 최신 버전으로 앱을 업데이트합니다. 이제 앱에서 백엔드의 최신 버전을 참조합니다. '다음'을 선택하고 아래의 사용자 파일 스토리지 설명서에 따라 백엔드에 연결합니다.

66

Page 70: AWS Mobile Hub 개발자 안내서 - 개발자 안내서 · 2020-02-07 · iOS - Swift 1.iOS를 플랫폼으로 선택하고 다음을 선택합니다. 2.Download Cloud Config(클라우드

AWS Mobile Hub 개발자 안내서 개발자 안내서Android 및 iOS

백엔드에 연결

이 페이지의 통합 단계를 사용하기 전에 add-aws-mobile-user-sign-in-backend-setup 단계를 완료해야 합니다.

앱에 사용자 파일 스토리지를 추가하려면

Android - Java

다음과 같이 AWS Mobile SDK 구성 요소를 설정합니다.

1. 다음 내용을 app/build.gradle(모듈 앱)에 추가합니다.

dependencies { implementation 'com.amazonaws:aws-android-sdk-s3:2.7.+' implementation 'com.amazonaws:aws-android-sdk-cognito:2.7.+'}

Gradle 동기화를 수행하여 AWS Mobile SDK 구성 요소를 앱으로 다운로드합니다.2. 다음을 AndroidManifest.xml로 추가하십시오:

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

<application ... >

<!- Other manifest / application items . . . ->

<service android:name="com.amazonaws.mobileconnectors.s3.transferutility.TransferService" android:enabled="true" />

</application>

3. 사용자 파일 스토리지 작업을 수행하기 위해 호출하는 각 활동에 대해 다음 패키지를 가져옵니다.

import com.amazonaws.mobileconnectors.s3.transferutility.*;

Android - Kotlin

다음과 같이 AWS Mobile SDK 구성 요소를 설정합니다.

1. 다음을 app/build.gradle로 추가하십시오:

apply plugin: 'kotlin-android'

apply plugin: 'kotlin-android-extensions'

dependencies { implementation"org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" implementation 'com.amazonaws:aws-android-sdk-s3:2.7.+' implementation 'com.amazonaws:aws-android-sdk-cognito:2.7.+'}

Gradle 동기화를 수행하여 AWS Mobile SDK 구성 요소를 앱으로 다운로드합니다.2. 다음을 AndroidManifest.xml로 추가하십시오:

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

67

Page 71: AWS Mobile Hub 개발자 안내서 - 개발자 안내서 · 2020-02-07 · iOS - Swift 1.iOS를 플랫폼으로 선택하고 다음을 선택합니다. 2.Download Cloud Config(클라우드

AWS Mobile Hub 개발자 안내서 개발자 안내서Android 및 iOS

<application ... >

<!- Other manifest / application items . . . ->

<service android:name="com.amazonaws.mobileconnectors.s3.transferutility.TransferService" android:enabled="true" />

</application>

3. 사용자 파일 스토리지 작업을 수행하기 위해 호출하는 각 활동에 대해 다음 패키지를 가져옵니다.

import com.amazonaws.mobileconnectors.s3.transferutility.*;

iOS - Swift

다음과 같이 AWS Mobile SDK 구성 요소를 설정합니다.

1. AWS Mobile SDK를 설치하도록 구성한 Podfile에는 다음을 추가합니다.

platform :ios, '9.0'

target :'YOUR-APP-NAME' do use_frameworks!

pod 'AWSS3', '~> 2.6.13' # For file transfers pod 'AWSCognito', '~> 2.6.13' #For data sync

# other pods . . .

end

계속하기 전에 pod install --repo-update를 실행합니다.

"[!] Failed to connect to GitHub to update the CocoaPods/Specs . . ."로 시작하는 오류 메시지가 표시되고 인터넷 연결이 작동하는 경우 openssl 및 Ruby 업데이트가 필요할 수있습니다.

2. 사용자 파일 스토리지 작업을 수행하는 클래스에 다음 가져오기를 추가합니다.

import AWSCoreimport AWSS3

3. AppDelegate에 다음 코드를 추가하여 AWS Mobile과의 실행 시간 연결을 설정합니다.

import UIKitimport AWSMobileClient

@UIApplicationMainclass AppDelegate: UIResponder, UIApplicationDelegate {

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { return AWSMobileClient.sharedInstance().interceptApplication(application, didFinishLaunchingWithOptions: launchOptions) }}

68

Page 72: AWS Mobile Hub 개발자 안내서 - 개발자 안내서 · 2020-02-07 · iOS - Swift 1.iOS를 플랫폼으로 선택하고 다음을 선택합니다. 2.Download Cloud Config(클라우드

AWS Mobile Hub 개발자 안내서 개발자 안내서Android 및 iOS

파일 업로드

Android - Java

파일을 Amazon S3 버킷에 업로드하려면 AWSMobileClient를 사용하여 AWSConfiguration및 AWSCredentialsProvider를 가져온 후 TransferUtility 객체를 생성합니다.AWSMobileClient에는 인증된 세션을 재개하고 자격 증명 공급자를 생성하기 위한 활동 컨텍스트가필요합니다.

다음 예에서는 활동의 맥락에서 TransferUtility를 사용하는 방법을 보여줍니다. 애플리케이션 컨텍스트에서 TransferUtility를 생성하는 경우 AWSCredentialsProvider를 구축해 TransferUtility로 전달한 후 AWSConfiguration 객체를 형성하는 데 사용합니다.TransferUtility는 업로드될 파일의 크기를 확인하여 파일 크기가 5MB를 초과하면 멀티파트 업로드 사용으로 자동 전환합니다.

import android.app.Activity; import android.util.Log;

import com.amazonaws.mobile.client.AWSMobileClient; import com.amazonaws.mobileconnectors.s3.transferutility.TransferUtility; import com.amazonaws.mobileconnectors.s3.transferutility.TransferState; import com.amazonaws.mobileconnectors.s3.transferutility.TransferObserver; import com.amazonaws.mobileconnectors.s3.transferutility.TransferListener; import com.amazonaws.services.s3.AmazonS3Client;

import java.io.File;

public class YourActivity extends Activity {

@Override protected void onCreate(Bundle savedInstanceState) { AWSMobileClient.getInstance().initialize(this).execute(); uploadWithTransferUtility(); }

public void uploadWithTransferUtility() {

TransferUtility transferUtility = TransferUtility.builder() .context(getApplicationContext()) .awsConfiguration(AWSMobileClient.getInstance().getConfiguration()) .s3Client(new AmazonS3Client(AWSMobileClient.getInstance().getCredentialsProvider())) .build();

TransferObserver uploadObserver = transferUtility.upload( "s3Folder/s3Key.txt", new File("/path/to/file/localFile.txt"));

// Attach a listener to the observer to get state update and progress notifications uploadObserver.setTransferListener(new TransferListener() {

@Override public void onStateChanged(int id, TransferState state) { if (TransferState.COMPLETED == state) { // Handle a completed upload. } }

@Override public void onProgressChanged(int id, long bytesCurrent, long bytesTotal) {

69

Page 73: AWS Mobile Hub 개발자 안내서 - 개발자 안내서 · 2020-02-07 · iOS - Swift 1.iOS를 플랫폼으로 선택하고 다음을 선택합니다. 2.Download Cloud Config(클라우드

AWS Mobile Hub 개발자 안내서 개발자 안내서Android 및 iOS

float percentDonef = ((float) bytesCurrent / (float) bytesTotal) * 100; int percentDone = (int)percentDonef;

Log.d("YourActivity", "ID:" + id + " bytesCurrent: " + bytesCurrent + " bytesTotal: " + bytesTotal + " " + percentDone + "%"); }

@Override public void onError(int id, Exception ex) { // Handle errors }

});

// If you prefer to poll for the data, instead of attaching a // listener, check for the state and progress in the observer. if (TransferState.COMPLETED == uploadObserver.getState()) { // Handle a completed upload. }

Log.d("YourActivity", "Bytes Transferrred: " + uploadObserver.getBytesTransferred()); Log.d("YourActivity", "Bytes Total: " + uploadObserver.getBytesTotal()); }}

Android - Kotlin

파일을 Amazon S3 버킷에 업로드하려면 AWSMobileClient를 사용하여 AWSConfiguration및 AWSCredentialsProvider를 가져온 후 TransferUtility 객체를 생성합니다.AWSMobileClient에는 인증된 세션을 재개하고 자격 증명 공급자를 생성하기 위한 활동 컨텍스트가필요합니다.

다음 예에서는 활동의 맥락에서 TransferUtility를 사용하는 방법을 보여줍니다.

애플리케이션 컨텍스트에서 TransferUtility를 생성하는 경우 AWSCredentialsProvider를구축해 TransferUtility로 전달한 후 AWSConfiguration 객체를 형성하는 데 사용합니다.TransferUtility는 업로드될 파일의 크기를 확인하여 파일 크기가 5MB를 초과하면 멀티파트 업로드 사용으로 자동 전환합니다.

import android.os.Bundleimport android.support.v7.app.AppCompatActivityimport android.util.Logimport com.amazonaws.AmazonServiceExceptionimport com.amazonaws.mobile.client.AWSMobileClientimport com.amazonaws.mobileconnectors.s3.transferutility.TransferListenerimport com.amazonaws.mobileconnectors.s3.transferutility.TransferStateimport com.amazonaws.mobileconnectors.s3.transferutility.TransferUtilityimport com.amazonaws.services.s3.AmazonS3Clientimport kotlinx.android.synthetic.main.activity_main.*import java.io.File;

class YourActivity : Activity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState)

AWSMobileClient.getInstance().initialize(this).execute() uploadWithTransferUtility() }

fun uploadWithTransferUtility() { val transferUtility = TransferUtility.builder()

70

Page 74: AWS Mobile Hub 개발자 안내서 - 개발자 안내서 · 2020-02-07 · iOS - Swift 1.iOS를 플랫폼으로 선택하고 다음을 선택합니다. 2.Download Cloud Config(클라우드

AWS Mobile Hub 개발자 안내서 개발자 안내서Android 및 iOS

.context(this.applicationContext) .awsConfiguration(AWSMobileClient.getInstance().configuration) .s3Client(AmazonS3Client(AWSMobileClient.getInstance().credentialsProvider)) .build()

val uploadObserver = transferUtility.upload("s3folder/s3key.txt", File("/path/to/localfile.txt"))

// Attach a listener to the observer uploadObserver.setTransferListener(object : TransferListener { override fun onStateChanged(id: Int, state: TransferState) { if (state == TransferState.COMPLETED) { // Handle a completed upload } }

override fun onProgressChanged(id: Int, current: Long, total: Long) { val done = (((current.toDouble() / total) * 100.0).toInt()) Log.d(LOG_TAG, "UPLOAD - - ID: $id, percent done = $done") }

override fun onError(id: Int, ex: Exception) { Log.d(LOG_TAG, "UPLOAD ERROR - - ID: $id - - EX: ${ex.message.toString()}") } })

// If you prefer to long-poll for updates if (uploadObserver.state == TransferState.COMPLETED) { /* Handle completion */ }

val bytesTransferred = uploadObserver.bytesTransferred }}

iOS - Swift

다음은 Amazon S3 버킷에 파일을 업로드하는 방법을 나타낸 예제입니다.

func uploadData() {

let data: Data = Data() // Data to be uploaded

let expression = AWSS3TransferUtilityUploadExpression() expression.progressBlock = {(task, progress) in DispatchQueue.main.async(execute: { // Do something e.g. Update a progress bar. }) }

var completionHandler: AWSS3TransferUtilityUploadCompletionHandlerBlock? completionHandler = { (task, error) -> Void in DispatchQueue.main.async(execute: { // Do something e.g. Alert a user for transfer completion. // On failed uploads, `error` contains the error object. }) }

let transferUtility = AWSS3TransferUtility.default()

transferUtility.uploadData(data, bucket: "YourBucket", key: "YourFileName",

71

Page 75: AWS Mobile Hub 개발자 안내서 - 개발자 안내서 · 2020-02-07 · iOS - Swift 1.iOS를 플랫폼으로 선택하고 다음을 선택합니다. 2.Download Cloud Config(클라우드

AWS Mobile Hub 개발자 안내서 개발자 안내서Android 및 iOS

contentType: "text/plain", expression: expression, completionHandler: completionHandler).continueWith { (task) -> AnyObject! in if let error = task.error { print("Error: \(error.localizedDescription)") }

if let _ = task.result { // Do something with uploadTask. } return nil; }}

파일 다운로드

Android - Java

Amazon S3 버킷에서 파일을 다운로드하려면 AWSMobileClient를 사용하여 AWSConfiguration및 AWSCredentialsProvider를 가져온 후 TransferUtility 객체를 생성합니다.AWSMobileClient에는 인증된 세션을 재개하고 AWSCredentialsProvider를 생성하기 위한 활동컨텍스트가 필요합니다.

다음 예에서는 활동의 맥락에서 TransferUtility를 사용하는 방법을 보여줍니다. 애플리케이션컨텍스트에서 TransferUtility를 생성하면 AWSCredentialsProvider를 구성한 후 이것을TransferUtility로 전달하여 AWSConfiguration 객체 구성에 사용할 수 있습니다.

import android.app.Activity;import android.util.Log;

import com.amazonaws.mobile.client.AWSMobileClient;import com.amazonaws.mobileconnectors.s3.transferutility.TransferUtility;import com.amazonaws.mobileconnectors.s3.transferutility.TransferState;import com.amazonaws.mobileconnectors.s3.transferutility.TransferObserver;import com.amazonaws.mobileconnectors.s3.transferutility.TransferListener;import com.amazonaws.services.s3.AmazonS3Client;

import java.io.File;

public class YourActivity extends Activity {

@Override protected void onCreate(Bundle savedInstanceState) { AWSMobileClient.getInstance().initialize(this).execute(); downloadWithTransferUtility(); }

private void downloadWithTransferUtility() {

TransferUtility transferUtility = TransferUtility.builder() .context(getApplicationContext()) .awsConfiguration(AWSMobileClient.getInstance().getConfiguration()) .s3Client(new AmazonS3Client(AWSMobileClient.getInstance().getCredentialsProvider())) .build();

TransferObserver downloadObserver = transferUtility.download( "s3Folder/s3Key.txt", new File("/path/to/file/localFile.txt"));

72

Page 76: AWS Mobile Hub 개발자 안내서 - 개발자 안내서 · 2020-02-07 · iOS - Swift 1.iOS를 플랫폼으로 선택하고 다음을 선택합니다. 2.Download Cloud Config(클라우드

AWS Mobile Hub 개발자 안내서 개발자 안내서Android 및 iOS

// Attach a listener to the observer to get state update and progress notifications downloadObserver.setTransferListener(new TransferListener() {

@Override public void onStateChanged(int id, TransferState state) { if (TransferState.COMPLETED == state) { // Handle a completed upload. } }

@Override public void onProgressChanged(int id, long bytesCurrent, long bytesTotal) { float percentDonef = ((float)bytesCurrent/(float)bytesTotal) * 100; int percentDone = (int)percentDonef;

Log.d(LOG_TAG, " ID:" + id + " bytesCurrent: " + bytesCurrent + " bytesTotal: " + bytesTotal + " " + percentDone + "%"); }

@Override public void onError(int id, Exception ex) { // Handle errors }

});

// If you prefer to poll for the data, instead of attaching a // listener, check for the state and progress in the observer. if (TransferState.COMPLETED == downloadObserver.getState()) { // Handle a completed upload. }

Log.d(LOG_TAG, "Bytes Transferrred: " + downloadObserver.getBytesTransferred()); Log.d(LOG_TAG, "Bytes Total: " + downloadObserver.getBytesTotal()); }}

Android - Kotlin

Amazon S3 버킷에서 파일을 다운로드하려면 AWSMobileClient를 사용하여 AWSConfiguration및 AWSCredentialsProvider를 가져온 후 TransferUtility 객체를 생성합니다.AWSMobileClient에는 인증된 세션을 재개하고 AWSCredentialsProvider를 생성하기 위한 활동컨텍스트가 필요합니다.

다음 예에서는 활동의 맥락에서 TransferUtility를 사용하는 방법을 보여줍니다. 애플리케이션컨텍스트에서 TransferUtility를 생성하면 AWSCredentialsProvider를 구성한 후 이것을TransferUtility로 전달하여 AWSConfiguration 객체 구성에 사용할 수 있습니다.

import android.app.Activity;import android.util.Log;

import com.amazonaws.mobile.client.AWSMobileClient;import com.amazonaws.mobileconnectors.s3.transferutility.TransferUtility;import com.amazonaws.mobileconnectors.s3.transferutility.TransferState;import com.amazonaws.mobileconnectors.s3.transferutility.TransferObserver;import com.amazonaws.mobileconnectors.s3.transferutility.TransferListener;import com.amazonaws.services.s3.AmazonS3Client;

import java.io.File;

class YourActivity : Activity() { override fun onCreate(savedInstanceState: Bundle?) {

73

Page 77: AWS Mobile Hub 개발자 안내서 - 개발자 안내서 · 2020-02-07 · iOS - Swift 1.iOS를 플랫폼으로 선택하고 다음을 선택합니다. 2.Download Cloud Config(클라우드

AWS Mobile Hub 개발자 안내서 개발자 안내서Android 및 iOS

super.onCreate(savedInstanceState) setContentView(R.layout.activity_your)

AWSMobileClient.getInstance().initialize(this).execute() donwloadWithTransferUtility() }

private fun downloadWithTransferUtility() { val transferUtility = TransferUtility.builder() .context(applicationContext) .awsConfiguration(AWSMobileClient.getInstance().configuration) .s3Client(AmazonS3Client(AWSMobileClient.getInstance().credentialsProvider)) .build()

val downloadObserver = transferUtility.download( "s3folder/s3key.txt", File("/path/to/file/localfile.txt"))

// Attach a listener to get state updates downloadObserver.setTransferListener(object : TransferListener { override fun onStateChanged(id: Int, state: TransferState) { if (state == TransferState.COMPLETED) { // Handle a completed upload. } }

override fun onProgressChanged(id: Int, current: Long, total: Long) { try { val done = (((current.toDouble() / total) * 100.0).toInt()) //as Int Log.d(LOG_TAG, "DOWNLOAD - - ID: $id, percent done = $done") } catch (e: Exception) { Log.e(LOG_TAG, "Trouble calculating progress percent", e) } }

override fun onError(id: Int, ex: Exception) { Log.d(LOG_TAG, "DOWNLOAD ERROR - - ID: $id - - EX: ${ex.message.toString()}") } })

// If you prefer to poll for the data, instead of attaching a // listener, check for the state and progress in the observer. if (downloadObserver.state == TransferState.COMPLETED) { // Handle a completed upload. }

Log.d(LOG_TAG, "Bytes Transferrred: ${downloadObserver.bytesTransferred}"); }}

iOS - Swift

다음은 Amazon S3 버킷에서 파일을 다운로드하는 방법을 나타낸 예제입니다.

func downloadData() { let expression = AWSS3TransferUtilityDownloadExpression() expression.progressBlock = {(task, progress) in DispatchQueue.main.async(execute: { // Do something e.g. Update a progress bar. }) }

74

Page 78: AWS Mobile Hub 개발자 안내서 - 개발자 안내서 · 2020-02-07 · iOS - Swift 1.iOS를 플랫폼으로 선택하고 다음을 선택합니다. 2.Download Cloud Config(클라우드

AWS Mobile Hub 개발자 안내서 개발자 안내서Android 및 iOS

var completionHandler: AWSS3TransferUtilityDownloadCompletionHandlerBlock? completionHandler = { (task, URL, data, error) -> Void in DispatchQueue.main.async(execute: { // Do something e.g. Alert a user for transfer completion. // On failed downloads, `error` contains the error object. }) }

let transferUtility = AWSS3TransferUtility.default() transferUtility.downloadData( fromBucket: "YourBucket", key: "YourFileName", expression: expression, completionHandler: completionHandler ).continueWith { (task) -> AnyObject! in if let error = task.error { print("Error: \(error.localizedDescription)") }

if let _ = task.result { // Do something with downloadTask.

} return nil; }}

다음 단계

• TransferUtility 기능을 보여주는 샘플 앱은 Android S3 TransferUtility 샘플 및 iOS S3 TransferUtility 샘플을 참조하십시오.

• Amazon Cognito Sync를 찾으시나요? 새 사용자인 경우 AWS AppSync를 대신 사용하십시오. AppSync는 여러 디바이스 간에 애플리케이션 데이터를 동기화하는 새로운 서비스입니다. Cognito Sync와 마찬가지로 AppSync도 게임 상태, 앱 기본 설정과 같은 사용자 자체 데이터를 동기화할 수 있습니다. AppSync는복수의 사용자가 가상 회의 공간 또는 채팅룸과 같은 공유된 데이터에 대해 실시간으로 동기화하고 협업하도록 함으로써 이러한 기능을 확장합니다. 지금 AWS AppSync로 구축을 시작하십시오.

Amazon API GateWay 및 AWS Lambda를 사용하여 모바일 앱에 클라우드 API 추가

다음 참조 콘텐츠는 iOS 및 Android용 AWS Mobile SDK를 사용해 구성된 기존 앱에만 적용됩니다. 새 모바일 또는 웹 앱을 빌드하거나 기존 앱에 클라우드 기능을 추가하고 있다면 대신 Amplify Framework 웹사이트를 방문하십시오. iOS 및 Android용 AWS Mobile SDK의 설명서는 Amplify Framework의 일부로 제공됩니다.

클라우드 로직 개요

서버리스 Lambda 함수로 처리하는 RESTful API를 추가하여 모바일 앱을 AWS 서비스 범위 이상까지 확장합니다. Mobile Hub에서는 클라우드 로직 (p. 188) 기능 활성화 시 Amazon API Gateway 및 AWS Lambda서비스를 사용하여 이러한 기능을 제공합니다.

백엔드 설정

1. 진행하기 전에 시작하기 (p. 3) 단계를 완료합니다.2. Cloud Logic(클라우드 로직) 활성화: Mobile Hub에서 프로젝트를 열고 Cloud Logic(클라우드 로직) 타일

을 선택하여 이 기능을 활성화합니다.

75

Page 79: AWS Mobile Hub 개발자 안내서 - 개발자 안내서 · 2020-02-07 · iOS - Swift 1.iOS를 플랫폼으로 선택하고 다음을 선택합니다. 2.Download Cloud Config(클라우드

AWS Mobile Hub 개발자 안내서 개발자 안내서Android 및 iOS

3. 새 API를 생성하거나 API Gateway 콘솔에서 생성한 API를 가져옵니다.a. 새로운 API를 생성하려면 API 생성을 선택합니다.b. API 이름과 설명을 입력합니다.c. 경로를 구성합니다. 여기에서 Paths는 API에 대한 요청을 처리하는 서버리스 함수까지 경로를 말합니

다.

API 생성을 선택하여 기본 API와 기본 API에 연결된 핸들러 함수를 배포합니다. 기본 핸들러는 수신되는 JSON 입력 값을 에코잉하는 Node.js 함수입니다. 자세한 내용은 Using AWS Lambda with AmazonAPI Gateway 단원을 참조하십시오.

Mobile Hub 프로젝트에 구성된 API 및 경로의 정의는 AWS CloudFormation 템플릿에 캡처되어 있습니다. 템플릿이 포함된 요청의 본문은 51,200바이트로 제한되어 있습니다. 이에 관한 세부 정보는AWS CloudFormation 한도를 참조하십시오. API 정의가 너무 커서 이 크기에 맞지 않는 경우 AWS APIGateway 콘솔을 사용하여 API를 생성한 후 해당 Mobile Hub 프로젝트로 가져올 수 있습니다.

4. 기능 구성을 마치고 마지막 작업이 완료되면 상단 왼쪽에서 프로젝트 이름을 선택해 프로젝트 세부 정보페이지로 이동합니다. 표시되는 배너도 거기에 링크되어 있습니다.

5. 앱 카드에서 통합을 선택합니다.

둘 이상의 플랫폼을 대상으로 앱을 생성했다면 프로젝트 변경에 영향을 받는 각 플랫폼의 통합 버튼이 깜빡여 각 버전에 사용할 수 있는 업데이트된 구성 파일이 있음을 알려줍니다.

6. Download Cloud Config(클라우드 구성 다운로드)를 선택해 구 버전의 awsconfiguration.json을 새로 다운로드한 것으로 교체합니다.Android - Java

Project Navigator에서 앱의 res 폴더를 마우스 오른쪽 버튼으로 클릭한 다음 New > Directory(새로생성 > 디렉터리)를 선택합니다. 디렉터리 이름으로 raw를 입력한 후 확인을 선택합니다.

76

Page 80: AWS Mobile Hub 개발자 안내서 - 개발자 안내서 · 2020-02-07 · iOS - Swift 1.iOS를 플랫폼으로 선택하고 다음을 선택합니다. 2.Download Cloud Config(클라우드

AWS Mobile Hub 개발자 안내서 개발자 안내서Android 및 iOS

이전 단계에서 구성 파일인 awsconfiguration.json을 다운로드한 위치에서, 이 파일을 res/raw 폴더로 끌어옵니다. Android는 이 폴더에 있는 임의 파일에 리소스 ID를 부여해 앱에서 쉽게 참조할 수 있게 해줍니다.

기억할 사항 Mobile Hub 프로젝트에서 기능을 생성하거나 업데이트할 때마다 awsconfiguration.json의새 버전을 다운로드하여 해당 업데이트를 사용할 프로젝트의 각 앱에 통합합니다.

Android - Kotlin

Project Navigator에서 앱의 res 폴더를 마우스 오른쪽 버튼으로 클릭한 다음 New > Directory(새로생성 > 디렉터리)를 선택합니다. 디렉터리 이름으로 raw를 입력한 후 확인을 선택합니다.

이전 단계에서 구성 파일인 awsconfiguration.json을 다운로드한 위치에서, 이 파일을 res/raw 폴더로 끌어옵니다. Android는 이 폴더에 있는 임의 파일에 리소스 ID를 부여해 앱에서 쉽게 참조할 수 있게 해줍니다.

iOS - Swift

다운로드 위치에서 awsconfiguration.json을, Xcode 프로젝트의 info.plist 파일을 포함하는 폴더에 넣습니다. 옵션 대화 상자에서 Copy items if needed(필요 시 항목 복사) 및 Creategroups(그룹 생성)를 선택합니다. [Next]를 선택합니다.

77

Page 81: AWS Mobile Hub 개발자 안내서 - 개발자 안내서 · 2020-02-07 · iOS - Swift 1.iOS를 플랫폼으로 선택하고 다음을 선택합니다. 2.Download Cloud Config(클라우드

AWS Mobile Hub 개발자 안내서 개발자 안내서Android 및 iOS

이제 앱에서 백엔드의 최신 버전을 참조합니다.7. Swift Models(Swift 모델)를 선택해 앱에 대해 생성된 API 모델을 다운로드합니다. 이 파일은 방금 생성한

API Gateway API의 요청 표면에 액세스할 수 있는 권한을 부여합니다. 다음을 선택한 후 아래 클라우드API 설명서에 따라 백엔드에 연결합니다.

백엔드에 연결

다음 단계를 사용하여 AWS 클라우드 로직을 앱에 추가합니다.

Android - Java

1. 다음 단계를 통해 AWS Mobile SDK 구성 요소를 설정합니다.a. 다음을 app/build.gradle에 추가합니다.

dependencies{

// other dependencies . . .

implementation 'com.amazonaws:aws-android-sdk-apigateway-core:2.7.+'

}

b. API 게이트웨이에 대한 호출 작업마다 다음 가져오기를 선언합니다. 여기에idABCD012345.NAME-OF-YOUR-API-MODEL-CLASS로 표시된 첫 번째 선언 부분을 MobileHub 프로젝트에서 다운로드한 API 모델의 클래스 ID 및 이름으로 바꿉니다.

다운로드한 ./src/main/java/com/amazonaws/mobile/api/API-CLASS-ID/TestMobileHubClient.java 파일의 맨 위에서 이러한 값을 확인할 수 있습니다.

// This statement imports the model class you download from |AMH|.import com.amazonaws.mobile.api.idABCD012345.NAME-OF-YOUR-API-MODEL-CLASSMobileHubClient;

import com.amazonaws.mobile.auth.core.IdentityManager;import com.amazonaws.mobile.config.AWSConfiguration;import com.amazonaws.mobileconnectors.apigateway.ApiClientFactory;import com.amazonaws.mobileconnectors.apigateway.ApiRequest;import com.amazonaws.mobileconnectors.apigateway.ApiResponse;import com.amazonaws.util.IOUtils;import com.amazonaws.util.StringUtils;import java.io.InputStream;

c. API 모델 파일을 다운로드한 위치에는 Mobile Hub 프로젝트에서 생성한 클라우드 로직 API마다폴더가 하나씩 있습니다. 폴더 이름은 에서 API에 할당하는 클래스 ID를 따라 지정됩니다. 각 폴더에서 다음과 같이 실행합니다.i. 텍스트 편집기에서 ./src/main/java/com/amazonaws/mobile/api/YOUR-API-

CLASS-ID/YOUR-API-CLASS-NAMEMobileHubClient.java 파일을 엽니다.ii. 파일 맨 위에서 com.amazonaws.mobile.api.{api-class-id} 형식의 패키지 이름을 복

사합니다.iii. Android Studio에서 app/java를 마우스 오른쪽 버튼으로 선택한 다음 New > Package(새로 생

성 > 패키지)를 선택합니다.iv. 이전 단계에서 복사한 패키지 이름을 붙여넣은 후 확인을 선택합니다.v. API 클래스 폴더의 내용을 새롭게 생성한 패키지로 끌어놓습니다. API 클래스 폴더에는 YOUR-

API-CLASS-NAMEMobileHubClient.java 파일과 model 폴더가 있습니다.2. 클라우드 로직 API 호출.

78

Page 82: AWS Mobile Hub 개발자 안내서 - 개발자 안내서 · 2020-02-07 · iOS - Swift 1.iOS를 플랫폼으로 선택하고 다음을 선택합니다. 2.Download Cloud Config(클라우드

AWS Mobile Hub 개발자 안내서 개발자 안내서Android 및 iOS

다음 코드는 API의 클라이언트 클래스, 모델 및 리소스 경로를 사용하여 클라우드 로직 API를 호출하는 방법을 나타낸 것입니다.

import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.util.Log;import com.amazonaws.http.HttpMethodName;import java.io.InputStream;import java.util.HashMap;

import com.amazonaws.mobile.client.AWSMobileClient;import com.amazonaws.mobileconnectors.api.YOUR-API-CLASS-ID.YOUR-API-CLASS-NAMEMobilehubClient;import com.amazonaws.mobileconnectors.apigateway.ApiClientFactory;import com.amazonaws.mobileconnectors.apigateway.ApiRequest;import com.amazonaws.mobileconnectors.apigateway.ApiResponse;import com.amazonaws.util.StringUtils;

public class MainActivity extends AppCompatActivity { private static final String LOG_TAG = MainActivity.class.getSimpleName();

private YOUR-API-CLASS-NAMEMobileHubClient apiClient;

@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main);

// Create the client apiClient = new ApiClientFactory() .credentialsProvider(AWSMobileClient.getInstance().getCredentialsProvider()) .build(YOUR-API-CLASS-NAMEMobileHubClient.class); }

public callCloudLogic() { // Create components of api request final String method = "GET";

final String path = "/items";

final String body = ""; final byte[] content = body.getBytes(StringUtils.UTF8);

final Map parameters = new HashMap<>(); parameters.put("lang", "en_US");

final Map headers = new HashMap<>();

// Use components to create the api request ApiRequest localRequest = new ApiRequest(apiClient.getClass().getSimpleName()) .withPath(path) .withHttpMethod(HttpMethodName.valueOf(method)) .withHeaders(headers) .addHeader("Content-Type", "application/json") .withParameters(parameters);

// Only set body if it has content. if (body.length() > 0) { localRequest = localRequest .addHeader("Content-Length", String.valueOf(content.length))

79

Page 83: AWS Mobile Hub 개발자 안내서 - 개발자 안내서 · 2020-02-07 · iOS - Swift 1.iOS를 플랫폼으로 선택하고 다음을 선택합니다. 2.Download Cloud Config(클라우드

AWS Mobile Hub 개발자 안내서 개발자 안내서Android 및 iOS

.withBody(content); }

final ApiRequest request = localRequest;

// Make network call on background thread new Thread(new Runnable() { @Override public void run() { try { Log.d(LOG_TAG, "Invoking API w/ Request : " + request.getHttpMethod() + ":" + request.getPath());

final ApiResponse response = apiClient.execute(request);

final InputStream responseContentStream = response.getContent();

if (responseContentStream != null) { final String responseData = IOUtils.toString(responseContentStream); Log.d(LOG_TAG, "Response : " + responseData); }

Log.d(LOG_TAG, response.getStatusCode() + " " + response.getStatusText());

} catch (final Exception exception) { Log.e(LOG_TAG, exception.getMessage(), exception); exception.printStackTrace(); } } }).start(); }}

Android - Kotlin

1. 다음 단계를 통해 AWS Mobile SDK 구성 요소를 설정합니다.a. 다음을 app/build.gradle에 추가합니다.

dependencies{

// other dependencies . . .

implementation 'com.amazonaws:aws-android-sdk-apigateway-core:2.7.+'

}

b. API 게이트웨이에 대한 호출 작업마다 다음 가져오기를 선언합니다. 여기에idABCD012345.NAME-OF-YOUR-API-MODEL-CLASS로 표시된 첫 번째 선언 부분을 MobileHub 프로젝트에서 다운로드한 API 모델의 클래스 ID 및 이름으로 바꿉니다.

다운로드한 ./src/main/java/com/amazonaws/mobile/api/API-CLASS-ID/TestMobileHubClient.java 파일의 맨 위에서 이러한 값을 확인할 수 있습니다.

// This statement imports the model class you download from |AMH|.import com.amazonaws.mobile.api.idABCD012345.NAME-OF-YOUR-API-MODEL-CLASSMobileHubClient;

import com.amazonaws.mobile.auth.core.IdentityManager;

80

Page 84: AWS Mobile Hub 개발자 안내서 - 개발자 안내서 · 2020-02-07 · iOS - Swift 1.iOS를 플랫폼으로 선택하고 다음을 선택합니다. 2.Download Cloud Config(클라우드

AWS Mobile Hub 개발자 안내서 개발자 안내서Android 및 iOS

import com.amazonaws.mobile.config.AWSConfiguration;import com.amazonaws.mobileconnectors.apigateway.ApiClientFactory;import com.amazonaws.mobileconnectors.apigateway.ApiRequest;import com.amazonaws.mobileconnectors.apigateway.ApiResponse;import com.amazonaws.util.IOUtils;import com.amazonaws.util.StringUtils;import java.io.InputStream;

c. API 모델 파일을 다운로드한 위치에는 Mobile Hub 프로젝트에서 생성한 클라우드 로직 API마다폴더가 하나씩 있습니다. 폴더 이름은 에서 API에 할당하는 클래스 ID를 따라 지정됩니다. 각 폴더에서 다음과 같이 실행합니다.i. 텍스트 편집기에서 ./src/main/java/com/amazonaws/mobile/api/YOUR-API-

CLASS-ID/YOUR-API-CLASS-NAMEMobileHubClient.java 파일을 엽니다.ii. 파일 맨 위에서 com.amazonaws.mobile.api.{api-class-id} 형식의 패키지 이름을 복

사합니다.iii. Android Studio에서 app/java를 마우스 오른쪽 버튼으로 선택한 다음 New > Package(새로 생

성 > 패키지)를 선택합니다.iv. 이전 단계에서 복사한 패키지 이름을 붙여넣은 후 확인을 선택합니다.v. API 클래스 폴더의 내용을 새롭게 생성한 패키지로 끌어놓습니다. API 클래스 폴더에는 YOUR-

API-CLASS-NAMEMobileHubClient.java 파일과 model 폴더가 있습니다.2. 클라우드 로직 API 호출.

다음 코드는 API의 클라이언트 클래스, 모델 및 리소스 경로를 사용하여 클라우드 로직 API를 호출하는 방법을 나타낸 것입니다.

import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.util.Log;import com.amazonaws.http.HttpMethodName;import java.io.InputStream;import java.util.HashMap;

import com.amazonaws.mobile.client.AWSMobileClient;import com.amazonaws.mobileconnectors.api.YOUR-API-CLASS-ID.YOUR-API-CLASS-NAMEMobilehubClient;import com.amazonaws.mobileconnectors.apigateway.ApiClientFactory;import com.amazonaws.mobileconnectors.apigateway.ApiRequest;import com.amazonaws.mobileconnectors.apigateway.ApiResponse;import com.amazonaws.util.StringUtils;

class MainActivity : AppCompatActivity() { companion object { private val TAG = this::class.java.simpleName }

private var apiClient: YOUR-API-CLASS-NAMEMobileHubClient? = null

override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main)

apiClient = ApiClientFactory() .credentialsProvider(AWSMobileClient.getInstance().credentialsProvider) .build(YOUR-API-CLASS-NAMEMobileHubClinet::class.java) }

fun callCloudLogic(body: String) { val parameters = mapOf("lang" to "en_US") val headers = mapOf("Content-Type" to "application/json")

val request = ApiRequest(apiClient::class.java.simpleName)

81

Page 85: AWS Mobile Hub 개발자 안내서 - 개발자 안내서 · 2020-02-07 · iOS - Swift 1.iOS를 플랫폼으로 선택하고 다음을 선택합니다. 2.Download Cloud Config(클라우드

AWS Mobile Hub 개발자 안내서 개발자 안내서Android 및 iOS

.withPath("/items") .withHttpMethod(HttpMethod.GET) .withHeaders(headers) .withParameters(parameters) if (body.isNotEmpty()) { val content = body.getBytes(StringUtils.UTF8) request .addHeader("Content-Length", String.valueOf(content.length)) .withBody(content) }

thread(start = true) { try { Log.d(TAG, "Invoking API") val response = apiClient.execute(request) val responseContentStream = response.getContent() if (responseContentStream != null) { val responseData = IOUtils.toString(responseContentStream) // Do something with the response data here } } catch (ex: Exception) { Log.e(TAG, "Error invoking API") } } }}

iOS - Swift

1. 다음 단계를 통해 AWS Mobile SDK 구성 요소를 설정합니다.a. AWS Mobile SDK를 설치하도록 구성한 Podfile에는 다음을 포함해야 합니다.

platform :ios, '9.0'

target :'YOUR-APP-NAME' do use_frameworks!

pod 'AWSAuthCore', '~> 2.6.13' pod 'AWSAPIGateway', '~> 2.6.13' # other pods

end

계속하기 전에 pod install --repo-update를 실행합니다.

"[!] Failed to connect to GitHub to update the CocoaPods/Specs . . ."로 시작하는 오류 메시지가 표시되고 인터넷 연결이 작동하는 경우 openssl 및 Ruby 업데이트가 필요할수 있습니다.

b. API 게이트웨이 API를 호출하는 클래스는 다음 가져오기 문을 사용해야 합니다.

import AWSAuthCoreimport AWSCoreimport AWSAPIGateway

c. Mobile Hub 콘솔에서 다운로드한 백엔드 서비스 구성 파일과 API 모델 파일을 추가합니다. 이렇게추가된 API 모델 파일은 API 게이트웨이 API를 모델링할 때마다 API 호출 표면을 제공합니다.i. 데이터 모델 파일을 다운로드한 위치에서 ./AmazonAws/API 폴더를

AppDelegate.swift가 포함된 Xcode 프로젝트 폴더로 끌어옵니다.

82

Page 86: AWS Mobile Hub 개발자 안내서 - 개발자 안내서 · 2020-02-07 · iOS - Swift 1.iOS를 플랫폼으로 선택하고 다음을 선택합니다. 2.Download Cloud Config(클라우드

AWS Mobile Hub 개발자 안내서 개발자 안내서Android 및 iOS

Copy items if needed(필요 시 항목 복사) 및 Create groups(그룹 생성)를 선택합니다(이러한 옵션이 제공되는 경우).

Xcode 프로젝트 폴더에 Bridging_Header.h 파일이 이미 있는 경우에는 ./AmazonAws/Bridging_Header.h 파일을 열어 가져오기 문을 복사한 다음 현재 파일 버전에 붙여 넣습니다.

Xcode 프로젝트 폴더에 Bridging_Header.h 파일이 없는 경우에는 다음과 같이 실행합니다.A. ./AmazonAws/Bridging_Header.h 파일을 AppDelegate.swift 파일이 저장된 Xcode

프로젝트 폴더로 끌어옵니다.B. Xcode에서 프로젝트 루트를 선택한 다음 Build Settings(빌드 설정)를 선택하여 "bridging

headers"를 검색합니다.C. Objective-C Bridging Header(Objective-C 브리징 헤더)를 선택하여 Return 키를 누른 다음 경

로를 Xcode 프로젝트에 입력합니다.

your-project-name/.../Bridging_Header.h

2. 클라우드 로직 API 호출.

클라우드 로직 API를 호출하려면 다음 형식으로 코드를 작성한 다음 API의 클라이언트 클래스, 모델및 리소스 경로를 치환합니다.

import UIKitimport AWSAuthCoreimport AWSCoreimport AWSAPIGatewayimport AWSMobileClient

// ViewController or application context . . .

func doInvokeAPI() { // change the method name, or path or the query string parameters here as desired let httpMethodName = "POST" // change to any valid path you configured in the API let URLString = "/items" let queryStringParameters = ["key1":"{value1}"] let headerParameters = [ "Content-Type": "application/json", "Accept": "application/json" ]

let httpBody = "{ \n " + "\"key1\":\"value1\", \n " + "\"key2\":\"value2\", \n " + "\"key3\":\"value3\"\n}"

// Construct the request object let apiRequest = AWSAPIGatewayRequest(httpMethod: httpMethodName, urlString: URLString, queryParameters: queryStringParameters, headerParameters: headerParameters, httpBody: httpBody)

// Create a service configuration object for the region your AWS API was created in let serviceConfiguration = AWSServiceConfiguration( region: AWSRegionType.USEast1, credentialsProvider: AWSMobileClient.sharedInstance().getCredentialsProvider())

83

Page 87: AWS Mobile Hub 개발자 안내서 - 개발자 안내서 · 2020-02-07 · iOS - Swift 1.iOS를 플랫폼으로 선택하고 다음을 선택합니다. 2.Download Cloud Config(클라우드

AWS Mobile Hub 개발자 안내서 개발자 안내서Android 및 iOS

YOUR-API-CLASS-NAMEMobileHubClient.register(with: serviceConfiguration!, forKey: "CloudLogicAPIKey")

// Fetch the Cloud Logic client to be used for invocation let invocationClient = YOUR-API-CLASS-NAMEMobileHubClient(forKey: "CloudLogicAPIKey")

invocationClient.invoke(apiRequest).continueWith { ( task: AWSTask) -> Any? in

if let error = task.error { print("Error occurred: \(error)") // Handle error here return nil }

// Handle successful result here let result = task.result! let responseString = String(data: result.responseData!, encoding: .utf8)

print(responseString) print(result.statusCode)

return nil } }

Amazon Pinpoint를 사용하여 모바일 앱에 메시징 추가

다음 참조 콘텐츠는 iOS 및 Android용 AWS Mobile SDK를 사용해 구성된 기존 앱에만 적용됩니다. 새 모바일 또는 웹 앱을 빌드하거나 기존 앱에 클라우드 기능을 추가하고 있다면 대신 Amplify Framework 웹사이트를 방문하십시오. iOS 및 Android용 AWS Mobile SDK의 설명서는 Amplify Framework의 일부로 제공됩니다.

개요

앱 사용 행동을 메시징 캠페인에 연계하여 사용자의 참여도를 한층 높입니다.

AWS Mobile Hub 메시징 및 분석 (p. 196) 기능을 활성화할 경우 앱이 Amazon Pinpoint 서비스에 등록됩니다. 사용자 세그먼트를 정의하고 Amazon Pinpoint 콘솔을 통해 이메일, SMS 및 푸시 알림 (p. 43) 메시지를 이들 수신자에게 전송할 수 있습니다.

또한 Amazon Pinpoint를 통해 앱의 분석 (p. 13) 결과를 수집 및 시각화할 수 있습니다. 수집한 측정치는세션 시작 및 종료 데이터만큼 간단한 형태일 수도 있고, 사용자 지정하여 실제 행동이 예측된 모델과 얼마나일치하는지 등을 파악할 수도 있습니다.

그런 다음, 알고리즘 방식으로 사용자 행동 패턴과 메시징 캠페인을 연계할 수 있습니다. 예를 들어 단골 사용자에게 할인 이메일을 전송하거나, 앱의 기능에서 특정 카테고리를 선택한 사용자에게 데이터 동기화를 시작하는 푸시 알림을 전송합니다.

백엔드 설정

이메일이나 SMS를 Amazon Pinpoint 캠페인의 일부로서 설정하려면 다음 단계를 수행합니다.

Amazon Pinpoint에서 푸시 알림을 받도록 앱을 설정하려면 Amazon Pinpoint를 사용하여 모바일 앱에 푸시알림 추가 (p. 43)를 참조하십시오.

1. 진행하기 전에 시작하기 (p. 3) 단계를 완료합니다.

84

Page 88: AWS Mobile Hub 개발자 안내서 - 개발자 안내서 · 2020-02-07 · iOS - Swift 1.iOS를 플랫폼으로 선택하고 다음을 선택합니다. 2.Download Cloud Config(클라우드

AWS Mobile Hub 개발자 안내서 개발자 안내서Android 및 iOS

2. 이메일용: 메시징 및 분석 타일을 선택하여 이 기능을

활성화합니다.a. 이메일을 선택한 다음, 활성화를 선택합니다.b. 왼쪽의 설명 텍스트 하단에서 Amazon Pinpoint 콘솔 링크를 선택합니다.c. Amazon Pinpoint 콘솔의 채널 탭에서 이메일을 선택합니다.d. 이메일 주소를 선택하고 메시지의 출처로 생각되는 주소를 입력한 다음, 항목 필드 끝의 확인을 선

택합니다.

입력한 이메일 계정에 해당 이메일을 Amazon Pinpoint에서 시스템에 의해 전송되는 이메일에 대한 발신자 주소로 사용하는 것에 대한 승인을 요청하는 이메일이 수신됩니다. Amazon Pinpoint에서 승인을 처리할 때까지 콘솔 항목 필드에 Pending Verification(확인 보류 중) 상태가 표시됩니다.

e. 이메일 도메인을 선택하고 메시지의 출처로 생각되는 도메인을 입력한 다음, 항목 필드 끝의 확인를 선택합니다.

도메인의 설정에 추가해야 하는 TXT 레코드의 이름과 값을 제공하는 대화 상자가 표시됩니다. 콘솔에서 승인이 처리될 때까지 Pending Verification의 상태가 항목 필드에 표시됩니다.

기본 사용자 이름을 Default from address(주소의 기본값)에 추가합니다.f. Save를 선택합니다.g. Amazon Pinpoint에서의 메일 전송에 대한 자세한 내용은이메일 메시지 전송을 참조하십시오.

a. SMS용: 메시징 및 분석 타일을 선택하여 이 기능을 활성화합니다.i. SMS를 선택한 다음 활성화를 선택합니다.ii. 왼쪽의 설명 텍스트 하단에서 Amazon Pinpoint 콘솔 링크를 선택합니다.iii. Amazon Pinpoint 콘솔의 채널 탭에서 SMS를 선택합니다.iv. 기본 메시지 유형, 계정 지출 한도 및 기본 발신자 ID에 대한 옵션을 조정합니다. 이러한 옵션에 대한

자세한 내용은 SMS 설정 업데이트를 참조하십시오.v. Amazon Pinpoint에서 SMS 메시지 전송에 대한 자세한 내용은 SMS 메시지 전송을 참조하십시오.

백엔드에 연결

Amazon Pinpoint에서 이메일 또는 SMS 메시지를 수신하는 데 AWS Mobile SDK는 필요하지 않습니다.

Amazon Lex를 사용하여 모바일 앱에 대화형 봇 추가

다음 참조 콘텐츠는 iOS 및 Android용 AWS Mobile SDK를 사용해 구성된 기존 앱에만 적용됩니다. 새 모바일 또는 웹 앱을 빌드하거나 기존 앱에 클라우드 기능을 추가하고 있다면 대신 Amplify Framework 웹사이트를 방문하십시오. iOS 및 Android용 AWS Mobile SDK의 설명서는 Amplify Framework의 일부로 제공됩니다.

개요

Amazon Alexa의 기반 기술인 자연어 이해를 모바일 앱에 추가합니다. AWS Mobile Hub 대화형봇 (p. 202) 기능은 Amazon Lex 서비스를 사용하여 언제라도 개발할 수 있는 봇 템플릿을 제공합니다.

백엔드 설정

1. 진행하기 전에 시작하기 (p. 3) 단계를 완료합니다.2. Conversational Bots(대화형 봇) 활성화: Mobile Hub에서 프로젝트를 열고 Conversational Bots(대화형

봇) 타일을 선택하여 이 기능을 활성화합니다.a. 샘플 봇 중 하나를 선택하거나, 혹은 Amazon Lex 콘솔에서 생성한 봇을 가져옵니다.

85

Page 89: AWS Mobile Hub 개발자 안내서 - 개발자 안내서 · 2020-02-07 · iOS - Swift 1.iOS를 플랫폼으로 선택하고 다음을 선택합니다. 2.Download Cloud Config(클라우드

AWS Mobile Hub 개발자 안내서 개발자 안내서Android 및 iOS

3. 이 작업이 완료되면 "Your Backend has been updated"(백엔드가 업데이트되었습니다.)라는 경고가 팝업되고 클라우드 구성 파일의 최신 복사본을 다운로드하라는 메시지가 표시됩니다. 이 기능의 구성이 완료되면 배너를 선택하여 프로젝트 세부 정보 페이지로 돌아갑니다.

4. 프로젝트 세부 정보 페이지에서 최신 클라우드 구성 파일로 업데이트해야 하는 모든 앱에는 깜박이는 통합 버튼이 있습니다. 해당 버튼을 선택하여 통합 마법사로 들어갑니다.

5. 클라우드 구성 파일의 최신 버전으로 앱을 업데이트합니다. 이제 앱에서 백엔드의 최신 버전을 참조합니다. 다음을 선택하고 아래의 Cloud API 설명서에 따라 백엔드에 연결합니다.

백엔드에 연결

앱에 AWS Mobile 대화형 봇을 추가하려면

Android - Java

백엔드 설정 (p. 3) 단계

1. AndroidManifest.xml에 다음 권한을 추가합니다.

<uses-permission android:name="android.permission.RECORD_AUDIO" /><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

2. 다음을 app/build.gradle에 추가합니다.

dependencies{ implementation ('com.amazonaws:aws-android-sdk-lex:2.7.+@aar') {transitive = true;}}

3. Amazon Lex를 호출하는 액티비티마다 다음 API를 가져옵니다.

import com.amazonaws.mobileconnectors.lex.interactionkit.Response;import com.amazonaws.mobileconnectors.lex.interactionkit.config.InteractionConfig;import com.amazonaws.mobileconnectors.lex.interactionkit.ui.InteractiveVoiceView;

1. 음성 버튼을 활동 또는 프래그먼트 레이아웃에 추가합니다.a. voice_component를 레이아웃 파일에 추가합니다.

<com.amazonaws.mobileconnectors.lex.interactionkit.ui.InteractiveVoiceViewandroid:id="@+id/voiceInterface"layout="@layout/voice_component"android:layout_width="200dp"

86

Page 90: AWS Mobile Hub 개발자 안내서 - 개발자 안내서 · 2020-02-07 · iOS - Swift 1.iOS를 플랫폼으로 선택하고 다음을 선택합니다. 2.Download Cloud Config(클라우드

AWS Mobile Hub 개발자 안내서 개발자 안내서Android 및 iOS

android:layout_height="200dp"/>

b. strings.xml 파일에서 봇 리전을 추가합니다. 참고: 현재는 미국 버지니아 동부(us-east-1)에서만 봇이 지원됩니다.

<string name="aws_region">us-east-1</string>

c. 음성 버튼을 초기화합니다.

봇을 사용할 활동의 init()에 다음 onCreate() 함수를 추가합니다.

함수의 AWSMobileClient는 init()가 생성한 자격 증명 공급자 객체를 사용하여 Amazon Lex에 연결되므로 InteractiveVoiceView 호출 전에 AWSMobileClient를 시작해야 합니다.

import com.amazonaws.mobile.client.AWSMobileClient;import com.amazonaws.mobile.client.AWSStartupHandler;import com.amazonaws.mobile.client.AWSStartupResult;import com.amazonaws.mobileconnectors.lex.interactionkit.Response;import com.amazonaws.mobileconnectors.lex.interactionkit.config.InteractionConfig;import com.amazonaws.mobileconnectors.lex.interactionkit.ui.InteractiveVoiceView;

public class MainActivity extends AppCompatActivity {

@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main);

AWSMobileClient.getInstance().initialize(this, new AWSStartupHandler() { @Override public void onComplete(AWSStartupResult awsStartupResult) { Log.d("YourMainActivity", "AWSMobileClient is instantiated and you are connected to AWS!"); } }).execute();

init();

}

public void init(){ InteractiveVoiceView voiceView = (InteractiveVoiceView) findViewById(R.id.voiceInterface);

voiceView.setInteractiveVoiceListener( new InteractiveVoiceView.InteractiveVoiceListener() {

@Override public void dialogReadyForFulfillment(Map slots, String intent) { Log.d(LOG_TAG, String.format( Locale.US, "Dialog ready for fulfillment:\n\tIntent: %s\n\tSlots: %s", intent, slots.toString())); }

@Override public void onResponse(Response response) { Log.d(LOG_TAG, "Bot response: " + response.getTextResponse()); }

87

Page 91: AWS Mobile Hub 개발자 안내서 - 개발자 안내서 · 2020-02-07 · iOS - Swift 1.iOS를 플랫폼으로 선택하고 다음을 선택합니다. 2.Download Cloud Config(클라우드

AWS Mobile Hub 개발자 안내서 개발자 안내서Android 및 iOS

@Override public void onError(String responseText, Exception e) { Log.e(LOG_TAG, "Error: " + responseText, e); } });

voiceView.getViewAdapter().setCredentialProvider(AWSMobileClient.getInstance().getCredentialsProvider());

//replace parameters with your botname, bot-alias voiceView.getViewAdapter() .setInteractionConfig( new InteractionConfig("YOUR-BOT-NAME","$LATEST"));

voiceView.getViewAdapter() .setAwsRegion(getApplicationContext() .getString(R.string.aws_region)); }}

Android - Kotlin

1. 다음 단계를 통해 AWS Mobile SDK 구성 요소를 설정합니다.a. AndroidManifest.xml에 다음 권한을 추가합니다.

<uses-permission android:name="android.permission.RECORD_AUDIO" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

b. 다음을 app/build.gradle에 추가합니다.

dependencies{ implementation ('com.amazonaws:aws-android-sdk-lex:2.7.+@aar') {transitive = true;} }

c. Amazon Lex를 호출하는 액티비티마다 다음 API를 가져옵니다.

import com.amazonaws.mobileconnectors.lex.interactionkit.Response; import com.amazonaws.mobileconnectors.lex.interactionkit.config.InteractionConfig; import com.amazonaws.mobileconnectors.lex.interactionkit.ui.InteractiveVoiceView;

2. 음성 버튼을 활동 또는 프래그먼트 레이아웃에 추가합니다.a. voice_component를 레이아웃 파일에 추가합니다.

<com.amazonaws.mobileconnectors.lex.interactionkit.ui.InteractiveVoiceView android:id="@+id/voiceInterface" layout="@layout/voice_component" android:layout_width="200dp" android:layout_height="200dp"/>

b. strings.xml 파일에서 봇 리전을 추가합니다. 참고: 현재는 미국 버지니아 동부(us-east-1)에서만 봇이 지원됩니다.

<string name="aws_region">us-east-1</string>

c. 음성 버튼을 초기화합니다.

봇을 사용할 액티비티의 onCreate()에서 init()을 호출합니다.

88

Page 92: AWS Mobile Hub 개발자 안내서 - 개발자 안내서 · 2020-02-07 · iOS - Swift 1.iOS를 플랫폼으로 선택하고 다음을 선택합니다. 2.Download Cloud Config(클라우드

AWS Mobile Hub 개발자 안내서 개발자 안내서Android 및 iOS

fun init() { voiceInterface.interactiveVoiceListener = object : InteractiveVoiceView.InteractiveVoiceListener() { override fun dialogReadyFOrFulfillment(slots: Map, intent: String) { Log.d(TAG, "Dialog ready for fulfillment:\n\tIntent: $intent") }

override fun onResponse(response: Response) { Log.d(TAG, "Bot response: ${response.textResponse}") }

override fun onError(responseText: String, e: Exception) { Log.e(TAG, "Error: ${e.message}") } }

with (voiceInterface.viewAdapter) { credentialsProvider = AWSMobileClient.getInstance().credentialsProvider interactionConfig = InteractionConfig("YOUR-BOT-NAME","$LATEST") awsRegion = applicationContext.getString(R.string.aws_region) } }

iOS - Swift

1. 다음 단계를 통해 AWS Mobile SDK 구성 요소를 설정합니다.a. AWS Mobile SDK를 설치하도록 구성한 Podfile에는 다음을 포함해야 합니다.

platform :ios, '9.0'

target :'YOUR-APP-NAME`' do use_frameworks!

pod 'AWSLex', '~> 2.6.13' # other pods

end

계속하기 전에 pod install --repo-update를 실행합니다.

"[!] Failed to connect to GitHub to update the CocoaPods/Specs . . ."로 시작하는 오류 메시지가 표시되고 인터넷 연결이 작동하는 경우 openssl 및 Ruby 업데이트가 필요할수 있습니다.

b. Amazon Lex API를 호출하는 클래스는 다음 가져오기 문을 사용해야 합니다.

import AWSCoreimport AWSLex

2. 앱에서 디바이스의 마이크를 사용할 수 있는 권한을 info.plist 파일에 추가합니다.

<plist version = "1.0"></plist> <dict> <!-- . . . --> <key>NSMicrophoneUsageDescription</key> <string>For demonstration of conversational bots</string> <!-- . . . --> </dict>

89

Page 93: AWS Mobile Hub 개발자 안내서 - 개발자 안내서 · 2020-02-07 · iOS - Swift 1.iOS를 플랫폼으로 선택하고 다음을 선택합니다. 2.Download Cloud Config(클라우드

AWS Mobile Hub 개발자 안내서 개발자 안내서Android 및 iOS

3. 백엔드 서비스 구성을 앱에 추가합니다.

이전 단계에서 Mobile Hub 구성 파일을 다운로드한 위치에서 awsconfiguration.json을 Xcode프로젝트의 info.plist 파일이 포함된 폴더로 끌어옵니다.

Copy items if needed(필요 시 항목 복사) 및 Create groups(그룹 생성)를 선택합니다(이러한 옵션이제공되는 경우).

4. 사용자가 Amazon Lex에게 말할 수 있는 음성 버튼 UI 요소를 활동에 추가합니다.a. UIView를 스토리보드 또는 xib 파일에 생성합니다.b. UIView를 AWS Mobile SDK의 AWSLexVoiceButton 클래스로 매핑합니다.c. UIView를 ViewController로 연결합니다.

5. 음성 버튼을 등록합니다.

아래 코드는 뷰 컨트롤러의 viewDidLoad 메서드를 사용하여 음성 버튼이 Amazon Lex 성공/오류메시지에 응답할 수 있도록 하는 방법을 나타낸 것입니다. 코드는 AWSLexVoiceButtonDelegate클래스를 따릅니다. 버튼을 Mobile Hub 프로젝트에서 구성한 봇에 바인딩하여 초기화한 다음Amazon Lex 음성 상호작용 클라이언트의 AWSLexVoiceButtonKey로 등록합니다.

import UIKitimport AWSLeximport AWSAuthCore

class VoiceChatViewController: UIViewController, AWSLexVoiceButtonDelegate { override func viewDidLoad() {

// Set the bot configuration details // You can use the configuration constants defined in AWSConfiguration.swift file let botName = "YOUR-BOT-NAME" let botRegion: AWSRegionType = "YOUR-BOT-REGION" let botAlias = "$LATEST"

// set up the configuration for AWS Voice Button let configuration = AWSServiceConfiguration(region: botRegion, credentialsProvider: AWSMobileClient.sharedInstance().getCredentialsProvider()) let botConfig = AWSLexInteractionKitConfig.defaultInteractionKitConfig(withBotName: YOUR-BOT-NAME, botAlias: :YOUR-BOT-ALIAS)

90

Page 94: AWS Mobile Hub 개발자 안내서 - 개발자 안내서 · 2020-02-07 · iOS - Swift 1.iOS를 플랫폼으로 선택하고 다음을 선택합니다. 2.Download Cloud Config(클라우드

AWS Mobile Hub 개발자 안내서 개발자 안내서Android 및 iOS

// register the interaction kit client for the voice button using the AWSLexVoiceButtonKey constant defined in SDK AWSLexInteractionKit.register(with: configuration!, interactionKitConfiguration: botConfig, forKey: AWSLexVoiceButtonKey) super.viewDidLoad() (self.voiceButton as AWSLexVoiceButton).delegate = self }}

6. 다음 위임 메서드를 뷰 컨트롤러의 음성 버튼에 추가하여 Amazon Lex 성공/오류 메시지를 처리합니다.

func voiceButton(_ button: AWSLexVoiceButton, on response: AWSLexVoiceButtonResponse) { // handle response from the voice button here print("on text output \(response.outputText)")}

func voiceButton(_ button: AWSLexVoiceButton, onError error: Error) { // handle error response from the voice button here print("error \(error)")}

AWS Mobile Android 및 iOS 방법

다음 참조 콘텐츠는 iOS 및 Android용 AWS Mobile SDK를 사용해 구성된 기존 앱에만 적용됩니다. 새 모바일 또는 웹 앱을 빌드하거나 기존 앱에 클라우드 기능을 추가하고 있다면 대신 Amplify Framework 웹사이트를 방문하십시오. iOS 및 Android용 AWS Mobile SDK의 설명서는 Amplify Framework의 일부로 제공됩니다.

이 단원에서는 AWS Mobile 기능을 Android 및 iOS 앱에 통합하기 위한 특정 작업을 수행하는 단계에 대해설명합니다.

주제• 방법: Amazon Cognito에서 사용자 로그인 (p. 91)• 방법: NoSQL 데이터베이스(Amazon DynamoDB) (p. 95)• 방법: 서버리스 코드(AWS Lambda) (p. 123)• Amazon Machine Learning을 사용하여 Machine Learning을 추가하는 방법 (p. 134)

방법: Amazon Cognito에서 사용자 로그인

다음 참조 콘텐츠는 iOS 및 Android용 AWS Mobile SDK를 사용해 구성된 기존 앱에만 적용됩니다. 새 모바일 또는 웹 앱을 빌드하거나 기존 앱에 클라우드 기능을 추가하고 있다면 대신 Amplify Framework 웹사이트를 방문하십시오. iOS 및 Android용 AWS Mobile SDK의 설명서는 Amplify Framework의 일부로 제공됩니다.

이 섹션에서는 사용자 로그인 기능을 Android 및 iOS 앱에 통합하기 위한 절차에 대해 설명합니다.

주제• SDK 로그인 UI 사용자 지정 (p. 91)

SDK 로그인 UI 사용자 지정

91

Page 95: AWS Mobile Hub 개발자 안내서 - 개발자 안내서 · 2020-02-07 · iOS - Swift 1.iOS를 플랫폼으로 선택하고 다음을 선택합니다. 2.Download Cloud Config(클라우드

AWS Mobile Hub 개발자 안내서 개발자 안내서Android 및 iOS

다음 참조 콘텐츠는 iOS 및 Android용 AWS Mobile SDK를 사용해 구성된 기존 앱에만 적용됩니다. 새 모바일 또는 웹 앱을 빌드하거나 기존 앱에 클라우드 기능을 추가하고 있다면 대신 Amplify Framework 웹사이트를 방문하십시오. iOS 및 Android용 AWS Mobile SDK의 설명서는 Amplify Framework의 일부로 제공됩니다.

기본적으로 이 SDK는 Mobile Hub 프로젝트에서 활성화하는 각 로그인 공급자별 로그인 UI(이메일 및 암호,Facebook, Google)에 기본 모양 및 느낌을 제공합니다. 이 SDK는 앱과 통합한 awsconfiguration.json파일을 읽어서 선택한 공급자를 파악합니다.

기본값을 재정의하고 로그인 UI의 동작, 모양 및 느낌을 수정하려면 AuthUIConfiguration 객체를 생성하고 해당 속성을 설정합니다.

Android - Java

AuthUIConfiguration 객체를 생성 및 구성하고 관련 속성을 설정합니다.

• 이메일 및 암호 사용자 SignInUI를 표시하려면 userPools를 true로 설정합니다.• Facebook 또는 Google 사용자 SignInUI를 표시하려면signInButton(FacebookButton.class) 또는 signInButton(GoogleButton.class)을 추가합니다.

• 로고를 변경하려면 logoResId를 사용합니다.• 배경색을 변경하려면 backgroundColor를 사용합니다.• 로그인 흐름을 취소하려면 .canCancel(true)을 설정합니다.• 로그인 보기에서 글꼴을 변경하려면 fontFamily 메서드를 사용하고 글꼴 그룹을 나타내는 문자열

을 전달합니다.• backgroundColor 전체 화면을 표시하려면 fullScreenBackgroundColor를 사용합니다.

import android.app.Activity;import android.graphics.Color;import android.os.Bundle;

import com.amazonaws.mobile.auth.facebook.FacebookButton;import com.amazonaws.mobile.auth.google.GoogleButton;import com.amazonaws.mobile.auth.ui.AuthUIConfiguration;import com.amazonaws.mobile.auth.ui.SignInUI;

import com.amazonaws.mobile.client.AWSMobileClient;import com.amazonaws.mobile.client.AWSStartupHandler;import com.amazonaws.mobile.client.AWSStartupResult;

public class YourMainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);

AWSMobileClient.getInstance().initialize(this, new AWSStartupHandler() { @Override public void onComplete(final AWSStartupResult awsStartupResult) { AuthUIConfiguration config = new AuthUIConfiguration.Builder() .userPools(true) // true? show the Email and Password UI .signInButton(FacebookButton.class) // Show Facebook button .signInButton(GoogleButton.class) // Show Google button .logoResId(R.drawable.mylogo) // Change the logo .backgroundColor(Color.BLUE) // Change the backgroundColor .isBackgroundColorFullScreen(true) // Full screen backgroundColor the backgroundColor full screenff

92

Page 96: AWS Mobile Hub 개발자 안내서 - 개발자 안내서 · 2020-02-07 · iOS - Swift 1.iOS를 플랫폼으로 선택하고 다음을 선택합니다. 2.Download Cloud Config(클라우드

AWS Mobile Hub 개발자 안내서 개발자 안내서Android 및 iOS

.fontFamily("sans-serif-light") // Apply sans-serif-light as the global font .canCancel(true) .build(); SignInUI signinUI = (SignInUI) AWSMobileClient.getInstance().getClient(YourMainActivity.this, SignInUI.class); signinUI.login(YourMainActivity.this, YourNextActivity.class).authUIConfiguration(config).execute(); } }).execute(); }}

Android - Kotlin

AuthUIConfiguration 객체를 생성 및 구성하고 관련 속성을 설정합니다.

• 이메일 및 암호 사용자 SignInUI를 표시하려면 userPools를 true로 설정합니다.• Facebook 또는 Google 사용자 SignInUI를 표시하려면signInButton(FacebookButton.class) 또는 signInButton(GoogleButton.class)을 추가합니다.

• 로고를 변경하려면 logoResId를 사용합니다.• 배경색을 변경하려면 backgroundColor를 사용합니다.• 로그인 흐름을 취소하려면 .canCancel(true)을 설정합니다.• 로그인 보기에서 글꼴을 변경하려면 fontFamily 메서드를 사용하고 글꼴 그룹을 나타내는 문자열

을 전달합니다.• backgroundColor 전체 화면을 표시하려면 fullScreenBackgroundColor를 사용합니다.

import android.app.Activity;import android.graphics.Color;import android.os.Bundle;

import com.amazonaws.mobile.auth.facebook.FacebookButton;import com.amazonaws.mobile.auth.google.GoogleButton;import com.amazonaws.mobile.auth.ui.AuthUIConfiguration;import com.amazonaws.mobile.auth.ui.SignInUI;

import com.amazonaws.mobile.client.AWSMobileClient;import com.amazonaws.mobile.client.AWSStartupHandler;import com.amazonaws.mobile.client.AWSStartupResult;

class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState : Bundle?) { super.onCreate() AWSMobileClient.getInstance().initialize(this) { val config = AuthUIConfiguration.Builder() .userPools(true) // show the Email and Password UI .signInButton(FacebookButton.class) // Show Facebook .signInButton(GoogleButton.class) // Show Google .logoResId(R.drawable.mylogo) // Change the logo .backgroundColor(Color.BLUE) // Change the background color .isBackgroundColorFullScreen(true) // Full screen background color .fontFamily("sans-serif-light") // font .canCancel(true) // Add a cancel/back button .build() val signInUI = AWSMobileClient.getInstance().getClient(this@MainActivity, SignInUI::class.java) as SignInUI signInUI.login(this@MainActivity, NextActivity::class.java).authUIConfiguration(config).execute()

93

Page 97: AWS Mobile Hub 개발자 안내서 - 개발자 안내서 · 2020-02-07 · iOS - Swift 1.iOS를 플랫폼으로 선택하고 다음을 선택합니다. 2.Download Cloud Config(클라우드

AWS Mobile Hub 개발자 안내서 개발자 안내서Android 및 iOS

}.execute() }}

iOS - Swift

AWSAuthUIConfiguration 객체를 생성 및 구성하고 관련 속성을 설정합니다.

AuthUIConfiguration 객체를 생성 및 구성합니다.

• 이메일 및 암호 사용자 SignInUI를 표시하려면 enableUserPoolsUI를 true로 설정합니다.• Facebook 또는 Google 사용자 SignInUI를 표시하려면 .addSignInButtonView(class:AWSFacebookSignInButton.self) 또는 .addSignInButtonView(class:AWSFacebookSignInButton.self)을 추가합니다.

• 로고를 변경하려면 logoImage를 사용합니다.• 배경색을 변경하려면 backgroundColor를 사용합니다.• 로그인 흐름을 취소하려면 canCancel을 사용합니다.• 로그인 보기에서 글꼴을 변경하려면 font 속성을 사용하고 글꼴 그룹을 나타내는 UIFont 객체를 전

달합니다.• backgroundColor 전체 화면을 표시하려면 fullScreenBackgroundColor를 사용합니다.

import UIKitimport AWSAuthUIimport AWSMobileClientimport AWSUserPoolsSignInimport AWSFacebookSignInimport AWSGoogleSignIn

class SampleViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() if !AWSSignInManager.sharedInstance().isLoggedIn { presentAuthUIViewController() } }

func presentAuthUIViewController() { let config = AWSAuthUIConfiguration() config.enableUserPoolsUI = true config.addSignInButtonView(class: AWSFacebookSignInButton.self) config.addSignInButtonView(class: AWSGoogleSignInButton.self) config.backgroundColor = UIColor.blue config.font = UIFont (name: "Helvetica Neue", size: 20) config.isBackgroundColorFullScreen = true config.canCancel = true

AWSAuthUIViewController.presentViewController( with: self.navigationController!, configuration: config, completionHandler: { (provider: AWSSignInProvider, error: Error?) in if error == nil { // SignIn succeeded. } else { // end user faced error while loggin in, take any required action here. } }) }}

94

Page 98: AWS Mobile Hub 개발자 안내서 - 개발자 안내서 · 2020-02-07 · iOS - Swift 1.iOS를 플랫폼으로 선택하고 다음을 선택합니다. 2.Download Cloud Config(클라우드

AWS Mobile Hub 개발자 안내서 개발자 안내서Android 및 iOS

방법: NoSQL 데이터베이스(Amazon DynamoDB)

다음 참조 콘텐츠는 iOS 및 Android용 AWS Mobile SDK를 사용해 구성된 기존 앱에만 적용됩니다. 새 모바일 또는 웹 앱을 빌드하거나 기존 앱에 클라우드 기능을 추가하고 있다면 대신 Amplify Framework 웹사이트를 방문하십시오. iOS 및 Android용 AWS Mobile SDK의 설명서는 Amplify Framework의 일부로 제공됩니다.

이 섹션에서는 Amazon DynamoDB를 Android 및 iOS 앱에 통합하기 위한 절차에 대해 설명합니다.

주제• 기존 NoSQL 테이블 통합 (p. 95)• iOS: Amazon DynamoDB 객체 매퍼 API (p. 111)• iOS: Amazon DynamoDB 하위 수준 클라이언트 (p. 119)

기존 NoSQL 테이블 통합

다음 참조 콘텐츠는 iOS 및 Android용 AWS Mobile SDK를 사용해 구성된 기존 앱에만 적용됩니다. 새 모바일 또는 웹 앱을 빌드하거나 기존 앱에 클라우드 기능을 추가하고 있다면 대신 Amplify Framework 웹사이트를 방문하십시오. iOS 및 Android용 AWS Mobile SDK의 설명서는 Amplify Framework의 일부로 제공됩니다.

다음 단계 및 예시는 간단한 서점 앱을 가정하여 구성한 것입니다. 이 앱은 Amazon DynamoDB 테이블을 사용하여 서점에서 사용할 수 있는 도서를 추적합니다.

백엔드 설정

모바일 앱에 통합할 수 있는 Amazon DynamoDB 테이블을 수동으로 구성하려면 다음 단계를 수행하십시오.

주제• 새 테이블 및 인덱스 생성 (p. 95)• 자격 증명 풀 설정 (p. 96)• 권한 설정 (p. 96)• 권한 적용 (p. 96)

새 테이블 및 인덱스 생성

• 이미 Amazon DynamoDB 테이블이 있고 해당되는 리전이 어디인지 알고 있다면 자격 증명 풀 설정 (p. 96)으로 건너뛸 수 있습니다.

도서 테이블을 만들려면:

1. Amazon DynamoDB 콘솔에 로그인합니다.2. 테이블 만들기를 선택합니다.3. 테이블 이름으로 Books 를 입력합니다.4. 기본 키의 파티션 키 필드에 ISBN을 입력하고 유형으로는 문자열을 지정합니다.5. 정렬 키 추가 확인란을 선택한 후 제공되는 필드에 Category를 입력하고 유형은 문자열로 선택합니다.6. 기본 설정 사용 확인란의 선택을 취소하고 + 인덱스 추가를 선택합니다.7. 인덱스 추가 대화 상자에서 Author 를 입력하고 유형으로는 문자열을 지정합니다.

95

Page 99: AWS Mobile Hub 개발자 안내서 - 개발자 안내서 · 2020-02-07 · iOS - Swift 1.iOS를 플랫폼으로 선택하고 다음을 선택합니다. 2.Download Cloud Config(클라우드

AWS Mobile Hub 개발자 안내서 개발자 안내서Android 및 iOS

8. 정렬 키 추가 확인란을 선택하고 정렬 키 값으로 Title 을 입력하고 유형으로는 문자열을 지정합니다.9. 나머지 값은 기본값을 그대로 둡니다. 인덱스 추가를 선택하여 Author-Title-index 인덱스를 추가합

니다.10.최소 프로비저닝 용량에서 읽기는 10, 쓰기는 5로 설정합니다.11.생성을 선택합니다. Amazon DynamoDB가 데이터를 생성합니다.12.콘솔을 새로 고치고 테이블 목록에서 도서 테이블을 선택합니다.13.개요 탭을 열고 Amazon Resource Name(ARN)을 복사해 두거나 적어 둡니다. 다음 절차에서 이 정보가

필요합니다.

자격 증명 풀 설정

사용자에게 테이블 액세스 권한을 부여하려면 Amazon Cognito의 자격 증명 풀이 필요합니다. 이 풀은 기본IAM 역할이 두 가지인데, 하나는 게스트(인증되지 않음)용이고 다른 하나는 로그인한(인증됨) 사용자용입니다. 설계하여 IAM 역할에 연결한 정책에 따라 사용자 유형마다 할 수 있는 작업과 할 수 없는 작업이 결정됩니다.

앱의 기존 풀을 가져옵니다.

권한 설정

다음 IAM 정책을 자격 증명 풀의 인증되지 않은 역할에 연결합니다. 그러면 사용자가 Amazon DynamoDB테이블의 ARN이 식별하는 두 가지 리소스(테이블 및 인덱스)에 대해 작업을 수행할 수 있습니다.

{ "Statement": [{ "Effect": "Allow", "Action": [ "dynamodb:DeleteItem", "dynamodb:GetItem", "dynamodb:PutItem", "dynamodb:Scan", "dynamodb:Query", "dynamodb:UpdateItem", "dynamodb:BatchWriteItem" ], "Resource": [ "arn:aws:dynamodb:us-west-2:123456789012:table/Books", "arn:aws:dynamodb:us-west-2:123456789012:table/Books/index/*" ] }]}

권한 적용

이 정책을 Amazon Cognito 자격 증명 풀에 할당된 인증되지 않은 역할에 적용하되, 리소스 값은 AmazonDynamoDB 테이블의 올바른 ARN으로 바꿉니다.

1. IAM 콘솔에 로그인합니다.2. 역할]를 선택한 다음 Amazon Cognito가 자동으로 생성한 "Unauth" 역할을 선택합니다.3. Attach Role Policy(역할 정책 첨부)를 선택합니다.4. 사용자 지정 정책을 선택한 후 선택을 선택합니다.5. 정책 이름을 입력하고 이를 위에 표시된 정책 문서에 붙여 넣고 리소스 값은 테이블 및 인덱스용 ARN으로

바꿉니다. (데이터베이스의 세부 정보 탭에서 테이블 ARN을 검색한 다음 /index/*에 추가하여 인덱스ARN의 값을 얻을 수도 있습니다.)

6. [Apply Policy]를 선택합니다.

96

Page 100: AWS Mobile Hub 개발자 안내서 - 개발자 안내서 · 2020-02-07 · iOS - Swift 1.iOS를 플랫폼으로 선택하고 다음을 선택합니다. 2.Download Cloud Config(클라우드

AWS Mobile Hub 개발자 안내서 개발자 안내서Android 및 iOS

백엔드에 연결

주제• AWS 구성 파일 생성 (p. 97)• AWS Config 파일 추가 (p. 98)• 앱에 SDK 추가 (p. 99)• 앱에 데이터 모델 추가 (p. 102)

AWS 구성 파일 생성

앱은 사용자가 사용하는 서비스의 엔드포인트가 포함된 awsconfiguration.json 파일을 사용하여 AWS리소스에 연결됩니다.

1. 이름이 awsconfiguration.json인 파일을 다음 내용으로 생성합니다.

{ "Version": "1.0", "CredentialsProvider": { "CognitoIdentity": { "Default": { "PoolId": "COGNITO-IDENTITY-POOL-ID", "Region": "COGNITO-IDENTITY-POOL-REGION" } } }, "IdentityManager": { "Default": {} }, "DynamoDBObjectMapper": { "Default": { "Region": "DYNAMODB-REGION" } }}

2. 구성 파일을 다음과 같이 변경합니다.• DYNAMODB-REGION을 테이블이 생성된 리전으로 바꿉니다.

테이블의 리전을 찾아야 합니까? Amazon DynamoDB 콘솔로 이동하여 테이블에대한 개요 탭을 선택합니다. Amazon 리소스 이름(ARN) 항목에 리전이 포함된 테이블의 ID가 표시됩니다.

예를 들어 풀 ID가 arn:aws:dynamodb:us-east-1:012345678901:table/nosqltest-mobilehub-012345678-Books라면 테이블의리전 값은 us-east-1입니다.

사용자가 원하는 구성 파일 값은 "Region":"REGION-OF-YOU-DYNAMODB-ARN" 형식입니다. 예를 들면 다음과 같습니다.

"Region": "us-east-1"

• COGNITO-IDENTITY-POOL-ID를 자격 증명 풀 ID로 바꿉니다.• COGNITO-IDENTITY-POOL-REGION을 자격 증명 풀이 생성된 리전으로 바꿉니다.

97

Page 101: AWS Mobile Hub 개발자 안내서 - 개발자 안내서 · 2020-02-07 · iOS - Swift 1.iOS를 플랫폼으로 선택하고 다음을 선택합니다. 2.Download Cloud Config(클라우드

AWS Mobile Hub 개발자 안내서 개발자 안내서Android 및 iOS

풀의 ID와 리전을 찾아야 합니까? Amazon Cognito 콘솔로 이동해 연동 자격 증명관리를 선택한 다음, 해당 풀을 선택하고 자격 증명 풀 편집을 선택합니다. 자격 증명 풀 ID의 값을복사합니다.

이 리전 값을 다음 양식에 입력하여 통합에 필요한 값을 생성합니다.

"Region": "REGION-PREFIX-OF-YOUR-POOL-ID".

예를 들어 풀 ID가 us-east-1:01234567-yyyy-0123-xxxx-012345678901이라면 통합리전 값은 다음과 같습니다.

"Region": "us-east-1"

AWS Config 파일 추가

앱과 백엔드 서비스를 연결하려면 구성 파일을 추가합니다.

Android - Java

Android Studio Project Navigator에서 앱의 res 폴더를 마우스 오른쪽 버튼으로 클릭한 다음 새로 생성> 디렉터리를 선택합니다. 디렉터리 이름으로 raw를 입력한 후 확인을 선택합니다.

생성한 awsconfiguration.json을 res/raw 폴더로 끌어 놓습니다. Android는 이 폴더에 있는 임의파일에 리소스 ID를 부여해 앱에서 쉽게 참조할 수 있게 해줍니다.

Android - Kotlin

Android Studio Project Navigator에서 앱의 res 폴더를 마우스 오른쪽 버튼으로 클릭한 다음 새로 생성> 디렉터리를 선택합니다. 디렉터리 이름으로 raw를 입력한 후 확인을 선택합니다.

98

Page 102: AWS Mobile Hub 개발자 안내서 - 개발자 안내서 · 2020-02-07 · iOS - Swift 1.iOS를 플랫폼으로 선택하고 다음을 선택합니다. 2.Download Cloud Config(클라우드

AWS Mobile Hub 개발자 안내서 개발자 안내서Android 및 iOS

생성한 awsconfiguration.json을 res/raw 폴더로 끌어 놓습니다. Android는 이 폴더에 있는 임의파일에 리소스 ID를 부여해 앱에서 쉽게 참조할 수 있게 해줍니다.

iOS - Swift

Xcode 프로젝트의 awsconfiguration.json 파일이 포함된 폴더에 Info.plist을 끌어 놓습니다.옵션 대화 상자에서 Copy items(항목 복사)와 Create groups(그룹 생성)를 차례로 선택합니다.

앱에 SDK 추가

다음 단계에 따라 AWS Mobile NoSQL Database를 앱에 추가합니다.

Android - Java

1. 다음 백엔드 설정 (p. 3) 단계를 통해 AWS Mobile SDK 구성 요소를 설정합니다.a. app/build.gradle에 다음을 포함해야 합니다.

dependencies{

// Amazon Cognito dependencies for user access to AWS resources implementation ('com.amazonaws:aws-android-sdk-mobile-client:2.7.+@aar') { transitive = true }

// AmazonDynamoDB dependencies for NoSQL Database implementation 'com.amazonaws:aws-android-sdk-ddb-mapper:2.7.+'

// other dependencies . . .}

b. 다음 권한을 AndroidManifest.xml에 추가합니다.

<uses-permission android:name="android.permission.INTERNET"/><uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>

2. 호출의 콜백에 AWSDynamoDBMapper 클라이언트를 생성하여 AWSMobileClient를 인스턴스화합니다. 이렇게 하면 Amazon DynamoDB 연결에 필요한 AWS 자격 증명을 사용할 수 있으며, 이 인스턴스는 일반적으로 시작 활동의 onCreate 함수에 위치합니다.

import com.amazonaws.mobile.client.AWSMobileClient;import com.amazonaws.mobile.client.AWSStartupHandler;import com.amazonaws.mobile.client.AWSStartupResult;

99

Page 103: AWS Mobile Hub 개발자 안내서 - 개발자 안내서 · 2020-02-07 · iOS - Swift 1.iOS를 플랫폼으로 선택하고 다음을 선택합니다. 2.Download Cloud Config(클라우드

AWS Mobile Hub 개발자 안내서 개발자 안내서Android 및 iOS

import com.amazonaws.mobileconnectors.dynamodbv2.dynamodbmapper.DynamoDBMapper;import com.amazonaws.services.dynamodbv2.AmazonDynamoDBClient;

public class MainActivity extends AppCompatActivity {

// Declare a DynamoDBMapper object DynamoDBMapper dynamoDBMapper;

@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main);

// AWSMobileClient enables AWS user credentials to access your table AWSMobileClient.getInstance().initialize(this, new AWSStartupHandler() {

@Override public void onComplete(AWSStartupResult awsStartupResult) {

// Add code to instantiate a AmazonDynamoDBClient AmazonDynamoDBClient dynamoDBClient = new AmazonDynamoDBClient(AWSMobileClient.getInstance().getCredentialsProvider()); this.dynamoDBMapper = DynamoDBMapper.builder() .dynamoDBClient(dynamoDBClient) .awsConfiguration( AWSMobileClient.getInstance().getConfiguration()) .build();

} }).execute();

// Other functions in onCreate . . . }}

중요 DynamoDB에 대한 비동기식 호출 사용

DynamoDB에 대한 호출은 동기식이기 때문에 UI스레드에 소속되지 않습니다. Runnable 랩퍼 같은 비동기식 메서드를 사용하여 별도의 스레드에서 DynamoDBObjectMapper를 호출합니다.

Runnable runnable = new Runnable() { public void run() { //DynamoDB calls go here }};Thread mythread = new Thread(runnable);mythread.start();

Android - Kotlin

1. 다음 백엔드 설정 (p. 3) 단계를 통해 AWS Mobile SDK 구성 요소를 설정합니다.a. app/build.gradle에 다음을 포함해야 합니다.

dependencies{

// Amazon Cognito dependencies for user access to AWS resources

100

Page 104: AWS Mobile Hub 개발자 안내서 - 개발자 안내서 · 2020-02-07 · iOS - Swift 1.iOS를 플랫폼으로 선택하고 다음을 선택합니다. 2.Download Cloud Config(클라우드

AWS Mobile Hub 개발자 안내서 개발자 안내서Android 및 iOS

implementation ('com.amazonaws:aws-android-sdk-mobile-client:2.7.+@aar') { transitive = true }

// AmazonDynamoDB dependencies for NoSQL Database implementation 'com.amazonaws:aws-android-sdk-ddb-mapper:2.7.+'

// other dependencies . . .}

b. 다음 권한을 AndroidManifest.xml에 추가합니다.

<uses-permission android:name="android.permission.INTERNET"/><uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>

2. 호출의 콜백에 AWSDynamoDBMapper 클라이언트를 생성하여 AWSMobileClient를 인스턴스화합니다. 이렇게 하면 Amazon DynamoDB 연결에 필요한 AWS 자격 증명을 사용할 수 있으며, 이 인스턴스는 일반적으로 시작 활동의 onCreate 함수에 위치합니다.

import com.amazonaws.mobile.client.AWSMobileClient;import com.amazonaws.mobile.client.AWSStartupHandler;import com.amazonaws.mobile.client.AWSStartupResult;

import com.amazonaws.mobileconnectors.dynamodbv2.dynamodbmapper.DynamoDBMapper;import com.amazonaws.services.dynamodbv2.AmazonDynamoDBClient;

class MainActivity : AppCompatActivity() { var ddbMapper: DynamoDBMapper? = null

override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main)

AWSMobileClient.getInstance().initialize(this, object : AWSStartupHandler() { override fun onComplete(awsStartupResult: AWSStartupResult) { val ddbClient = AmazonDynamoDBClient(AWSMobileClient.getInstance().credentialsProvider) ddbMapper = DynamoDBMapper.builder() .dynamoDBClient(ddbClient) .awsConfiguration(AWSMobileClient.getInstance().configuration) .build() } }).execute()

// other setup within onCreate() ... }}

중요 DynamoDB에 대한 비동기식 호출 사용

DynamoDB에 대한 호출은 동기식이기 때문에 UI스레드에 소속되지 않습니다. thread 랩퍼 같은비동기식 메서드를 사용하여 별도의 스레드에서DynamoDBObjectMapper를 호출합니다.

thread(start = true ) { // DynamoDB calls go here}

101

Page 105: AWS Mobile Hub 개발자 안내서 - 개발자 안내서 · 2020-02-07 · iOS - Swift 1.iOS를 플랫폼으로 선택하고 다음을 선택합니다. 2.Download Cloud Config(클라우드

AWS Mobile Hub 개발자 안내서 개발자 안내서Android 및 iOS

iOS - Swift

1. 다음 백엔드 설정 (p. 3) 단계를 통해 AWS Mobile SDK 구성 요소를 설정합니다.a. AWSDynamoDB 팟을 Podfile에 추가해 AWS Mobility SDK를 설치합니다.

platform :ios, '9.0'

target :'YOUR-APP-NAME' do use_frameworks!

# Enable AWS user credentials pod 'AWSMobileClient', '~> 2.6.13'

# Connect to NoSQL database tables pod 'AWSDynamoDB', '~> 2.6.13'

# other pods . . .end

계속하기 전에 pod install --repo-update를 실행합니다.

"[!] Failed to connect to GitHub to update the CocoaPods/Specs . . ."로 시작하는 오류 메시지가 표시되고 인터넷 연결이 작동하는 경우 openssl 및 Ruby 업데이트가 필요할수 있습니다.

b. DynamoDB API를 호출하는 클래스는 다음 가져오기 문을 사용해야 합니다.

import AWSCoreimport AWSDynamoDB

앱에 데이터 모델 추가

앱을 테이블에 연결하려면 다음 형식의 데이터 모델 객체를 생성하십시오. 이 예의 모델은 이전 단계에서 생성한 Books 테이블에 바탕을 둔 것입니다. 파티션 키(해시 키)는 ISBN이고, 정렬 키(범위 키)는Category입니다.

Android - Java

Android Studio 프로젝트 탐색기에서 주요 활동이 포함된 폴더를 마우스 오른쪽 버튼으로 클릭하고 New> Java Class(새로 생성 > Java 클래스)를 선택합니다. 데이터 모델 참조에 사용할 이름을 입력합니다.이 예에서 이름은 BooksDO입니다. 다음 형식으로 된 코드를 추가합니다.

package com.amazonaws.models.nosql;

import com.amazonaws.mobileconnectors.dynamodbv2.dynamodbmapper.DynamoDBAttribute;import com.amazonaws.mobileconnectors.dynamodbv2.dynamodbmapper.DynamoDBHashKey;import com.amazonaws.mobileconnectors.dynamodbv2.dynamodbmapper.DynamoDBIndexHashKey;import com.amazonaws.mobileconnectors.dynamodbv2.dynamodbmapper.DynamoDBIndexRangeKey;import com.amazonaws.mobileconnectors.dynamodbv2.dynamodbmapper.DynamoDBRangeKey;import com.amazonaws.mobileconnectors.dynamodbv2.dynamodbmapper.DynamoDBTable;

import java.util.List;import java.util.Map;import java.util.Set;

@DynamoDBTable(tableName = "Books")

public class BooksDO { private String _isbn; private String _category;

102

Page 106: AWS Mobile Hub 개발자 안내서 - 개발자 안내서 · 2020-02-07 · iOS - Swift 1.iOS를 플랫폼으로 선택하고 다음을 선택합니다. 2.Download Cloud Config(클라우드

AWS Mobile Hub 개발자 안내서 개발자 안내서Android 및 iOS

private String _title; private String _author;

@DynamoDBHashKey(attributeName = "ISBN") @DynamoDBAttribute(attributeName = "ISBN") public String getIsbn() { return _isbn; }

public void setIsbn(final String _isbn) { this._isbn = _isbn; }

@DynamoDBRangeKey (attributeName = "Category") @DynamoDBAttribute(attributeName = "Category") public String getCategory() { return _category; }

public void setCategory(final String _category) { this._category= _category; }

@DynamoDBIndexHashKey(attributeName = "Author", globalSecondaryIndexName = "Author") public String getAuthor() { return _author; }

public void setAuthor(final String _author) { this._author = _author; }

@DynamoDBIndexRangeKey(attributeName = "Title", globalSecondaryIndexName = "Title") public String getTitle() { return _title; }

public void setTitle(final String _title) { this._title = _title; }

}

Android - Kotlin

Android Studio 프로젝트 탐색기에서 주요 활동이 포함된 폴더를 마우스 오른쪽 버튼으로 클릭하고 New> Java Class(새로 생성 > Java 클래스)를 선택합니다. 데이터 모델 참조에 사용할 이름을 입력합니다.이 예에서 이름은 BooksDO입니다. 다음 형식으로 된 코드를 추가합니다. Kotlin 프로젝트에서는 Java형식의 데이터 모델도 사용할 수 있습니다.

package com.amazonaws.models.nosql;

import com.amazonaws.mobileconnectors.dynamodbv2.dynamodbmapper.DynamoDBAttribute;import com.amazonaws.mobileconnectors.dynamodbv2.dynamodbmapper.DynamoDBHashKey;import com.amazonaws.mobileconnectors.dynamodbv2.dynamodbmapper.DynamoDBIndexHashKey;import com.amazonaws.mobileconnectors.dynamodbv2.dynamodbmapper.DynamoDBIndexRangeKey;import com.amazonaws.mobileconnectors.dynamodbv2.dynamodbmapper.DynamoDBRangeKey;import com.amazonaws.mobileconnectors.dynamodbv2.dynamodbmapper.DynamoDBTable;

import java.util.List;import java.util.Map;import java.util.Set;

103

Page 107: AWS Mobile Hub 개발자 안내서 - 개발자 안내서 · 2020-02-07 · iOS - Swift 1.iOS를 플랫폼으로 선택하고 다음을 선택합니다. 2.Download Cloud Config(클라우드

AWS Mobile Hub 개발자 안내서 개발자 안내서Android 및 iOS

@DynamoDBTable(tableName = "Books")class BooksDO { @DynamoDBHashKey(attributeName = "ISBN") @DynamoDBAttribute(attributeName = "ISBN") var isbn: String? = null

@DynamoDBRangeKey (attributeName = "Category") @DynamoDBAttribute(attributeName = "Category") var category: String? = null

@DynamoDBIndexHashKey(attributeName = "Author", globalSecondaryIndexName = "Author") var author: String? = null

@DynamoDBIndexRangeKey(attributeName = "Title", globalSecondaryIndexName = "Title") var title: String? = null}

iOS - Swift

Xcode 프로젝트 탐색기에서 앱 위임이 포함된 폴더를 마우스 오른쪽 버튼으로 클릭하고 New File >Swfit File > Next(새 파일 > Swift File > 다음)를 선택합니다. filename과 같이 데이터 모델 참조에 사용할이름을 입력합니다. 이 예에서 이름은 Books입니다. 다음 형식으로 된 코드를 추가합니다.

import Foundation import UIKit import AWSDynamoDB

class Books: AWSDynamoDBObjectModel, AWSDynamoDBModeling {

@objc var _isbn: String? @objc var _category: String? @objc var _author: String? @objc var _title: String?

class func dynamoDBTableName() -> String { return "Books" }

class func hashKeyAttribute() -> String { return "_isbn" }

class func rangeKeyAttribute() -> String { return "_category" }

override class func jsonKeyPathsByPropertyKey() -> [AnyHashable: Any] { return [ "_isbn" : "ISBN", "_category" : "Category", "_author" : "Author", "_title" : "Title", ] }}

CRUD 작업 수행

아래 조각은 이전 단계에 생성한 BooksDO 데이터 모델 클래스를 사용합니다.

주제

104

Page 108: AWS Mobile Hub 개발자 안내서 - 개발자 안내서 · 2020-02-07 · iOS - Swift 1.iOS를 플랫폼으로 선택하고 다음을 선택합니다. 2.Download Cloud Config(클라우드

AWS Mobile Hub 개발자 안내서 개발자 안내서Android 및 iOS

• 항목 생성(저장) (p. 105)• 항목 읽기(로딩) (p. 106)• 항목 업데이트 (p. 107)• 항목 삭제 (p. 108)

항목 생성(저장)

다음 코드를 사용하여 NoSQL 데이터베이스 테이블에서 항목을 생성합니다.

Android - Java

public void createBooks() { final com.amazonaws.models.nosql.BooksDO booksItem = new com.amazonaws.models.nosql.BooksDO();

booksItem.setIsbn("ISBN1"); booksItem.setAuthor("Frederick Douglas"); booksItem.setTitle("Escape from Slavery"); booksItem.setCategory("History");

new Thread(new Runnable() { @Override public void run() { dynamoDBMapper.save(booksItem); // Item saved } }).start();}

Android - Kotlin

fun createBooks() { val booksItem = BooksDO().apply { isbn = "ISBN1" author = "Frederick Douglas" title = "Escape from Slavery" category = "History" }

thread(start = true) { ddbMapper.save(booksItem) }}

iOS - Swift

func createBooks() { let dynamoDbObjectMapper = AWSDynamoDBObjectMapper.default()

let booksItem: Books = Books()

booksItem._isbn = "1234" booksItem._category = "History" booksItem._author = "Harriet Tubman" booksItem._title = "My Life"

//Save a new item dynamoDbObjectMapper.save(booksItem, completionHandler: { (error: Error?) -> Void in

105

Page 109: AWS Mobile Hub 개발자 안내서 - 개발자 안내서 · 2020-02-07 · iOS - Swift 1.iOS를 플랫폼으로 선택하고 다음을 선택합니다. 2.Download Cloud Config(클라우드

AWS Mobile Hub 개발자 안내서 개발자 안내서Android 및 iOS

if let error = error { print("Amazon DynamoDB Save Error: \(error)") return } print("An item was saved.") })}

항목 읽기(로딩)

다음 코드를 사용하여 NoSQL 데이터베이스 테이블에서 항목을 읽습니다.

Android - Java

public void readBooks() { new Thread(new Runnable() { @Override public void run() {

com.amazonaws.models.nosql.BooksDO booksItem = dynamoDBMapper.load( com.amazonaws.models.nosql.BooksDO.class, "ISBN1", // Partition key (hash key) "History"); // Sort key (range key)

// Item read Log.d(LOG_TAG, String.format("Books Item: %s", booksItem.toString())); } }).start();}

Android - Kotlin

fun readBooks() { thread(start = true) { val booksItem = ddbMapper.load(BooksDO::class.java, "ISBN1", // Partition Key (hash key) "History") // Sort key (range key)

Log.d(LOG_TAG, "Books Item: $booksItem") }}

iOS - Swift

func readBooks() { let dynamoDbObjectMapper = AWSDynamoDBObjectMapper.default()

// Create data object using data model you created let booksItem: Books = Books();

dynamoDbObjectMapper.load( Books.self, hashKey: "1234", rangeKey: "Harriet Tubman", completionHandler: { (objectModel: AWSDynamoDBObjectModel?, error: Error?) -> Void in if let error = error { print("Amazon DynamoDB Read Error: \(error)") return } print("An item was read.")

106

Page 110: AWS Mobile Hub 개발자 안내서 - 개발자 안내서 · 2020-02-07 · iOS - Swift 1.iOS를 플랫폼으로 선택하고 다음을 선택합니다. 2.Download Cloud Config(클라우드

AWS Mobile Hub 개발자 안내서 개발자 안내서Android 및 iOS

})}

항목 업데이트

다음 코드를 사용하여 NoSQL 데이터베이스 테이블에서 항목을 업데이트합니다.

Android - Java

public void updateBooks() { final com.amazonaws.models.nosql.BooksDO booksItem = new com.amazonaws.models.nosql.BooksDO();

booksItem.setIsbn("ISBN1"); booksItem.setCategory("History"); booksItem.setAuthor("Frederick M. Douglas"); // booksItem.setTitle("Escape from Slavery");

new Thread(new Runnable() { @Override public void run() {

// Using .save(bookItem) with no Title value makes that attribute value equal null // The .Savebehavior shown here leaves the existing value as is dynamoDBMapper.save(booksItem, new DynamoDBMapperConfig(DynamoDBMapperConfig.SaveBehavior.UPDATE_SKIP_NULL_ATTRIBUTES));

// Item updated } }).start();}

Android - Kotlin

fun updateBooks() { val booksItem = BooksDO().apply { isbn = "ISBN1" category = "History" author = "Frederick M. Douglas" // Do not set title - it will be removed from the item in DynamoDB }

thread(start = true) { ddbMapper.save(booksItem, DynamoDBMapperConfig(DynamoDBMappConfig.SaveBehavior.UPDATE_SKIP_NULL_ATTERIBUTES)) }}

iOS - Swift

func updateBooks() { let dynamoDbObjectMapper = AWSDynamoDBObjectMapper.default()

let booksItem: Books = Books()

booksItem._isbn = "1234" booksItem._category = "History" booksItem._author = "Harriet Tubman"

107

Page 111: AWS Mobile Hub 개발자 안내서 - 개발자 안내서 · 2020-02-07 · iOS - Swift 1.iOS를 플랫폼으로 선택하고 다음을 선택합니다. 2.Download Cloud Config(클라우드

AWS Mobile Hub 개발자 안내서 개발자 안내서Android 및 iOS

booksItem._title = "The Underground Railroad"

dynamoDbObjectMapper.save(booksItem, completionHandler: {(error: Error?) -> Void in if let error = error { print(" Amazon DynamoDB Save Error: \(error)") return } print("An item was updated.") })}

항목 삭제

다음 코드를 사용하여 NoSQL 데이터베이스 테이블에서 항목을 삭제합니다.

Android - Java

public void deleteBooks() { new Thread(new Runnable() { @Override public void run() {

com.amazonaws.models.nosql.BooksDO booksItem = new com.amazonaws.models.nosql.BooksDO(); booksItem.setIsbn("ISBN1"); //partition key booksItem.setCategory("History"); //range key

dynamoDBMapper.delete(booksItem);

// Item deleted } }).start();}

Android - Kotlin

fun deleteBook() { thread(start = true) { val booksItem = BooksDO().apply { isbn = "ISBN1" // Partition key category = "History" // Range key } ddbMapper.delete(booksItem) }}

iOS - Swift

func deleteBooks() { let dynamoDbObjectMapper = AWSDynamoDBObjectMapper.default()

let itemToDelete = Books() itemToDelete?._isbn = "1234" itemToDelete?._category = "History"

dynamoDbObjectMapper.remove(itemToDelete!, completionHandler: {(error: Error?) -> Void in if let error = error { print(" Amazon DynamoDB Save Error: \(error)") return

108

Page 112: AWS Mobile Hub 개발자 안내서 - 개발자 안내서 · 2020-02-07 · iOS - Swift 1.iOS를 플랫폼으로 선택하고 다음을 선택합니다. 2.Download Cloud Config(클라우드

AWS Mobile Hub 개발자 안내서 개발자 안내서Android 및 iOS

} print("An item was deleted.") })}

쿼리 수행

쿼리 작업을 통해 테이블에서 항목을 찾을 수 있습니다. 테이블의 해시 키(파티션 키) 및 범위 키(정렬 키) 속성 모두를 사용하여 쿼리를 정의해야 합니다. 찾고자 하는 속성들을 지정하여 결과를 필터링할 수 있습니다.DynamoDBQueryExpression에 대한 자세한 내용은 Android용 AWS Mobile SDK API 참조를 참조하십시오.

다음 예의 코드는 ISBN이라는 파티션 키(해시 키)와 History로 시작되는 정렬 키(범위 키) 범주로 도서를쿼리하는 방법을 보여줍니다.

Android - Java

public void queryBook() {

new Thread(new Runnable() { @Override public int hashCode() { return super.hashCode(); }

@Override public void run() { com.amazonaws.models.nosql.BooksDO book = new com.amazonaws.models.nosql.BooksDO(); book.setIsbn("ISBN1"); //partition key book.setCategory("History"); //range key

Condition rangeKeyCondition = new Condition() .withComparisonOperator(ComparisonOperator.BEGINS_WITH) .withAttributeValueList(new AttributeValue().withS("History")); DynamoDBQueryExpression queryExpression = new DynamoDBQueryExpression() .withHashKeyValues(book) .withRangeKeyCondition("Category", rangeKeyCondition) .withConsistentRead(false);

PaginatedList<BooksDO> result = dynamoDBMapper.query(com.amazonaws.models.nosql.BooksDO.class, queryExpression);

Gson gson = new Gson(); StringBuilder stringBuilder = new StringBuilder();

// Loop through query results for (int i = 0; i < result.size(); i++) { String jsonFormOfItem = gson.toJson(result.get(i)); stringBuilder.append(jsonFormOfItem + "\n\n"); }

// Add your code here to deal with the data result Log.d("Query results: ", stringBuilder.toString());

if (result.isEmpty()) { // There were no items matching your query. } } }).start(); }

109

Page 113: AWS Mobile Hub 개발자 안내서 - 개발자 안내서 · 2020-02-07 · iOS - Swift 1.iOS를 플랫폼으로 선택하고 다음을 선택합니다. 2.Download Cloud Config(클라우드

AWS Mobile Hub 개발자 안내서 개발자 안내서Android 및 iOS

Android - Kotlin

fun queryBooks() { thread(start = true) { val book = BooksDO().apply { isbn = "ISBN1" // Partition key category = "History" // Range key }

val rangeKeyCondition = Condition() .withComparisonOperator(ComparisionOperator.BEGINS_WITH) .withAttrbiuteValueList(AttributeValue().withS("History")) val queryExpression = DynamoDBQUeryExpression() .withHashKeyValues(book) .withRangeKeyCondition("Category", rangeKeyCondition) .withConsistentRead(false)

val result = ddbMapper.query(BooksDO::class.java, queryExpression) as PaginatedList<BooksDO> if (result.isEmpty()) { // There were no items matching your query } else { // loop through the result list and process the response } }}

iOS - Swift

func queryBooks() {

// 1) Configure the query let queryExpression = AWSDynamoDBQueryExpression() queryExpression.keyConditionExpression = "#isbn = :ISBN AND #category = :Category"

queryExpression.expressionAttributeNames = [ "#isbn": "ISBN", "#category": "Category" ]

queryExpression.expressionAttributeValues = [ ":ISBN" : "1234", ":Category" : "History" ]

// 2) Make the query let dynamoDbObjectMapper = AWSDynamoDBObjectMapper.default()

dynamoDbObjectMapper.query(Books.self, expression: queryExpression) { (output: AWSDynamoDBPaginatedOutput?, error: Error?) in if error != nil { print("The request failed. Error: \(String(describing: error))") } if output != nil { for books in output!.items { let booksItem = books as? Books print("\(booksItem!._title!)") } } }}

110

Page 114: AWS Mobile Hub 개발자 안내서 - 개발자 안내서 · 2020-02-07 · iOS - Swift 1.iOS를 플랫폼으로 선택하고 다음을 선택합니다. 2.Download Cloud Config(클라우드

AWS Mobile Hub 개발자 안내서 개발자 안내서Android 및 iOS

다음 단계

• IAM 정책에 대한 자세한 내용은 IAM 사용을 참조하십시오.• Amazon DynamoDB를 위한 세부적인 액세스 정책 생성에 대한 자세한 내용은 모바일 상의 DynamoDB –

5부: 세분화된 액세스 제어를 참조하십시오.

iOS: Amazon DynamoDB 객체 매퍼 API

다음 참조 콘텐츠는 iOS 및 Android용 AWS Mobile SDK를 사용해 구성된 기존 앱에만 적용됩니다. 새 모바일 또는 웹 앱을 빌드하거나 기존 앱에 클라우드 기능을 추가하고 있다면 대신 Amplify Framework 웹사이트를 방문하십시오. iOS 및 Android용 AWS Mobile SDK의 설명서는 Amplify Framework의 일부로 제공됩니다.

주제• 개요 (p. 13)• 설정 (p. 111)• 객체 매퍼 API 인스턴스화 (p. 111)• CRUD 연산 (p. 113)• 스캔 수행 (p. 116)• 쿼리 수행 (p. 118)• 추가 리소스 (p. 119)

개요

Amazon DynamoDB는 속도가 빠르고 확장성과 가용성이 뛰어나며 비용 효과적인 비 관계형 데이터베이스서비스입니다. Amazon DynamoDB는 기존 데이터 스토리지에서의 확장성 제한을 없애면서도 낮은 지연 시간과 예측 가능한 성능을 유지합니다.

AWS Mobile SDK for iOS는 Amazon DynamoDB에서의 작업을 위한 하위 수준 및 상위 수준 라이브러리를모두 제공합니다.

이 단원에 설명된 하위 수준 라이브러리는 사용자가 클라이언트 측 클래스를 테이블에 매핑하도록 해주는Amazon DynamoDB 객체 매퍼를 제공합니다. 클라이언트에 정의되어 있는 데이터 모델 내에서 작업하면 클라우드에서 객체를 저장하고 검색하는 간단하고 읽을 수 있는 코드를 작성할 수 있습니다.

dynamodb-low-level-client는 조건부 쓰기와 일괄 작업과 같은 작업을 수행하는 유용한 방법을 제공합니다.

설정

프로젝트에서 iOS AWS SDK dynamoDBObjectMapper를 사용하도록 설정하려면 다음 단계를 수행합니다.

SDK, 자격 증명 및 서비스 설치

dynamoDBObjectMapper를 새 앱에 통합하려면 시작하기에 설명된 단계에 따라 iOS용 AWS Mobile SDK를 설치합니다.

객체 매퍼 API 인스턴스화

이 섹션:

주제• AWSDynamoDB API 가져오기 (p. 112)• Amazon DynamoDB Object Mapper 클라이언트 생성 (p. 112)

111

Page 115: AWS Mobile Hub 개발자 안내서 - 개발자 안내서 · 2020-02-07 · iOS - Swift 1.iOS를 플랫폼으로 선택하고 다음을 선택합니다. 2.Download Cloud Config(클라우드

AWS Mobile Hub 개발자 안내서 개발자 안내서Android 및 iOS

• 매핑 클래스 정의 (p. 112)

AWSDynamoDB API 가져오기

프로젝트에 다음 가져오기 문을 추가합니다.

iOS - Swift

import AWSDynamoDB

iOS - Objective-C

#import <AWSDynamoDB/AWSDynamoDB.h>

Amazon DynamoDB Object Mapper 클라이언트 생성

AWSDynamoDBObjectMapper를 사용하면 클라이언트 측 클래스를 데이터베이스에 매핑할 수 있습니다. 객체 매퍼는 레코드 생성, 가져오기, 쿼리, 업로드 및 삭제와 같은 상위 수준 작업을 지원합니다. 다음과 같이 객체 매퍼를 생성합니다.

iOS - Swift

dynamoDBObjectMapper = AWSDynamoDBObjectMapper.default()

iOS - Objective-C

AWSDynamoDBObjectMapper *dynamoDBObjectMapper = [AWSDynamoDBObjectMapper defaultDynamoDBObjectMapper];

객체 매퍼 메서드가 AWSTask 객체를 반환합니다. 자세한 내용은 비동기적 작업 사용을 참조하십시오.

매핑 클래스 정의

Amazon DynamoDB 데이터베이스는 테이블의 모음이며, 테이블은 다음과 같이 설명할 수 있습니다.

• 테이블은 항목의 집합입니다.• 각 항목은 속성 모음입니다.• 각 속성마다 이름과 값이 있습니다.

서점 앱의 경우 테이블의 각 항목은 도서를 나타내며, 항목마다 Title, Author, Price 및 ISBN의 4가지 속성이있습니다.

테이블의 각 항목(도서)에는 기본 키가 있는데, 이 경우에 기본 키는 ISBN입니다.

객체 표현을 통해 데이터베이스 항목을 직접 조작하려면, 다음 코드에 표시된 것처럼 Book 테이블의 각 항목을 클라이언트 측 코드의 Book 객체에 매핑합니다. 속성 이름은 대/소문자를 구분합니다.

iOS - Swift

import AWSDynamoDB

class Book : AWSDynamoDBObjectModel, AWSDynamoDBModeling { @objc var Title:String? @objc var Author:String?

112

Page 116: AWS Mobile Hub 개발자 안내서 - 개발자 안내서 · 2020-02-07 · iOS - Swift 1.iOS를 플랫폼으로 선택하고 다음을 선택합니다. 2.Download Cloud Config(클라우드

AWS Mobile Hub 개발자 안내서 개발자 안내서Android 및 iOS

@objc var Price:String? @objc var ISBN:String?

class func dynamoDBTableName() -> String { return "Books" }

class func hashKeyAttribute() -> String { return "ISBN" }}

iOS - Objective-C

#import <AWSDynamoDB/AWSDynamoDB.h>#import "Book.h"

@interface Book : AWSDynamoDBObjectModel <AWSDynamoDBModeling>

@property (nonatomic, strong) NSString *Title;@property (nonatomic, strong) NSString *Author;@property (nonatomic, strong) NSNumber *Price;@property (nonatomic, strong) NSString *ISBN;

@end

@implementation Book

+ (NSString *)dynamoDBTableName { return @"Books";}

+ (NSString *)hashKeyAttribute { return @"ISBN";}

@end

Note

SDK 버전 2.0.16부터, AWSDynamoDBModel 매핑 클래스는 더 이상 사용되지 않으며AWSDynamoDBObjectModel로 대체됩니다. 레거시 코드 마이그레이션에 대한 자세한 내용은awsdynamodb-model을 참조하십시오.

AWSDynamoDBModeling 프로토콜을 준수하기 위해, 테이블 이름을 반환하는 dynamoDBTableName 및기본 키 이름을 반환하는 hashKeyAttribute를 구현합니다. 테이블에 범위 키가 있으면 + (NSString*)rangeKeyAttribute를 구현합니다.

CRUD 연산

주제• 항목 저장 (p. 114)• 항목 검색 (p. 115)• 항목 업데이트 (p. 116)• 항목 삭제 (p. 116)

Amazon DynamoDB 테이블, 매핑 클래스 및 객체 매퍼 클라이언트는 앱이 클라우드의 객체와 상호 작용하도록 해줍니다.

113

Page 117: AWS Mobile Hub 개발자 안내서 - 개발자 안내서 · 2020-02-07 · iOS - Swift 1.iOS를 플랫폼으로 선택하고 다음을 선택합니다. 2.Download Cloud Config(클라우드

AWS Mobile Hub 개발자 안내서 개발자 안내서Android 및 iOS

항목 저장

save: 메서드는 기본 구성을 사용하여 객체를 Amazon DynamoDB에 저장합니다. 파라미터로서, save:는AWSDynamoDBObjectModel로부터 상속되는 객체를 받고 AWSDynamoDBModeling 프로토콜을 준수합니다. 이 객체의 속성이 Amazon DynamoDB 테이블의 속성에 매핑됩니다.

저장될 객체를 만들려면 다음 단계를 수행하십시오.

1. 테이블 모델에 맞도록 객체 및 속성을 정의합니다.iOS - Swift

let myBook = Book()myBook?.ISBN = "3456789012"myBook?.Title = "The Scarlet Letter"myBook?.Author = "Nathaniel Hawthorne"myBook?.Price = 899 as NSNumber?

iOS - Objective-C

Book *myBook = [Book new];myBook.ISBN = @"3456789012";myBook.Title = @"The Scarlet Letter";myBook.Author = @"Nathaniel Hawthorne";myBook.Price = [NSNumber numberWithInt:899];

2. save: 메서드로 객체를 전달합니다.iOS - Swift

dynamoDBObjectMapper.save(myBook).continueWith(block: { (task:AWSTask<AnyObject>!) -> Any? in if let error = task.error as? NSError { print("The request failed. Error: \(error)") } else { // Do something with task.result or perform other operations. } })

iOS - Objective-C

[[dynamoDBObjectMapper save:myBook]continueWithBlock:^id(AWSTask *task) { if (task.error) { NSLog(@"The request failed. Error: [%@]", task.error); } else { //Do something with task.result or perform other operations. } return nil; }];

저장 동작 옵션

iOS용 AWS Mobile SDK는 다음 저장 동작 옵션을 지원합니다.

• AWSDynamoDBObjectMapperSaveBehaviorUpdate

이 옵션은 저장 작업에서 모델링되지 않은 속성에는 영향을 주지 않습니다. 모델링된 속성에 대해 nil 값을전달하면 Amazon DynamoDB의 해당 항목에서 속성이 제거됩니다. 기본적으로, 객체 매퍼는 이 동작을사용합니다.

114

Page 118: AWS Mobile Hub 개발자 안내서 - 개발자 안내서 · 2020-02-07 · iOS - Swift 1.iOS를 플랫폼으로 선택하고 다음을 선택합니다. 2.Download Cloud Config(클라우드

AWS Mobile Hub 개발자 안내서 개발자 안내서Android 및 iOS

• AWSDynamoDBObjectMapperSaveBehaviorUpdateSkipNullAttributes

이 옵션은 null 값 속성을 무시하고 Amazon DynamoDB의 항목으로부터 이를 제거하지 않는다는 점을 제외하면 기본 업데이트 동작과 유사합니다.

• AWSDynamoDBObjectMapperSaveBehaviorAppendSet

이 옵션은 스칼라 속성(String, Number, Binary)을AWSDynamoDBObjectMapperSaveBehaviorUpdateSkipNullAttributes 옵션과 동일하게 취급합니다. 단, 세트 속성의 경우, 이 옵션을 사용하면 기존 속성 값을 덮어쓰는 대신 기존 속성 값에 추가됩니다.호출자는 모델링된 속성 유형이 기존 세트 유형과 일치하도록 해야 합니다. 그렇지 않으면 서비스 예외가발생합니다.

• AWSDynamoDBObjectMapperSaveBehaviorClobber

이 옵션은 저장 시 모델링되지 않은 속성을 포함하여 모든 속성을 지우고 대체합니다. 버전이 지정된 필드제약 조건은 무시됩니다.

다음 코드에서는 객체 매퍼에 기본 저장 동작을 설정하는 예제를 제공합니다.

iOS - Swift

let updateMapperConfig = AWSDynamoDBObjectMapperConfiguration()updateMapperConfig.saveBehavior = .updateSkipNullAttributes

iOS - Objective-C

AWSDynamoDBObjectMapperConfiguration *updateMapperConfig = [AWSDynamoDBObjectMapperConfiguration new];updateMapperConfig.saveBehavior = AWSDynamoDBObjectMapperSaveBehaviorUpdateSkipNullAttributes;

save:configuration:을 호출할 때는 updateMapperConfig를 인수로 사용합니다.

항목 검색

객체의 기본 키(이 경우에는 ISBN)를 사용하면 데이터베이스에서 해당하는 항목을 로드할 수 있습니다. 다음 코드는 ISBN이 6543210987인 도서 항목을 반환합니다.

iOS - Swift

dynamoDBObjectMapper.load(Book.self, hashKey: "6543210987" rangeKey:nil).continueWith(block: { (task:AWSTask<AnyObject>!) -> Any? in if let error = task.error as? NSError { print("The request failed. Error: \(error)") } else if let resultBook = task.result as? Book { // Do something with task.result. } return nil })

iOS - Objective-C

[[dynamoDBObjectMapper load:[Book class] hashKey:@"6543210987" rangeKey:nil]continueWithBlock:^id(AWSTask *task) { if (task.error) { NSLog(@"The request failed. Error: [%@]", task.error); } else { //Do something with task.result.

115

Page 119: AWS Mobile Hub 개발자 안내서 - 개발자 안내서 · 2020-02-07 · iOS - Swift 1.iOS를 플랫폼으로 선택하고 다음을 선택합니다. 2.Download Cloud Config(클라우드

AWS Mobile Hub 개발자 안내서 개발자 안내서Android 및 iOS

} return nil;}];

객체 매퍼는 데이터베이스에서 반환된 Book 항목과 클라이언트에 있는 Book 객체(여기서는 resultBook)간 매핑을 생성합니다. resultBook.Title의 제목에 액세스합니다.

도서 데이터베이스에는 범위 키가 없으므로 nil이 rangeKey 파라미터에 전달되었습니다.

항목 업데이트

데이터베이스의 항목을 업데이트하려면 새로운 속성을 설정하고 객체를 저장하면 됩니다. 기존 항목의 기본키(myBook.ISBN 객체 매퍼 예제의 Book)는 변경할 수 없습니다. 기존 객체를 새로운 기본 키로 저장하면동일한 속성 및 새로운 기본 키가 있는 새로운 항목이 생성됩니다.

항목 삭제

테이블 행을 삭제하려면 remove: 메서드를 사용합니다.

iOS - Swift

let bookToDelete = Book() bookToDelete?.ISBN = "4456789012";

dynamoDBObjectMapper.remove(bookToDelete).continueWith(block: { (task:AWSTask<AnyObject>!) -> Any? in if let error = task.error as? NSError { print("The request failed. Error: \(error)") } else { // Item deleted. } })

iOS - Objective-C

Book *bookToDelete = [Book new];bookToDelete.ISBN = @"4456789012";

[[dynamoDBObjectMapper remove:bookToDelete] continueWithBlock:^id(AWSTask *task) {

if (task.error) { NSLog(@"The request failed. Error: [%@]", task.error); } else { //Item deleted. } return nil; }];

스캔 수행

스캔 작업은 정해지지 않은 순서로 수행됩니다.

scan:expression: 메서드에는 결과 객체의 클래스 및 AWSDynamoDBScanExpression의 인스턴스라는두 가지 파라미터가 있는데, 두 번째 파라미터는 결과 필터링 옵션을 제공합니다.

다음 예제는 AWSDynamoDBScanExpression 객체를 생성하고, 해당 객체의 limit 속성을 설정한 다음,Book 클래스 및 표현식 객체를 scan:expression:에 전달하는 방법을 보여줍니다.

116

Page 120: AWS Mobile Hub 개발자 안내서 - 개발자 안내서 · 2020-02-07 · iOS - Swift 1.iOS를 플랫폼으로 선택하고 다음을 선택합니다. 2.Download Cloud Config(클라우드

AWS Mobile Hub 개발자 안내서 개발자 안내서Android 및 iOS

iOS - Swift

let scanExpression = AWSDynamoDBScanExpression() scanExpression.limit = 20

dynamoDBObjectMapper.scan(Book.self, expression: scanExpression).continueWith(block: { (task:AWSTask<AnyObject>!) -> Any? in if let error = task.error as? NSError { print("The request failed. Error: \(error)") } else if let paginatedOutput = task.result { for book in paginatedOutput.items as! Book { // Do something with book. } } })

iOS - Objective-C

AWSDynamoDBScanExpression *scanExpression = [AWSDynamoDBScanExpression new];scanExpression.limit = @10;

[[dynamoDBObjectMapper scan:[Book class] expression:scanExpression]continueWithBlock:^id(AWSTask *task) { if (task.error) { NSLog(@"The request failed. Error: [%@]", task.error); } else { AWSDynamoDBPaginatedOutput *paginatedOutput = task.result; for (Book *book in paginatedOutput.items) { //Do something with book. } } return nil;}];

스캔 필터링

스캔의 결과는 AWSDynamoDBPaginatedOutput 객체로 반환됩니다. 반환되는 항목의 어레이는 items 속성에 있습니다.

scanExpression 메서드는 여러 가지 선택적 파라미터를 제공합니다. filterExpression 및expressionAttributeValues를 사용하여 사용자가 정의하는 속성 이름 및 조건에 대한 스캔 결과를 지정합니다. 파라미터 및 API에 대한 자세한 내용은 AWSDynamoDBScanExpression을 참조하십시오.

다음 코드는 Books 테이블을 스캔하여 가격이 50보다 작은 도서를 찾습니다.

iOS - Swift

let scanExpression = AWSDynamoDBScanExpression() scanExpression.limit = 10 scanExpression.filterExpression = "Price < :val" scanExpression.expressionAttributeValues = [":val": 50]

dynamoDBObjectMapper.scan(Book.self, expression: scanExpression).continueWith(block: { (task:AWSTask<AnyObject>!) -> Any? in if let error = task.error as? NSError { print("The request failed. Error: \(error)") } else if let paginatedOutput = task.result { for book in paginatedOutput.items as! Book { // Do something with book. }

117

Page 121: AWS Mobile Hub 개발자 안내서 - 개발자 안내서 · 2020-02-07 · iOS - Swift 1.iOS를 플랫폼으로 선택하고 다음을 선택합니다. 2.Download Cloud Config(클라우드

AWS Mobile Hub 개발자 안내서 개발자 안내서Android 및 iOS

} })

iOS - Objective-C

AWSDynamoDBScanExpression *scanExpression = [AWSDynamoDBScanExpression new];scanExpression.limit = @10;scanExpression.filterExpression = @"Price < :val";scanExpression.expressionAttributeValues = @{@":val":@50};

[[dynamoDBObjectMapper scan:[Book class] expression:scanExpression]continueWithBlock:^id(AWSTask *task) { if (task.error) { NSLog(@"The request failed. Error: [%@]", task.error); } else { AWSDynamoDBPaginatedOutput *paginatedOutput = task.result; for (Book *book in paginatedOutput.items) { //Do something with book. } } return nil; }];

projectionExpression` property to specify the attributes toretrieve from the ``Books 테이블을 사용해도 됩니다. 예를 들어, 앞의 코드 조각에scanExpression.projectionExpression = @"ISBN, Title, Price";를 추가하면 도서 객체에있는 해당 3가지 속성만 검색됩니다. 도서 객체에 있는 Author 속성은 항상 nil입니다.

쿼리 수행

쿼리 API를 사용하면 테이블이나 보조 인덱스를 쿼리할 수 있습니다. query:expression: 메서드에는 결과 객체의 클래스 및 AWSDynamoDBQueryExpression의 인스턴스라는 두 가지 파라미터가 있습니다.

인덱스를 쿼리하려면 indexName 인덱스도 지정해야 합니다. 다양한 hashKeyAttribute를 사용하여 글로벌 보조 인덱스를 쿼리하는 경우 hashKey를 지정해야 합니다. 테이블 또는 인덱스에 범위 키가 있는 경우범위 키 값과 조건을 제공하여 결과를 구체화하도록 선택할 수 있습니다.

다음 예제에서는 Books 인덱스 테이블을 쿼리하여 저자가 "John Smith"이며 가격이 50 미만인 도서를 모두찾는 방법을 보여줍니다.

iOS - Swift

let queryExpression = AWSDynamoDBQueryExpression() queryExpression.indexName = "Author-Price-index"

queryExpression.keyConditionExpression = @"Author = :authorName AND Price < :val"; queryExpression.expressionAttributeValues = @{@":authorName": @"John Smith", @":val": @50};

dynamoDBObjectMapper.query(Book.self, expression: queryExpression).continueWith(block: { (task:AWSTask<AnyObject>!) -> Any? in if let error = task.error as? NSError { print("The request failed. Error: \(error)") } else if let paginatedOutput = task.result { for book in paginateOutput.items as! Book { // Do something with book. } } return nil

118

Page 122: AWS Mobile Hub 개발자 안내서 - 개발자 안내서 · 2020-02-07 · iOS - Swift 1.iOS를 플랫폼으로 선택하고 다음을 선택합니다. 2.Download Cloud Config(클라우드

AWS Mobile Hub 개발자 안내서 개발자 안내서Android 및 iOS

})

iOS - Objective-C

AWSDynamoDBQueryExpression *queryExpression = [AWSDynamoDBQueryExpression new];

queryExpression.indexName = @"Author-Price-index";

queryExpression.keyConditionExpression = @"Author = :authorName AND Price < :val";

queryExpression.expressionAttributeValues = @{@":authorName": @"John Smith", @":val":@50};

[[dynamoDBObjectMapper query:[Book class] expression:queryExpression]continueWithBlock:^id(AWSTask *task) { if (task.error) { NSLog(@"The request failed. Error: [%@]", task.error); } else { AWSDynamoDBPaginatedOutput *paginatedOutput = task.result; for (Book *book in paginatedOutput.items) { //Do something with book. } } return nil; }];

앞의 예제에서, indexName은 인덱스를 쿼리하는 방법을 보여주기 위해 지정되었습니다. 쿼리 표현식은 keyConditionExpression을 사용하여 지정되었으며, 표현식에 사용된 값은expressionAttributeValues를 사용하여 지정되었습니다.

filterExpression에 projectionExpression 및 AWSDynamoDBQueryExpression을 제공할 수도있습니다. 이 구문은 스캔 작업에서 사용된 것과 동일합니다.

자세한 내용은 AWSDynamoDBQueryExpression을 참조하십시오.

AWSDynamoDBModel을 AWSDynamoDBObjectModel로 마이그레이션

SDK 버전 2.0.16부터, AWSDynamoDBModel 매핑 클래스는 더 이상 사용되지 않으며AWSDynamoDBObjectModel로 대체됩니다. 더 이상 사용되지 않는 AWSDynamoDBModel에서는NSArray를 사용하여 다중 값 형식(String Set, Number Set 및 Binary Set)을 표현했으므로Boolean, Map 또는 List 형식은 지원하지 않았습니다. 새로운 AWSDynamoDBObjectModel에서는 다중값 형식에 NSSet을 사용하며 Boolean, Map 및 List를 지원합니다. Boolean 형식의 경우, NSNumber를사용거나 바로 가기 [NSNumber numberWithBool:YES] 및 @YES를 사용하여 @NO를 생성하십시오. Map형식의 경우 NSDictionary를 사용하여 생성하십시오. List 형식의 경우 NSArray를 사용하여 생성하십시오.

추가 리소스

• Amazon DynamoDB Developer Guide• Amazon DynamoDB API Reference

iOS: Amazon DynamoDB 하위 수준 클라이언트

다음 참조 콘텐츠는 iOS 및 Android용 AWS Mobile SDK를 사용해 구성된 기존 앱에만 적용됩니다. 새 모바일 또는 웹 앱을 빌드하거나 기존 앱에 클라우드 기능을 추가하고 있다면 대신 Amplify Framework 웹사이트를 방문하십시오. iOS 및 Android용 AWS Mobile SDK의 설명서는 Amplify Framework의 일부로 제공됩니다.

119

Page 123: AWS Mobile Hub 개발자 안내서 - 개발자 안내서 · 2020-02-07 · iOS - Swift 1.iOS를 플랫폼으로 선택하고 다음을 선택합니다. 2.Download Cloud Config(클라우드

AWS Mobile Hub 개발자 안내서 개발자 안내서Android 및 iOS

주제• 개요 (p. 13)• 설정 (p. 111)• 하위 수준 클라이언트를 사용한 조건부 쓰기 (p. 120)• 하위 수준 클라이언트를 사용한 일괄 작업 (p. 122)• 추가 리소스 (p. 119)

개요

Amazon DynamoDB는 속도가 빠르고 확장성과 가용성이 뛰어나며 비용 효과적인 비관계형 데이터베이스서비스입니다. Amazon DynamoDB는 기존 데이터 스토리지에서의 확장성 제한을 없애면서도 낮은 지연 시간과 예측 가능한 성능을 유지합니다.

iOS용 AWS Mobile SDK는 Amazon DynamoDB 작업을 위한 하위 수준 및 상위 수준 라이브러리를 모두 제공합니다.

이 단원에 설명된 하위 수준 클라이언트를 사용하면 NoSQL 및 다른 비관계형 데이터 설계에 유용한Amazon DynamoDB 테이블에 대한 직접 액세스와 같은 작업을 수행할 수 있습니다. 하위 수준 클라이언트는 또한 조건 데이터 쓰기를 지원하여 동시 쓰기 충돌 및 일괄 데이터 쓰기를 완화해 줍니다.

상위 수준 라이브러리에는 dynamodb-object-mapper가 포함되어 있어서 Amazon Dynamo 테이블을 액세스하고 조작하는 데 필요한 클라이언트 측 클래스를 매핑하도록 해줍니다.

설정

프로젝트에서 iOS TransferUtility용 AWS SDK 유틸리티를 사용하도록 설정하려면 다음 단계를 수행하십시오.

1. SDK, 자격 증명 및 서비스 설치

새 앱에서 하위 수준의 DynamoDB 모바일 클라이언트를 사용하려면 시작하기 (p. 3)에 설명된 단계에따라 iOS용 AWS Mobile SDK를 설치합니다.

2. 기존 Amazon DynamoDB 테이블 생성 또는 사용

<dynamodb-setup-for-ios-legacy>의 단계에 따라 테이블을 생성합니다.

3. AWSDynamoDB API 가져오기

프로젝트에 다음 가져오기 문을 추가합니다.

iOS - Swift

import AWSDynamoDB

iOS - Objective-C

#import <AWSDynamoDB/AWSDynamoDB.h>

하위 수준 클라이언트를 사용한 조건부 쓰기

다중 사용자 환경에서는 여러 클라이언트가 동일 항목에 액세스하여 속성 값을 동시에 수정하는 상황이 발생할 수 있습니다. 클라이언트가 데이터 항목에 대한 쓰기를 조정하는 데 도움이 되도록 Amazon DynamoDB하위 수준 클라이언트는 PutItem, DeleteItem 및 UpdateItem 작업에 대해 조건부 쓰기를 지원합니다. 조건부쓰기를 사용하면 항목 속성이 하나 이상의 기대 조건을 충족하는 경우에만 작업이 성공합니다. 그렇지 않으면 오류가 반환됩니다.

다음 예제에서는 항목의 Books 속성 값이 Price인 경우 999 테이블의 항목 가격이 업데이트됩니다.

120

Page 124: AWS Mobile Hub 개발자 안내서 - 개발자 안내서 · 2020-02-07 · iOS - Swift 1.iOS를 플랫폼으로 선택하고 다음을 선택합니다. 2.Download Cloud Config(클라우드

AWS Mobile Hub 개발자 안내서 개발자 안내서Android 및 iOS

iOS - Swift

Amazon DynamoDB = AWSDynamoDB.default() let updateInput = AWSDynamoDBUpdateItemInput()

let hashKeyValue = AWSDynamoDBAttributeValue() hashKeyValue?.s = "4567890123"

updateInput?.tableName = "Books" updateInput?.key = ["ISBN": hashKeyValue!]

let oldPrice = AWSDynamoDBAttributeValue() oldPrice?.n = "999"

let expectedValue = AWSDynamoDBExpectedAttributeValue() expectedValue?.value = oldPrice

let newPrice = AWSDynamoDBAttributeValue() newPrice?.n = "1199"

let valueUpdate = AWSDynamoDBAttributeValueUpdate() valueUpdate?.value = newPrice valueUpdate?.action = .put

updateInput?.attributeUpdates = ["Price": valueUpdate!] updateInput?.expected = ["Price": expectedValue!] updateInput?.returnValues = .updatedNew

Amazon DynamoDB.updateItem(updateInput!).continueWith { (task:AWSTask<AWSDynamoDBUpdateItemOutput>) -> Any? in if let error = task.error as? NSError { print("The request failed. Error: \(error)") return nil }

// Do something with task.result

return nil }

iOS - Objective-C

AWSDynamoDB *dynamoDB = [AWSDynamoDB defaultDynamoDB];AWSDynamoDBUpdateItemInput *updateInput = [AWSDynamoDBUpdateItemInput new];

AWSDynamoDBAttributeValue *hashKeyValue = [AWSDynamoDBAttributeValue new];hashKeyValue.S = @"4567890123";

updateInput.tableName = @"Books";updateInput.key = @{ @"ISBN" : hashKeyValue };

AWSDynamoDBAttributeValue *oldPrice = [AWSDynamoDBAttributeValue new];oldPrice.N = @"999";

AWSDynamoDBExpectedAttributeValue *expectedValue = [AWSDynamoDBExpectedAttributeValue new];expectedValue.value = oldPrice;

AWSDynamoDBAttributeValue *newPrice = [AWSDynamoDBAttributeValue new];newPrice.N = @"1199";

AWSDynamoDBAttributeValueUpdate *valueUpdate = [AWSDynamoDBAttributeValueUpdate new];valueUpdate.value = newPrice;valueUpdate.action = AWSDynamoDBAttributeActionPut;

121

Page 125: AWS Mobile Hub 개발자 안내서 - 개발자 안내서 · 2020-02-07 · iOS - Swift 1.iOS를 플랫폼으로 선택하고 다음을 선택합니다. 2.Download Cloud Config(클라우드

AWS Mobile Hub 개발자 안내서 개발자 안내서Android 및 iOS

updateInput.attributeUpdates = @{@"Price": valueUpdate};updateInput.expected = @{@"Price": expectedValue};updateInput.returnValues = AWSDynamoDBReturnValueUpdatedNew;

[[dynamoDB updateItem:updateInput] continueWithBlock:^id(AWSTask *task) { if (task.error) { NSLog(@"The request failed. Error: [%@]", task.error); } else { //Do something with task.result. } return nil; }];

조건부 쓰기는 idempotent 방식입니다. 다시 말해서 조건부 쓰기 요청이 여러 번 발생하는 경우, 요청 내용이바뀌지 않는 한, 첫 번째 인스턴스에만 업데이트가 수행됩니다. 앞의 예제에서, 동일한 요청을 두 번째 보내면 첫 번째 업데이트 이후 예상되는 조건이 만족되지 않으므로 ConditionalCheckFailedException이 발생합니다.

하위 수준 클라이언트를 사용한 일괄 작업

Amazon DynamoDB 하위 수준 클라이언트는 데이터베이스에 항목을 넣고 데이터베이스로부터 항목을 삭제하는 일괄 쓰기 작업을 제공합니다. 일괄 가져오기 작업을 사용하여 하나 이상의 테이블에서 하나 이상의 항목 속성을 반환할 수도 있습니다.

다음 예제에서는 일괄 쓰기 작업을 보여줍니다.

iOS - Swift

Amazon DynamoDB = AWSDynamoDB.default()

//Write Request 1 let hashValue1 = AWSDynamoDBAttributeValue() hashValue1?.s = "3210987654" let otherValue1 = AWSDynamoDBAttributeValue() otherValue1?.s = "Some Title"

let writeRequest = AWSDynamoDBWriteRequest() writeRequest?.putRequest = AWSDynamoDBPutRequest() writeRequest?.putRequest?.item = ["ISBN": hashValue1!, "Title": otherValue1!]

//Write Request 2 let hashValue2 = AWSDynamoDBAttributeValue() hashValue2?.s = "8901234567" let otherValue2 = AWSDynamoDBAttributeValue() otherValue2?.s = "Another Title"

let writeRequest2 = AWSDynamoDBWriteRequest() writeRequest2?.putRequest = AWSDynamoDBPutRequest() writeRequest2?.putRequest?.item = ["ISBN": hashValue2!, "Title": otherValue2!]

let batchWriteItemInput = AWSDynamoDBBatchWriteItemInput() batchWriteItemInput?.requestItems = ["Books": [writeRequest!, writeRequest2!]]

Amazon DynamoDB.batchWriteItem(batchWriteItemInput!).continueWith { (task:AWSTask<AWSDynamoDBBatchWriteItemOutput>) -> Any? in if let error = task.error as? NSError { print("The request failed. Error: \(error)") return nil }

// Do something with task.result

122

Page 126: AWS Mobile Hub 개발자 안내서 - 개발자 안내서 · 2020-02-07 · iOS - Swift 1.iOS를 플랫폼으로 선택하고 다음을 선택합니다. 2.Download Cloud Config(클라우드

AWS Mobile Hub 개발자 안내서 개발자 안내서Android 및 iOS

return nil }

iOS - Objective-C

AWSDynamoDB *dynamoDB = [AWSDynamoDB defaultDynamoDB];

//Write Request 1AWSDynamoDBAttributeValue *hashValue1 = [AWSDynamoDBAttributeValue new];hashValue1.S = @"3210987654";AWSDynamoDBAttributeValue *otherValue1 = [AWSDynamoDBAttributeValue new];otherValue1.S = @"Some Title";

AWSDynamoDBWriteRequest *writeRequest = [AWSDynamoDBWriteRequest new];writeRequest.putRequest = [AWSDynamoDBPutRequest new];writeRequest.putRequest.item = @{ @"ISBN" : hashValue1, @"Title" : otherValue1 };

//Write Request 2AWSDynamoDBAttributeValue *hashValue2 = [AWSDynamoDBAttributeValue new];hashValue2.S = @"8901234567";AWSDynamoDBAttributeValue *otherValue2 = [AWSDynamoDBAttributeValue new];otherValue2.S = @"Another Title";

AWSDynamoDBWriteRequest *writeRequest2 = [AWSDynamoDBWriteRequest new];writeRequest2.putRequest = [AWSDynamoDBPutRequest new];writeRequest2.putRequest.item = @{ @"ISBN" : hashValue2, @"Title" : otherValue2 };

AWSDynamoDBBatchWriteItemInput *batchWriteItemInput = [AWSDynamoDBBatchWriteItemInput new];batchWriteItemInput.requestItems = @{@"Books": @[writeRequest,writeRequest2]};

[[dynamoDB batchWriteItem:batchWriteItemInput] continueWithBlock:^id(AWSTask *task) { if (task.error) { NSLog(@"The request failed. Error: [%@]", task.error); } else { //Do something with task.result. } return nil;}];

추가 리소스

• Amazon DynamoDB Developer Guide• Amazon DynamoDB API Reference

방법: 서버리스 코드(AWS Lambda)

다음 참조 콘텐츠는 iOS 및 Android용 AWS Mobile SDK를 사용해 구성된 기존 앱에만 적용됩니다. 새 모바일 또는 웹 앱을 빌드하거나 기존 앱에 클라우드 기능을 추가하고 있다면 대신 Amplify Framework 웹사이트를 방문하십시오. iOS 및 Android용 AWS Mobile SDK의 설명서는 Amplify Framework의 일부로 제공됩니다.

123

Page 127: AWS Mobile Hub 개발자 안내서 - 개발자 안내서 · 2020-02-07 · iOS - Swift 1.iOS를 플랫폼으로 선택하고 다음을 선택합니다. 2.Download Cloud Config(클라우드

AWS Mobile Hub 개발자 안내서 개발자 안내서Android 및 iOS

이 섹션에서는 AWS Lambda 함수를 Android 및 iOS 앱에 통합하기 위한 절차에 대해 설명합니다.

주제• Android: AWS Lambda로 온디맨드 코드 실행 (p. 124)• iOS: AWS Lambda로 온디맨드 코드 실행 (p. 129)

Android: AWS Lambda로 온디맨드 코드 실행

다음 참조 콘텐츠는 iOS 및 Android용 AWS Mobile SDK를 사용해 구성된 기존 앱에만 적용됩니다. 새 모바일 또는 웹 앱을 빌드하거나 기존 앱에 클라우드 기능을 추가하고 있다면 대신 Amplify Framework 웹사이트를 방문하십시오. iOS 및 Android용 AWS Mobile SDK의 설명서는 Amplify Framework의 일부로 제공됩니다.

개요

AWS Lambda는 이벤트에 대한 응답으로 코드를 실행하고, 자동으로 컴퓨팅 리소스를 관리하여 새로운 정보에 신속하게 대응하는 애플리케이션을 쉽게 개발할 수 있도록 지원하는 컴퓨팅 서비스입니다. Android용AWS Mobile SDK를 사용하면 Android 모바일 앱에서 Lambda 함수를 호출할 수 있습니다.

이 자습서에서는 앱에 AWS Lambda를 통합하는 방법을 설명합니다.

설정

사전 조건

이 자습서를 시작하기 전에 Android용 AWS Mobile SDK를 앱에 추가하십시오.

AWS 콘솔에서 Lambda 함수 생성

이 자습서에서는 입력을 반환하는 단순 "echo" 함수를 사용하겠습니다. AWS Lambda 시작하기에 설명된 단계에 따라 이 함수의 코드를 아래 코드로 교체합니다.

exports.handler = function(event, context) { console.log("Received event"); context.succeed("Hello "+ event.firstName + "using " + context.clientContext.deviceManufacturer); }

IAM 권한 설정

기본 IAM 역할 정책은 사용자의 Amazon Mobile Analytics 및 Amazon Cognito Sync에 대한 액세스 권한을부여합니다. 애플리케이션에서 AWS Lambda를 사용하려면 애플리케이션과 사용자에게 AWS Lambda에대한 액세스를 허용하도록 IAM 역할 정책을 구성해야 합니다. 다음 단계의 IAM 정책을 사용하면 사용자가Amazon 리소스 이름(ARN)에 의해 식별되는 해당 AWS Lambda 함수에서 이 자습서에 표시된 작업을 수행할 수 있습니다. ARN을 찾으려면 Lambda 콘솔로 이동하여 함수 이름을 클릭합니다.

AWS Lambda에 대한 IAM 권한을 설정하려면:

1. IAM 콘솔로 이동하고 왼쪽 창에서 역할을 클릭합니다.2. 검색 상자에 자격 증명 풀 이름을 입력합니다. 인증된 사용자와 인증되지 않은 사용자에 대해 하나씩 2개

의 역할이 나열됩니다.3. 인증되지 않은 사용자의 역할을 클릭합니다(자격 증명 풀 이름에 unauth가 추가됨).4. 역할 정책 생성 버튼을 클릭하고 사용자 지정 정책을 선택한 다음, 선택 버튼을 클릭합니다.

124

Page 128: AWS Mobile Hub 개발자 안내서 - 개발자 안내서 · 2020-02-07 · iOS - Swift 1.iOS를 플랫폼으로 선택하고 다음을 선택합니다. 2.Download Cloud Config(클라우드

AWS Mobile Hub 개발자 안내서 개발자 안내서Android 및 iOS

5. 정책의 이름을 입력하고 다음 정책 문서에 붙여 넣어 Resource 값을 함수의 ARN으로 바꿉니다(ARN을보려면 AWS Lambda 콘솔에서 함수 이름 클릭).

{ "Statement": [{ "Effect": "Allow", "Action": [ "lambda:invokefunction" ], "Resource": [ ”arn:aws:lambda:us-west-2:012345678901:function:yourFunctionName” ] }]}

1. 설명문 추가 버튼을 클릭하고 나서 다음 단계 버튼을 클릭합니다. 이 마법사는 생성한 구성을 보여 줍니다.

2. 정책 적용 버튼을 클릭합니다.

IAM 정책에 대한 자세한 내용은 IAM 설명서를 참조하십시오.

Android 매니페스트에서 권한 설정

AndroidManifest.xml에 다음 권한을 추가합니다.

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

LambdaInvokerFactory 초기화

Android - Java

초기화된 Amazon Cognito 자격 증명 공급자를 LambdaInvokerFactory 생성자로 전달합니다.

LambdaInvokerFactory factory = new LambdaInvokerFactory( myActivity.getApplicationContext(), REGION, credentialsProvider);

Android - Kotlin

초기화된 Amazon Cognito 자격 증명 공급자를 LambdaInvokerFactory 생성자로 전달합니다.

val factory = LambdaInvokerFactory(applicationContext, REGION, credentialsProvider)

데이터 유형 선언

Android - Java

Lambda 함수로 전달될 데이터를 포함할 Java 클래스를 선언합니다. 다음 클래스는 개인의 이름 및 성을포함하는 NameInfo 클래스를 정의합니다.

package com.amazonaws.demo.lambdainvoker;

/** * A simple POJO

125

Page 129: AWS Mobile Hub 개발자 안내서 - 개발자 안내서 · 2020-02-07 · iOS - Swift 1.iOS를 플랫폼으로 선택하고 다음을 선택합니다. 2.Download Cloud Config(클라우드

AWS Mobile Hub 개발자 안내서 개발자 안내서Android 및 iOS

*/public class NameInfo { private String firstName; private String lastName;

public NameInfo() {}

public NameInfo(String firstName, String lastName) { this.firstName = firstName; this.lastName = lastName; }

public String getFirstName() { return firstName; }

public void setFirstName(String firstName) { this.firstName = firstName; }

public String getLastName() { return lastName; }

public void setLastName(String lastName) { this.lastName = lastName; }}

Android - Kotlin

Lambda 함수로 전달될 데이터를 포함할 Kotlin 데이터 클래스를 선언합니다. 다음 클래스는 개인의 이름 및 성을 포함하는 NameInfo 클래스를 정의합니다.

package com.amazonaws.demo.lambdainvoker;

data class NameInfo(var firstName: String, var lastName: String)

Lambda 프록시 생성

각 Lambda 함수 호출마다 메서드 하나를 포함하는 인터페이스를 선언합니다. 인터페이스의 각 메서드는"@LambdaFunction" 주석으로 데코레이트해야 합니다. LambdaFunction 속성에는 3가지 선택적 파라미터를 사용할 수 있습니다.

• functionName에서는 메서드가 실행될 때 호출할 Lambda 함수의 이름을 지정할 수 있으며, 기본적으로메서드의 이름이 사용됩니다.

• logType는 invocationType이 "Event"로 설정될 때만 유효합니다. 설정된 경우 AWS Lambda는 x-amz-log-results 헤더에서 Lambda 함수에 의해 생성되는 로그 데이터의 마지막 4KB를 반환합니다.

• invocationType은 Lambda 함수의 호출 방식을 지정합니다. 다음 값 중 하나일 수 있습니다.• 이벤트: Lambda 함수를 비동기적으로 호출• RequestResponse: Lambda 함수를 비동기적으로 호출• DryRun: 실행하지 않고 Lambda 함수에 대한 액세스 확인 가능

다음 코드는 Lambda 프록시를 생성하는 방법을 보여줍니다.

Android - Java

package com.amazonaws.demo.lambdainvoker;

126

Page 130: AWS Mobile Hub 개발자 안내서 - 개발자 안내서 · 2020-02-07 · iOS - Swift 1.iOS를 플랫폼으로 선택하고 다음을 선택합니다. 2.Download Cloud Config(클라우드

AWS Mobile Hub 개발자 안내서 개발자 안내서Android 및 iOS

import com.amazonaws.mobileconnectors.lambdainvoker.LambdaFunction;

public interface MyInterface { /** * Invoke lambda function "echo". The function name is the method name */ @LambdaFunction String echo(NameInfo nameInfo)

/** * Invoke lambda function "echo". The functionName in the annotation * overrides the default which is the method name */ @LambdaFunction(functionName = "echo") void noEcho(NameInfo nameInfo)}

Android - Kotlin

package com.amazonaws.demo.lambdainvoker;

import com.amazonaws.mobileconnectors.lambdainvoker.LambdaFunction;

interface MyInterface { /** * Invoke lambda function "echo". The function name is the method name */ @LambdaFunction fun echo(nameInfo: NameInfo): String

/** * Invoke lambda function "echo". The functionName in the annotation * overrides the default which is the method name */ @LambdaFunction(functionName = "echo") fun noEcho(nameInfo: NameInfo): Unit}

Lambda 함수 호출Note

기본 스레드에서 Lambda 함수를 호출하지 마십시오. 이 경우에는 네트워크 호출이 발생하기 때문입니다.

다음 코드는 Cognito Caching Credentials Provider를 초기화하고 Lambda 함수를 호출하는 방법을 보여 줍니다. IDENTITY_POOL_ID의 값은 계정에 따라 다릅니다. 리전이 호출할 Lambda 함수와 동일한지 확인합니다.

Android - Java

// Create an instance of CognitoCachingCredentialsProviderCognitoCachingCredentialsProvider credentialsProvider = new CognitoCachingCredentialsProvider( myActivity.getApplicationContext(), IDENTITY_POOL_ID, Regions.YOUR_REGION);

// Create a LambdaInvokerFactory, to be used to instantiate the Lambda proxyLambdaInvokerFactory factory = new LambdaInvokerFactory( myActivity.getApplicationContext(),

127

Page 131: AWS Mobile Hub 개발자 안내서 - 개발자 안내서 · 2020-02-07 · iOS - Swift 1.iOS를 플랫폼으로 선택하고 다음을 선택합니다. 2.Download Cloud Config(클라우드

AWS Mobile Hub 개발자 안내서 개발자 안내서Android 및 iOS

REGION, credentialsProvider);

// Create the Lambda proxy object with default Json data binder.// You can provide your own data binder by implementing// LambdaDataBinderMyInterface myInterface = factory.build(MyInterface.class);

// Create an instance of the POJO to transfer dataNameInfo nameInfo = new NameInfo("John", "Doe");

// The Lambda function invocation results in a network call// Make sure it is not called from the main threadnew AsyncTask<NameInfo, Void, String>() { @Override protected String doInBackground(NameInfo... params) { // invoke "echo" method. In case it fails, it will throw a // LambdaFunctionException. try { return myInterface.echo(params[0]); } catch (LambdaFunctionException lfe) { Log.e(TAG, "Failed to invoke echo", lfe); return null; } }

@Override protected void onPostExecute(String result) { if (result == null) { return; }

// Do a toast Toast.makeText(MainActivity.this, result, Toast.LENGTH_LONG).show(); }}.execute(nameInfo);

Android - Kotlin

// Create an instance of CognitoCachingCredentialsProviderval credentialsProvider = CognitoCachingCredentialsProvider( [email protected], IDENTITY_POOL_ID, Regions.IDENTITY_POOL_REGION)

// Create a LambdaInvokerFactory, to be used to instantiate the Lambda proxyval factory = LambdaInvokerFactory( [email protected], LAMBDA_REGION, credentialsProvider)

// Create the Lambda proxy object with default Json data binder.// You can provide your own data binder by implementing// LambdaDataBinderval myInterface = factory.build(MyInterface::class.java);

// Create an instance of the POJO to transfer dataval nameInfo = NameInfo("John", "Doe");

// The Lambda function invocation results in a network call// Make sure it is not called from the main threadthread(start = true) { // Invoke "echo" method. In case it fails, it will throw an exception try { val response: String = myInterface.echo(nameInfo)

128

Page 132: AWS Mobile Hub 개발자 안내서 - 개발자 안내서 · 2020-02-07 · iOS - Swift 1.iOS를 플랫폼으로 선택하고 다음을 선택합니다. 2.Download Cloud Config(클라우드

AWS Mobile Hub 개발자 안내서 개발자 안내서Android 및 iOS

runOnUiThread { Toast.makeText(this@MainActivity, result, Toast.LENGTH_LONG).show() } } catch (ex: LambdaFunctionException) { Log.e(TAG, "Lambda execution failed") }}

Lambda 함수가 호출될 때마다 "Hello John using <device>"라는 텍스트를 표시하는 애플리케이션 알림이 나타납니다.

클라우드 API 호출을 처리할 Lambda 함수를 설정 및 사용하는 간소화된 단계를 통해 시작하려면 AWSMobile 클라우드 로직 추가 (p. 75)를 참조하십시오.

iOS: AWS Lambda로 온디맨드 코드 실행

다음 참조 콘텐츠는 iOS 및 Android용 AWS Mobile SDK를 사용해 구성된 기존 앱에만 적용됩니다. 새 모바일 또는 웹 앱을 빌드하거나 기존 앱에 클라우드 기능을 추가하고 있다면 대신 Amplify Framework 웹사이트를 방문하십시오. iOS 및 Android용 AWS Mobile SDK의 설명서는 Amplify Framework의 일부로 제공됩니다.

주제• 개요 (p. 13)• 설정 (p. 111)• AWS Lambda 함수 호출 (p. 130)• 클라이언트 컨텍스트 (p. 133)• 자격 증명 컨텍스트 (p. 134)

개요

AWS Lambda 서비스는 인프라를 프로비저닝하거나 관리할 필요 없이 모바일 앱에 사용할 확장성, 보안성및 가용성이 뛰어난 백엔드를 손쉽게 생성할 수 있습니다.

iOS 앱에서 직접 호출할 수 있는 보안 논리 함수를 클라우드에 생성할 수 있습니다. C#, Node.js, Python 또는 Java로 작성된 AWS Lambda 코드는 독립형 논리를 구현하고, 앱을 AWS 서비스 범위로 확장하고, AWS외부의 서비스 및 애플리케이션에 연결할 수 있습니다.

AWS Lambda 함수의 가용성 및 비용은 수신되는 트래픽 양에 따라 자동으로 규모가 조정됩니다. 함수는Amazon API Gateway를 통해 iOS 앱에서도 액세스할 수 있으며, 글로벌 프로비저닝, 엔터프라이즈급 모니터링, 조절 및 액세스 제어와 같은 기능을 제공합니다.

설정

이 단원에서는 AWS Mobile SDK for iOS를 사용하여 AWS Lambda를 시작하는 방법에 대한 단계별 지침을제공합니다.

1. SDK 설치

iOS용 AWS SDK를 프로젝트에 추가하고 필요한 API를 가져옵니다.2. 자격 증명 구성

Amazon Cognito를 사용하여 앱의 AWS 리소스에 대한 액세스 권한을 사용자에게 부여하는 AWS ID 및자격 증명을 생성하려면, 사용자 로그인 추가 (p. 91)에 설명되어 있는 단계를 따르십시오.

3. Lambda 함수 생성 및 구성

129

Page 133: AWS Mobile Hub 개발자 안내서 - 개발자 안내서 · 2020-02-07 · iOS - Swift 1.iOS를 플랫폼으로 선택하고 다음을 선택합니다. 2.Download Cloud Config(클라우드

AWS Mobile Hub 개발자 안내서 개발자 안내서Android 및 iOS

a. AWS Lambda 콘솔에 로그인합니다.b. Create a Lambda function(Lambda 함수 생성)을 선택합니다.c. Blank Function(빈 함수) 템플릿을 선택합니다.

다른 AWS 서비스에 연결되는 함수 템플릿이 여러 개 있으므로 주의하십시오.d. [Next]를 선택합니다.

콘솔에서 다른 AWS 서비스로부터 함수에 대한 트리거를 구성할 수 있지만, 이 예제에서는 이를 사용하지 않습니다.

e. 이름을 입력하고 런타임 언어로 Node.js를 선택합니다.f. Lambda function handler and role(Lambda 함수 핸들러 및 역할)에서 Create new role from template(s)

(템플릿에서 새 역할 생성)를 선택합니다. 역할 이름을 입력합니다. Simple Microservice permissions라는 이름의 정책 템플릿을 선택합니다.

g. [Next]를 선택합니다.h. [Create function]을 선택합니다.

AWS Lambda 함수 호출

SDK를 사용하면 AWSLambdaInvoker 클래스를 사용하여 iOS 모바일 앱에서 AWS Lambda 함수를 호출할수 있습니다. 이 SDK에서 호출된 AWS Lambda 함수는 클라이언트 및 자격 증명 컨텍스트 객체를 통해 디바이스 및 최종 사용자 자격 증명에 대한 데이터를 받습니다. 이러한 컨텍스트를 사용하여 풍부하고 개인화된 앱 환경을 생성하는 방법에 대한 자세한 내용은 클라이언트 컨텍스트 (p. 133) 및 자격 증명 컨텍스트 (p. 134)를 참조하십시오.

AWS Lambda API 가져오기

lambdainvoker API를 사용하려면 다음 가져오기 문을 사용합니다.

iOS - Swift

import AWSLambda

Objective C

#import <AWSLambda/AWSLambda.h>

lambdaInvoker 호출

AWSLambdaInvoker는 AWS Lambda에 대한 상위 수준 추상화를 제공합니다. invokeFunctionJSONObject가 호출되면, JSON 객체가 JSON 데이터에 직렬화되고 AWS Lambda 서비스로 전송됩니다.AWS Lambda는 JSON 객체에 역직렬화되는 JSON 인코딩 응답을 반환합니다.

유효한 JSON 객체에는 다음 속성이 있어야 합니다.

• 모든 객체가 문자열, 숫자, 어레이, 딕셔너리 또는 널 객체의 인스턴스입니다.• 모든 딕셔너리 키가 문자열 객체의 인스턴스입니다.• 숫자가 NaN 또는 infinity가 아닙니다.

다음은 유효한 요청의 예입니다.

iOS - Swift

let lambdaInvoker = AWSLambdaInvoker.default()

130

Page 134: AWS Mobile Hub 개발자 안내서 - 개발자 안내서 · 2020-02-07 · iOS - Swift 1.iOS를 플랫폼으로 선택하고 다음을 선택합니다. 2.Download Cloud Config(클라우드

AWS Mobile Hub 개발자 안내서 개발자 안내서Android 및 iOS

let jsonObject: [String: Any] = ["key1" : "value1", "key2" : 2 , "key3" : [1, 2], "isError" : false]

lambdaInvoker.invokeFunction("myFunction", jsonObject: jsonObject) .continueWith(block: {(task:AWSTask<AnyObject>) -> Any? in if( task.error != nil) { print("Error: \(task.error!)") return nil }

// Handle response in task.result return nil})

Objective C

AWSLambdaInvoker *lambdaInvoker = [AWSLambdaInvoker defaultLambdaInvoker];

[[lambdaInvoker invokeFunction:@"myFunction" JSONObject:@{@"key1" : @"value1", @"key2" : @2, @"key3" : [NSNull null], @"key4" : @[@1, @"2"], @"isError" : @NO}] continueWithBlock:^id(AWSTask *task) { // Handle response return nil;}];

함수 반환 사용

실행이 성공한 경우, task.result에 JSON 객체가 포함되어 있습니다. 예를 들어, myFunctions가 딕셔너리를반환하는 경우, 다음과 같이 결과를 딕셔너리 객체에 전달할 수 있습니다.

iOS - Swift

if let JSONDictionary = task.result as? NSDictionary { print("Result: \(JSONDictionary)") print("resultKey: \(JSONDictionary["resultKey"])")}

Objective C

if (task.result) { NSLog(@"Result: %@", task.result); NSDictionary *JSONObject = task.result; NSLog(@"result: %@", JSONObject[@"resultKey"]);}

서비스 실행 오류 처리

AWS Lambda 서비스 실행에 실패한 경우, task.error에 NSError가 AWSLambdaErrorDomain 도메인 및 다음오류 코드와 함께 표시될 수 있습니다.

• AWSLambdaErrorUnknown• AWSLambdaErrorService• AWSLambdaErrorResourceNotFound

131

Page 135: AWS Mobile Hub 개발자 안내서 - 개발자 안내서 · 2020-02-07 · iOS - Swift 1.iOS를 플랫폼으로 선택하고 다음을 선택합니다. 2.Download Cloud Config(클라우드

AWS Mobile Hub 개발자 안내서 개발자 안내서Android 및 iOS

• AWSLambdaErrorInvalidParameterValue

함수 실행에 실패한 경우, task.error에 NSError가 AWSLambdaInvokerErrorDomain 도메인 및 다음 오류 코드와 함께 표시될 수 있습니다.

• AWSLambdaInvokerErrorTypeUnknown• AWSLambdaInvokerErrorTypeFunctionError

AWSLambdaInvokerErrorTypeFunctionError 오류 코드가 반환되는 경우, error.userInfo에 AWS Lambda 함수의 함수 오류가 AWSLambdaInvokerFunctionErrorKey 키와 함께 표시될 수 있습니다.

다음 코드는 오류 처리를 보여줍니다.

iOS - Swift

if let error = task.error as? NSError { if (error.domain == AWSLambdaInvokerErrorDomain) && (AWSLambdaInvokerErrorType.functionError == AWSLambdaInvokerErrorType(rawValue: error.code)) { print("Function error: \(error.userInfo[AWSLambdaInvokerFunctionErrorKey])") } else { print("Error: \(error)") } return nil}

Objective C

if (task.error) { NSLog(@"Error: %@", task.error); if ([task.error.domain isEqualToString:AWSLambdaInvokerErrorDomain] && task.error.code == AWSLambdaInvokerErrorTypeFunctionError) { NSLog(@"Function error: %@", task.error.userInfo[AWSLambdaInvokerFunctionErrorKey]); }}

포괄적인 예제

다음 코드는 AWS Lambda 호출을 수행하고 반환 및 오류를 모두 함께 처리하는 방법을 보여줍니다.

iOS - Swift

let lambdaInvoker = AWSLambdaInvoker.default()

let jsonObject: [String: Any] = ["key1" : "value1", "key2" : 2, "key3" : [1, 2], "isError" : false]

lambdaInvoker.invokeFunction("myFunction", jsonObject: jsonObject).continueWith(block: {(task:AWSTask<AnyObject>) -> Any? in if let error = task.error as? NSError { if (error.domain == AWSLambdaInvokerErrorDomain) && (AWSLambdaInvokerErrorType.functionError == AWSLambdaInvokerErrorType(rawValue: error.code) { print("Function error: \(error.userInfo[AWSLambdaInvokerFunctionErrorKey])")

132

Page 136: AWS Mobile Hub 개발자 안내서 - 개발자 안내서 · 2020-02-07 · iOS - Swift 1.iOS를 플랫폼으로 선택하고 다음을 선택합니다. 2.Download Cloud Config(클라우드

AWS Mobile Hub 개발자 안내서 개발자 안내서Android 및 iOS

} else { print("Error: \(error)") } return nil }

// Handle response in task.result if let JSONDictionary = task.result as? NSDictionary { print("Result: \(JSONDictionary)") print("resultKey: \(JSONDictionary["resultKey"])") } return nil})

Objective C

AWSLambdaInvoker *lambdaInvoker = [AWSLambdaInvoker defaultLambdaInvoker];

[[lambdaInvoker invokeFunction:@"myFunction" JSONObject:@{@"key1" : @"value1", @"key2" : @2, @"key3" : [NSNull null], @"key4" : @[@1, @"2"], @"isError" : @NO}] continueWithBlock:^id(AWSTask *task) { if (task.error) { NSLog(@"Error: %@", task.error); if ([task.error.domain isEqualToString:AWSLambdaInvokerErrorDomain] && task.error.code == AWSLambdaInvokerErrorTypeFunctionError) { NSLog(@"Function error: %@", task.error.userInfo[AWSLambdaInvokerFunctionErrorKey]); } } if (task.result) { NSLog(@"Result: %@", task.result); NSDictionary *JSONObject = task.result; NSLog(@"result: %@", JSONObject[@"resultKey"]); } return nil;}];

클라이언트 컨텍스트

이 SDK를 사용하여 AWS Lambda를 호출하면 ClientContext 클래스를 사용하여 호출 디바이스 및 앱에 대한데이터가 함수에 제공됩니다.

Lambda 함수에 있는 클라이언트 컨텍스트에 액세스하는 방법은 다음과 같습니다.

JavaScript

exports.handler = function(event, context) { console.log("installation_id = " + context.clientContext.client.installation_id); console.log("app_version_code = " + context.clientContext.client.app_version_code); console.log("app_version_name = " + context.clientContext.client.app_version_name); console.log("app_package_name = " + context.clientContext.client.app_package_name); console.log("app_title = " + context.clientContext.client.app_title); console.log("platform_version = " + context.clientContext.env.platform_version); console.log("platform = " + context.clientContext.env.platform); console.log("make = " + context.clientContext.env.make); console.log("model = " + context.clientContext.env.model); console.log("locale = " + context.clientContext.env.locale);

context.succeed("Your platform is " + context.clientContext.env.platform;

133

Page 137: AWS Mobile Hub 개발자 안내서 - 개발자 안내서 · 2020-02-07 · iOS - Swift 1.iOS를 플랫폼으로 선택하고 다음을 선택합니다. 2.Download Cloud Config(클라우드

AWS Mobile Hub 개발자 안내서 개발자 안내서Android 및 iOS

}

ClientContext에는 다음 필드가 들어 있습니다.

client.installation_id

앱이 처음 실행될 때 생성된 자동 생성 UUID입니다. 디바이스의 키 체인에 저장됩니다. 키 체인이 지워지는 경우에는 새로운 설치 ID가 생성됩니다.

client.app_version_code

CFBundleShortVersionStringclient.app_version_name

CFBundleVersionclient.app_package_name

CFBundleIdentifierclient.app_title

CFBundleDisplayNameenv.platform_version

systemVersionenv.platform

systemNameenv.make

"apple"로 하드 코딩됨env.model

디바이스의 모델env.locale

autoupdatingCurrentLocale의 localeIdentifier

자격 증명 컨텍스트

SDK의 IdentityContext 클래스는 Amazon Cognito 자격 증명을 통과하여 함수를 사용할 수 있는 최종 사용자의 AWS 자격 증명을 만듭니다. 자격 증명 ID에 액세스하는 방법은 다음과 같습니다.

JavaScript

exports.handler = function(event, context) { console.log("clientID = " + context.identity);

context.succeed("Your client ID is " + context.identity);}

Amazon Machine Learning을 사용하여 Machine Learning을 추가하는 방법

다음 참조 콘텐츠는 iOS 및 Android용 AWS Mobile SDK를 사용해 구성된 기존 앱에만 적용됩니다. 새 모바일 또는 웹 앱을 빌드하거나 기존 앱에 클라우드 기능을 추가하고 있다면 대신 Amplify Framework 웹사

134

Page 138: AWS Mobile Hub 개발자 안내서 - 개발자 안내서 · 2020-02-07 · iOS - Swift 1.iOS를 플랫폼으로 선택하고 다음을 선택합니다. 2.Download Cloud Config(클라우드

AWS Mobile Hub 개발자 안내서 개발자 안내서Android 및 iOS

이트를 방문하십시오. iOS 및 Android용 AWS Mobile SDK의 설명서는 Amplify Framework의 일부로 제공됩니다.

이 섹션에서는 Amazon Machine Learning을 Android 및 iOS 앱에 통합하기 위한 절차에 대해 설명합니다.

주제• Android: Amazon Machine Learning (p. 135)• iOS: Amazon Machine Learning (p. 137)

Android: Amazon Machine Learning

다음 참조 콘텐츠는 iOS 및 Android용 AWS Mobile SDK를 사용해 구성된 기존 앱에만 적용됩니다. 새 모바일 또는 웹 앱을 빌드하거나 기존 앱에 클라우드 기능을 추가하고 있다면 대신 Amplify Framework 웹사이트를 방문하십시오. iOS 및 Android용 AWS Mobile SDK의 설명서는 Amplify Framework의 일부로 제공됩니다.

Amazon Machine Learning(ML)은 모든 기술 수준의 개발자가 기계 학습 기술을 쉽게 사용할 수 있게 해주는서비스입니다. Android용 SDK는 사용자가 Amazon Machine Learning 서비스를 사용하여 인터페이스할 수있도록 설계된 간단한 상위 수준 클라이언트를 제공합니다. 클라이언트를 사용하면 Amazon ML의 실시간API를 호출하여 모델로부터 예측을 검색하고 예측에 대해 작업을 요청하고 수행하는 모바일 애플리케이션을 빌드할 수 있습니다. 또한 ML 모델에 대한 실시간 예측 엔드포인트 URL을 검색할 수도 있습니다.

설정

사전 조건

이 자습서를 시작하기 전에 Android용 SDK 설정 페이지의 모든 지침을 완료해야 합니다.

Amazon Machine Learning 리소스에 대한 액세스 권한 부여

애플리케이션에서 Amazon Machine Learning을 사용하려면 적절한 권한을 설정해야 합니다. 다음 IAM 정책은 사용자가 ARN에 의해 식별되는 두 개의 작업에 대해 이 자습서에 표시된 작업을 수행하도록 해줍니다.

{ "Statement": [{ "Effect": "Allow", "Action": [ "machinelearning:GetMLModel", "machinelearning:Predict" ], "Resource": "arn:aws:machinelearning:use-east-1:11122233444:mlmodel/example-model-id" }]}

이 정책은 Amazon Cognito 자격 증명 풀에 할당된 역할에 적용되어야 하지만, [Resource] 값을 올바른 계정ID 및 ML 모델 ID로 바꿔야 합니다. IAM 콘솔에서 정책을 적용할 수 있습니다. IAM 정책에 대한 자세한 내용은 IAM 소개를 참조하십시오.

가져오기 문 추가

다음 가져오기를 앱의 기본 활동에 추가합니다.

import com.amazonaws.services.machinelearning.*;

135

Page 139: AWS Mobile Hub 개발자 안내서 - 개발자 안내서 · 2020-02-07 · iOS - Swift 1.iOS를 플랫폼으로 선택하고 다음을 선택합니다. 2.Download Cloud Config(클라우드

AWS Mobile Hub 개발자 안내서 개발자 안내서Android 및 iOS

AmazonMachineLearningClient 초기화

초기화된 Amazon Cognito 자격 증명 공급자를 AmazonMachineLearningClient 생성자로 전달합니다.

Android - Java

AmazonMachineLearningClient client = new AmazonMachineLearningClient(credentialsProvider);

Android - Kotlin

val client = AmazonMachineLearningClient(credentialsProvider)

Amazon Machine Learning 클라이언트 생성

예측 요청 실행

예측을 호출하기 전에, 완료된 ML 모델 ID뿐만 아니라 해당 ML 모델 ID에 대해 생성된 실시간 엔드포인트도있는지 확인하십시오. 이러한 작업은 모바일 SDK에서는 수행할 수 없으며 Machine Learning 콘솔 또는 대체SDK를 사용해야 합니다. 이 ML을 실시간 예측에 사용할 수 있는지 확인합니다.

Android - Java

// Use a created model that has a created real-time endpoint String mlModelId = "example-model-id";

// Call GetMLModel to get the realtime endpoint URL GetMLModelRequest getMLModelRequest = new GetMLModelRequest(); getMLModelRequest.setMLModelId(mlModelId); GetMLModelResult mlModelResult = client.getMLModel(getMLModelRequest);

// Validate that the ML model is completed if (!mlModelResult.getStatus().equals(EntityStatus.COMPLETED.toString())) { System.out.println("ML Model is not completed: " + mlModelResult.getStatus()"); return; }

// Validate that the realtime endpoint is ready if (!mlModelResult.getEndpointInfo().getEndpointStatus().equals(RealtimeEndpointStatus.READY.toString())){ System.out.println("Realtime endpoint is not ready: " + mlModelResult.getEndpointInfo().getEndpointStatus()); return; }

Android - Kotlin

// Call GetMLModel to get the realtime endpoint URLval modelRequest = new GetMLModelRequest()modelRequest.mLModelID = "example-model-id"val modelResult = client.getMLModel(modelRequest);

// Validate that the ML model is completedif (modelResult.status != EntityStatus.COMPLETED.toString()) { Log.d(TAG, "ML Model is not completed: ${modelResult.status}"); return;}

136

Page 140: AWS Mobile Hub 개발자 안내서 - 개발자 안내서 · 2020-02-07 · iOS - Swift 1.iOS를 플랫폼으로 선택하고 다음을 선택합니다. 2.Download Cloud Config(클라우드

AWS Mobile Hub 개발자 안내서 개발자 안내서Android 및 iOS

// Validate that the realtime endpoint is readyif (modelResult.endpointInfo.endpointStatus != RealtimeEndpointStatus.READY.toString()) { Log.d(TAG, "Realtime endpoint is not ready: ${modelResult.endpointInfo.endpointStatus}"); return;}

실시간 엔드포인트가 준비되었으면 예측을 호출하기 시작할 수 있습니다. 단, 실시간 엔드포인트를PredictRequest로 통과시켜야 합니다.

Android - Java

// Create a Predict request with your ML model ID and the appropriate Record mappingPredictRequest predictRequest predictRequest = new PredictRequest();predictRequest.setMLModelId(mlModelId);

HashMap<String, String> record = new HashMap<String, String>();record.put("example attribute", "example value");

predictRequest.setRecord(record);predictRequest.setPredictEndpoint(mlModelResult.getEndpointInfo().getEndpointUrl());

// Call Predict and print out your predictionPredictResult predictResult = client.predict(predictRequest);Log.d(LOG_TAG. predictResult.getPrediction());

// Do something with the prediction// ...

Android - Kotlin

// Create a Predict request with your ML model ID and the appropriate Record mappingval predictRequest predictRequest = PredictRequest().apply { mLModelID = "example-model-id" record = mapOf("example attribute" to "example value") predictEndpoint = modelResult.endpointInfo.getEndpointUrl }

val predictResult = client.predict(predictRequest) Log.d(LOG_TAG, predictResult.prediction)

// Do something with the prediction // ...

추가 리소스

• 개발자 안내서• Service API Reference

iOS: Amazon Machine Learning

다음 참조 콘텐츠는 iOS 및 Android용 AWS Mobile SDK를 사용해 구성된 기존 앱에만 적용됩니다. 새 모바일 또는 웹 앱을 빌드하거나 기존 앱에 클라우드 기능을 추가하고 있다면 대신 Amplify Framework 웹사이트를 방문하십시오. iOS 및 Android용 AWS Mobile SDK의 설명서는 Amplify Framework의 일부로 제공됩니다.

137

Page 141: AWS Mobile Hub 개발자 안내서 - 개발자 안내서 · 2020-02-07 · iOS - Swift 1.iOS를 플랫폼으로 선택하고 다음을 선택합니다. 2.Download Cloud Config(클라우드

AWS Mobile Hub 개발자 안내서 개발자 안내서Android 및 iOS

Amazon Machine Learning(ML)은 모든 기술 수준의 개발자가 기계 학습 기술을 쉽게 사용할 수 있게 해주는서비스입니다. iOS용 SDK는 사용자가 Amazon Machine Learning 서비스를 사용하여 인터페이스할 수 있도록 설계된 간단한 상위 수준 클라이언트를 제공합니다. 클라이언트를 사용하면 Amazon ML의 실시간 API를호출하여 모델로부터 예측을 검색하고 예측에 대해 작업을 요청하고 수행하는 모바일 애플리케이션을 빌드할 수 있습니다. 또한 ML 모델에 대한 실시간 예측 엔드포인트 URL을 검색할 수도 있습니다.

Amazon Machine Learning 통합

Amazon Machine Learning 모바일 클라이언트를 사용하려면 iOS용 SDK를 앱에 통합하고 필요한 라이브러리를 가져와야 합니다. 이렇게 하려면 다음 단계를 따르십시오.

1. iOS용 SDK 설정에 설명된 대로 SDK를 다운로드하고 압축을 풉니다.2. 지침에서는 사용하려는 서비스의 헤더를 가져오도록 지시합니다. Amazon Machine Learning의 경우 다음

가져오기 작업이 필요합니다.

iOS - Swift

import AWSMachineLearning

iOS - Objective C

#import <AWSMachineLearning/AWSMachineLearning.h>

자격 증명 구성

Amazon Cognito를 사용하면 애플리케이션에 임시 AWS 자격 증명을 제공할 수 있습니다. 이러한 자격 증명을 사용해 앱이 AWS 리소스에 액세스할 수 있습니다. 자격 증명 공급자를 생성하려면 AWS 자격 증명 제공의 지침을 따릅니다.

애플리케이션에서 Amazon Machine Learning을 사용하려면 적절한 권한을 설정해야 합니다. 다음 IAM 정책은 사용자가 ARN에 의해 식별되는 두 개의 작업에 대해 이 자습서에 표시된 작업을 수행하도록 해줍니다.

{ "Statement": [{ "Effect": "Allow", "Action": [ "machinelearning:GetMLModel", "machinelearning:Predict" ], "Resource": "arn:aws:machinelearning:use-east-1:11122233444:mlmodel/example-model-id" }]}

이 정책은 Amazon Cognito 자격 증명 풀에 할당된 역할에 적용되어야 하지만, [Resource] 값을 올바른 계정ID 및 ML 모델 ID로 바꿔야 합니다. IAM 콘솔에서 정책을 적용할 수 있습니다. IAM 정책에 대한 자세한 내용은 IAM 소개를 참조하십시오.

Amazon Machine Learning 클라이언트 생성

필요한 라이브러리를 가져오고 자격 증명 객체가 준비되었으면 AWSMachineLearningGetMLModelInput을인스턴스화할 수 있습니다.

iOS - Swift

let getMlModelInput = AWSMachineLearningGetMLModelInput()

138

Page 142: AWS Mobile Hub 개발자 안내서 - 개발자 안내서 · 2020-02-07 · iOS - Swift 1.iOS를 플랫폼으로 선택하고 다음을 선택합니다. 2.Download Cloud Config(클라우드

AWS Mobile Hub 개발자 안내서 개발자 안내서Android 및 iOS

Objective C

AWSMachineLearningGetMLModelInput *getMLModelInput = [AWSMachineLearningGetMLModelInput new];

예측 요청 실행

예측을 호출하기 전에, 완료된 ML 모델 ID뿐만 아니라 해당 ML 모델 ID에 대해 생성된 실시간 엔드포인트도있는지 확인하십시오. 이러한 작업은 모바일 SDK에서는 수행할 수 없으며 Machine Learning 콘솔 또는 대체SDK를 사용해야 합니다. 이 ML을 실시간 예측에 사용할 수 있는지 확인합니다.

iOS - Swift

// Use a created model that has a created real-time endpointlet mlModelId = "example-model-id";// Call GetMLModel to get the realtime endpoint URLlet getMlModelInput = AWSMachineLearningGetMLModelInput()getMlModelInput!.mlModelId = mlModelId;

machineLearning.getMLModel(getMlModelInput!).continueOnSuccessWith { (task) -> Any? in if let getMLModelOutput = task.result {

if (getMLModelOutput.status != AWSMachineLearningEntityStatus.completed) { print("ML Model is not completed"); return nil; }

// Validate that the realtime endpoint is ready if (getMLModelOutput.endpointInfo!.endpointStatus != AWSMachineLearningRealtimeEndpointStatus.ready) { print("Realtime endpoint is not ready"); return nil; } }

return nil}

Objective C

AWSMachineLearning *MachineLearning = [AWSMachineLearning defaultMachineLearning];

// Use a created model that has a created real-time endpointNSString *MLModelId = @"example-model-id";

// Call GetMLModel to get the realtime endpoint URLAWSMachineLearningGetMLModelInput *getMLModelInput = [AWSMachineLearningGetMLModelInput new];getMLModelInput.MLModelId = MLModelId;

[[[MachineLearning getMLModel:getMLModelInput] continueWithSuccessBlock:^id(AWSTask *task) { AWSMachineLearningGetMLModelOutput *getMLModelOutput = task.result;

// Validate that the ML model is completed if (getMLModelOutput.status != AWSMachineLearningEntityStatusCompleted) { NSLog(@"ML Model is not completed"); return nil; }

// Validate that the realtime endpoint is ready

139

Page 143: AWS Mobile Hub 개발자 안내서 - 개발자 안내서 · 2020-02-07 · iOS - Swift 1.iOS를 플랫폼으로 선택하고 다음을 선택합니다. 2.Download Cloud Config(클라우드

AWS Mobile Hub 개발자 안내서 개발자 안내서웹

if (getMLModelOutput.endpointInfo.endpointStatus != AWSMachineLearningRealtimeEndpointStatusReady) { NSLog(@"Realtime endpoint is not ready"); return nil; }}

실시간 엔드포인트가 준비되었으면 예측을 호출하기 시작할 수 있습니다. 단, 실시간 엔드포인트를PredictRequest로 통과시켜야 합니다.

iOS - Swift

// Create a Predict request with your ML Model id and the appropriatelet predictInput = AWSMachineLearningPredictInput()predictInput!.predictEndpoint = getMLModelOutput.endpointInfo!.endpointUrl;predictInput!.mlModelId = mlModelId;predictInput!.record = record

return machineLearning.predict(predictInput!)

Objective C

// Create a Predict request with your ML Model id and the appropriate Record mapping.AWSMachineLearningPredictInput *predictInput = [AWSMachineLearningPredictInput new];predictInput.predictEndpoint = getMLModelOutput.endpointInfo.endpointUrl;predictInput.MLModelId = MLModelId;predictInput.record = @{};

// Call and return predictionreturn [MachineLearning predict:predictInput];

추가 리소스

• 개발자 안내서• API Reference

웹용 AWS Amplify 라이브러리Important

백엔드를 구성하기 위해 이미 AWS Mobile CLI를 사용하고 있다면 다음 콘텐츠가 적용됩니다.새 모바일 또는 웹 앱을 빌드하거나 기존 앱에 클라우드 기능을 추가하고 있다면 대신 새 AWSAmplify CLI를 사용하십시오. 새 Amplify CLI를 사용하면 추가 워크플로우를 제공하는 AWSCloudFormation 기능을 포함하여 AWS Amplify CLI Toolchain 공개에 설명된 모든 기능을 사용할수 있습니다.

AWS Amplify는 클라우드 지원 애플리케이션을 빌드하는 프런트엔드 및 모바일 개발자를 위한 오픈 소스JavaScript 라이브러리입니다. 이 라이브러리는 일반 작업을 애플리케이션에 보다 쉽게 추가할 수 있도록 하는 다양한 작업 범주에 걸친 선언형 인터페이스입니다. 기본 구현은 AWS(Amazon Web Services) 리소스와작동하지만 구현 또는 사용자 지정 백엔드를 제공하고자 하는 다른 클라우드 서비스에서 사용할 수 있도록오픈 및 연결형으로 설계되었습니다.

AWS Mobile Hub를 기반으로 하는 AWS Mobile CLI는 AWS 서비스를 완벽하게 활성화하여 앱 안에 구성할수 있는 프런트엔드 JavaScript 개발자용 명령줄 인터페이스를 제공합니다. 최소한의 구성으로 즐겨 사용하는 터미널 애플리케이션에서 AWS Mobile Hub에서 제공하는 모든 기능을 사용할 수 있습니다.

140

Page 144: AWS Mobile Hub 개발자 안내서 - 개발자 안내서 · 2020-02-07 · iOS - Swift 1.iOS를 플랫폼으로 선택하고 다음을 선택합니다. 2.Download Cloud Config(클라우드

AWS Mobile Hub 개발자 안내서 개발자 안내서웹

주제• 시작 (p. 141)• AWS Mobile Hub 기능 (p. 161)

시작Important

백엔드를 구성하기 위해 이미 AWS Mobile CLI를 사용하고 있다면 다음 콘텐츠가 적용됩니다.새 모바일 또는 웹 앱을 빌드하거나 기존 앱에 클라우드 기능을 추가하고 있다면 대신 새 AWSAmplify CLI를 사용하십시오. 새 Amplify CLI를 사용하면 추가 워크플로우를 제공하는 AWSCloudFormation 기능을 포함하여 AWS Amplify CLI Toolchain 공개에 설명된 모든 기능을 사용할수 있습니다.

개요

AWS Mobile CLI는 프런트엔드 JavaScript 개발자가 AWS 백엔드 리소스를 신속히 생성하여 모바일 앱에 통합할 수 있도록 하는 명령줄 환경을 제공합니다.

사전 조건

1. AWS 프리 티어에 가입합니다.2. Node.js(NPM)를 설치합니다.3. AWS Mobile CLI 설치

npm install -g awsmobile-cli

4. AWS 자격 증명을 사용하여 CLI 구성

CLI에 사용되는 도구 체인에 대한 권한을 설정하려면 다음을 실행합니다.

awsmobile configure

자격 증명을 지정하라는 메시지가 표시되면 CLI에서 제공하는 단계를 따릅니다. 자세한 내용은 AWSMobile CLI에 IAM 자격 증명 제공 (p. 170)을 참조하십시오.

백엔드 설정

간단한 샘플 React 앱을 만들어야 합니까? Create a React App을 참조하십시오.

앱에 맞게 백엔드 기능을 구성하려면

1. 앱의 루트 폴더에서 다음을 실행합니다.

awsmobile init

init 명령은 앱에 대한 백엔드 프로젝트를 생성합니다. 기본적으로 백엔드에서 분석 및 웹 호스팅이 활성화되고 초기화 시 이 구성이 앱으로 자동 풀됩니다.

2. 메시지가 표시되면 프로젝트에 대한 소스 디렉터리를 지정합니다. CLI는 이 위치에 대한 aws-exports.js를 생성합니다. 이 파일에는 프런트엔드를 백엔드 서비스에 연결하는 데 사용되는 구성과 엔드포인트 메타데이터가 들어 있습니다.

141

Page 145: AWS Mobile Hub 개발자 안내서 - 개발자 안내서 · 2020-02-07 · iOS - Swift 1.iOS를 플랫폼으로 선택하고 다음을 선택합니다. 2.Download Cloud Config(클라우드

AWS Mobile Hub 개발자 안내서 개발자 안내서웹

? Where is your project's source directory: src

3. 이후 메시지에 대해 다음 값으로 응답합니다.

? Where is your project's distribution directory to store build artifacts: build? What is your project's build command: npm run-script build? What is your project's start command for local test run: npm run-script start? What awsmobile project name would you like to use: YOUR-APP-NAME-2017-11-10-15-17-48

프로젝트를 생성한 후에는 aws-exports.js가 복사된 경로에 대한 세부 정보도 포함하는 성공 메시지가 표시됩니다.

awsmobile project's details logged at: awsmobilejs/#current-backend-info/backend-details.jsonawsmobile project's access information logged at: awsmobilejs/#current-backend-info/aws-exports.jsawsmobile project's access information copied to: src/aws-exports.jsawsmobile project's specifications logged at: awsmobilejs/#current-backend-info/mobile-hub-project.ymlcontents in #current-backend-info/ is synchronized with the latest information in the aws cloud

이제 프로젝트가 초기화되었습니다.

Note

awsmobile init YOUR_MOBILE_HUB_PROJECT_ID를 사용하여 이 프로젝트에 대해 생성한AWS 백엔드 리소스를 다른 기존 앱에 추가할 수 있습니다. 프로젝트 ID를 찾으려면 awsmobileconsole을 실행하여 Mobile Hub 콘솔에서 Mobile Hub 프로젝트를 엽니다. 프로젝트 ID는 콘솔 주소의 GUID 부분으로, XXXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX 형식입니다.

백엔드에 연결

AWS Mobile은 오픈 소스 AWS Amplify 라이브러리를 사용하여 코드를 앱용으로 구성된 AWS 기능에 연결합니다.

이 안내서의 이 단원에서는 create-react-app 또는 이와 유사한 도구에서 출력되는 유형의 React 애플리케이션을 사용하는 예를 보여 줍니다.

앱을 구성된 AWS 기능에 연결하려면

index.js(또는 시작 시 실행되는 다른 코드)에 다음 가져오기를 추가합니다.

import Amplify from 'aws-amplify';import awsmobile from './YOUR-PATH-TO/aws-exports';

그러고 나서 다음 코드를 추가합니다.

Amplify.configure(awsmobile);

로컬로 앱 실행

이제 앱이 AWS Mobile에서 구성된 기본 기능을 시작하고 사용할 준비가 되었습니다.

브라우저에서 앱을 로컬로 시작하려면

142

Page 146: AWS Mobile Hub 개발자 안내서 - 개발자 안내서 · 2020-02-07 · iOS - Swift 1.iOS를 플랫폼으로 선택하고 다음을 선택합니다. 2.Download Cloud Config(클라우드

AWS Mobile Hub 개발자 안내서 개발자 안내서웹

앱의 루트 폴더에서 다음을 실행합니다.

awsmobile run

이 명령은 백그라운드에서 npm install을 실행하여 Amplify 라이브러리를 설치하고 백엔드 구성 변경 내용을 AWS Mobile로 푸시합니다. 백엔드 변경 내용을 푸시하지 않고 앱을 로컬로 실행하려면 npminstall을 실행한 후 npm start를 실행하도록 선택할 수 있습니다.

앱을 시작할 때마다 AWS 콘솔에서 앱 분석을 수집하여 시각화할 수 있습니다 (p. 145).

AWS 프리 티어 CLI를 통해 앱을 초기화하거나 기능을 추가하면 사용자를 대신하여 AWS 서비스가 구성됩니다. AWSMobile 서비스 요금에서는 매우 저렴한 요금 또는무료로 AWS 프리 티어를 학습하고 시제품화할 수있습니다.

다음 단계

주제• 클라우드에 앱 배포 (p. 143)• 모바일 디바이스에서 앱 테스트 (p. 143)• 기능 추가 (p. 144)• 자세히 알아보기 (p. 145)

클라우드에 앱 배포

간단한 명령을 사용하여 앱의 프런트엔드를 견고한 콘텐츠 배포 네트워크(CDN)에서 호스팅하고 브라우저에서 볼 수 있습니다.

앱을 클라우드에 배포하고 브라우저에서 시작하려면

앱의 루트 폴더에서 다음을 실행합니다.

awsmobile publish

백엔드 구성 변경 내용을 AWS로 푸시하고 콘텐츠를 로컬로 보려면 awsmobile run을 실행합니다. 두 경우 모두, 백엔드 구성에 대한 보류 중인 변경 사항이 백엔드 리소스에 수행됩니다.

기본적으로 CLI는 Amazon CloudFront CDN 엔드포인트에서 앱을 호스팅하는 AWS Mobile 호스팅 및 스트리밍 (p. 198) 기능을 구성합니다. 이러한 위치는 앱을 인터넷에서 공개적으로 사용할 수 있도록 설정하고미디어 파일 스트리밍을 지원합니다.

또한 호스팅 위치에 대해 사용자 지정 도메인을 사용 (p. 158)할 수도 있습니다.

모바일 디바이스에서 앱 테스트

다양한 실제 디바이스에서 앱의 무료 원격 테스트를 호출하여 결과(스크린샷 포함)를 확인합니다.

앱에 대한 원격 테스트를 호출하려면

앱의 루트 폴더에서 다음을 실행합니다.

awsmobile publish --test

143

Page 147: AWS Mobile Hub 개발자 안내서 - 개발자 안내서 · 2020-02-07 · iOS - Swift 1.iOS를 플랫폼으로 선택하고 다음을 선택합니다. 2.Download Cloud Config(클라우드

AWS Mobile Hub 개발자 안내서 개발자 안내서웹

CLI는 Mobile Hub 콘솔에서 앱에 대한 보고 페이지를 열어 테스트 디바이스에서 수집된 측정치를 표시합니다. 사용자가 호출하는 원격 테스트를 실행하는 장치는 유연한 테스트 및 보고 구성을 제공하는 AWS DeviceFarm에 상주합니다.

기능 추가

CLI를 사용하여 다음 AWS Mobile 기능을 모바일 앱에 추가합니다.

• 분석 (p. 145)• 사용자 로그인 (p. 146)• NoSQL 데이터베이스 (p. 147)• 사용자 파일 스토리지 (p. 152)• 클라우드 로직 (p. 154)

144

Page 148: AWS Mobile Hub 개발자 안내서 - 개발자 안내서 · 2020-02-07 · iOS - Swift 1.iOS를 플랫폼으로 선택하고 다음을 선택합니다. 2.Download Cloud Config(클라우드

AWS Mobile Hub 개발자 안내서 개발자 안내서웹

자세히 알아보기

AWS Mobile CLI의 명령 및 사용법에 대해 자세히 알아보려면 AWS Mobile CLI 참조 (p. 161)를 참조하십시오.

AWS Mobile Amplify에 대해 알아봅니다.

분석 추가Important

백엔드를 구성하기 위해 이미 AWS Mobile CLI를 사용하고 있다면 다음 콘텐츠가 적용됩니다.새 모바일 또는 웹 앱을 빌드하거나 기존 앱에 클라우드 기능을 추가하고 있다면 대신 새 AWSAmplify CLI를 사용하십시오. 새 Amplify CLI를 사용하면 추가 워크플로우를 제공하는 AWSCloudFormation 기능을 포함하여 AWS Amplify CLI Toolchain 공개에 설명된 모든 기능을 사용할수 있습니다.

앱에 대해 기본 분석 백엔드 활성화

시작하기 전에 이 페이지의 단계에서는 시작하기 (p. 141)의 단계를 이미 완료했다고 가정합니다.

AWS Mobile CLI 설정을 완료할 때 앱, 익명화된 세션 및 AWS 분석 백엔드로의 디바이스 인구 통계 데이터흐름을 시작합니다.

AWS로 기본 앱 사용량 분석을 전송하려면

다음을 실행하여 앱을 로컬로 시작합니다.

npm start

앱을 사용할 때 Amazon Pinpoint 서비스에서 분석 데이터를 수집하고 시각화합니다.

Amazon Pinpoint 콘솔을 사용하여 분석을 보려면

1. 한 번 이상 npm start, awsmobile run 또는 awsmobile publish --test를 실행합니다.2. AWS Mobile Hub 콘솔에서 프로젝트를 엽니다.

awsmobile console

3. 왼쪽에 있는 분석 아이콘을 선택하여 Amazon Pinpoint 콘솔에서 해당 프로젝트로 이동합니다.4. 왼쪽에서 분석을 선택합니다.

여러 그래픽에 상향 틱이 표시됩니다.

앱에 사용자 지정 분석 추가

Amazon Pinpoint가 코드 흐름 내에서 사용자가 등록하는 사용자 지정 이벤트에 대한 데이터를 수집하도록앱을 구성할 수 있습니다.

앱에서 사용자 지정 분석을 계측하려면

추적할 이벤트를 포함하는 파일에서 다음 가져오기를 추가합니다.

import { Analytics } from 'aws-amplify';

145

Page 149: AWS Mobile Hub 개발자 안내서 - 개발자 안내서 · 2020-02-07 · iOS - Swift 1.iOS를 플랫폼으로 선택하고 다음을 선택합니다. 2.Download Cloud Config(클라우드

AWS Mobile Hub 개발자 안내서 개발자 안내서웹

다음과 같은 호출을 JavaScript 내에서 추적되는 이벤트가 발생해야 할 지점에 추가합니다.

componentDidMount() { Analytics.record('FIRST-EVENT-NAME');}

또는 관련 페이지 요소에 추가합니다.

handleClick = () => { Analytics.record('SECOND-EVENT-NAME');}

<button onClick={this.handleClick}>Call request</button>

을 테스트하려면 다음을 수행합니다.

1. 변경 내용을 저장하고 npm start, awsmobile run 또는 awsmobile publish --test를 실행하여앱을 시작합니다. 추적되는 이벤트가 발생하도록 앱을 사용합니다.

2. Amazon Pinpoint 콘솔에서 맨 위 부근에 있는 이벤트를 선택합니다.3. 왼쪽에 있는 이벤트 드롭다운 메뉴에서 이벤트를 선택합니다.

사용자 지정 이벤트 데이터가 콘솔에 보이는 데 몇 분이 걸릴 수도 있습니다.

다음 단계

AWS Mobile에서 메시징 및 분석 (p. 196) 기능의 일부로 제공되는 분석 기능에 대해 자세히 알아봅니다.이 기능에는 Amazon Pinpoint가 사용됩니다.

AWS Mobile CLI (p. 161)에 대해 알아봅니다.

AWS Mobile Amplify에 대해 알아봅니다.

인증/사용자 로그인 추가Important

백엔드를 구성하기 위해 이미 AWS Mobile CLI를 사용하고 있다면 다음 콘텐츠가 적용됩니다.새 모바일 또는 웹 앱을 빌드하거나 기존 앱에 클라우드 기능을 추가하고 있다면 대신 새 AWSAmplify CLI를 사용하십시오. 새 Amplify CLI를 사용하면 추가 워크플로우를 제공하는 AWSCloudFormation 기능을 포함하여 AWS Amplify CLI Toolchain 공개에 설명된 모든 기능을 사용할수 있습니다.

백엔드 설정

시작하기 전에 이 페이지의 단계에서는 시작하기 (p. 141)의 단계를 이미 완료했다고 가정합니다.

사용자 인증용 AWS Mobile CLI 구성 요소에는 가입 및 로그인을 위한 구성 가능한 풍부한 UI가 포함되어 있습니다.

인증 기능을 활성화하려면

앱의 루트 폴더에서 다음을 실행합니다.

awsmobile user-signin enable

146

Page 150: AWS Mobile Hub 개발자 안내서 - 개발자 안내서 · 2020-02-07 · iOS - Swift 1.iOS를 플랫폼으로 선택하고 다음을 선택합니다. 2.Download Cloud Config(클라우드

AWS Mobile Hub 개발자 안내서 개발자 안내서웹

awsmobile push

백엔드에 연결

AWS Mobile CLI에서는 명령줄을 통해 미리 만들어진 sign-up/sign-in/sign-out UI를 통합할 수 있습니다.

앱에 사용자 인증 UI를 추가하려면

1. React용 AWS Amplify 라이브러리를 설치합니다.

npm install --save aws-amplify-react

2. App.js(또는 앱 시작 시 실행되는 다른 파일)에 다음 가져오기를 추가합니다.

import { withAuthenticator } from 'aws-amplify-react';

3. 그런 다음 export default App;을 다음으로 변경합니다.

export default withAuthenticator(App);

테스트하려면 npm start, awsmobile run 또는 awsmobile publish --test를 실행합니다.

다음 단계

AWS Mobile 사용자 로그인 (p. 204) 기능에 대해 자세히 알아봅니다. 이 기능에는 Amazon Cognito가 사용됩니다.

AWS Mobile CLI (p. 161)에 대해 알아봅니다.

AWS Mobile Amplify에 대해 알아봅니다.

데이터베이스에 액세스Important

백엔드를 구성하기 위해 이미 AWS Mobile CLI를 사용하고 있다면 다음 콘텐츠가 적용됩니다.새 모바일 또는 웹 앱을 빌드하거나 기존 앱에 클라우드 기능을 추가하고 있다면 대신 새 AWSAmplify CLI를 사용하십시오. 새 Amplify CLI를 사용하면 추가 워크플로우를 제공하는 AWSCloudFormation 기능을 포함하여 AWS Amplify CLI Toolchain 공개에 설명된 모든 기능을 사용할수 있습니다.

백엔드 설정

AWS Mobile CLI 및 Amplify 라이브러리를 사용하면 JavaScript 앱에서 단순 API 호출을 통해 클라우드에 저장된 데이터에 대해 생성, 읽기, 업데이트 및 삭제("CRUD") 작업을 쉽게 수행할 수 있습니다.

시작하기 전에 이 페이지의 단계에서는 시작하기 (p. 141)의 단계를 이미 완료했다고 가정합니다.

데이터베이스를 생성하려면

1. NoSQL 데이터베이스 기능을 활성화하고 테이블을 구성합니다.

앱의 루트 폴더에서 다음을 실행합니다.

awsmobile database enable --prompt

147

Page 151: AWS Mobile Hub 개발자 안내서 - 개발자 안내서 · 2020-02-07 · iOS - Swift 1.iOS를 플랫폼으로 선택하고 다음을 선택합니다. 2.Download Cloud Config(클라우드

AWS Mobile Hub 개발자 안내서 개발자 안내서웹

2. 이 테이블의 데이터를 애플리케이션의 모든 사용자가 볼 수 있도록 하려면 Open를 선택합니다.

? Should the data of this table be open or restricted by user?# Open Restricted

3. 이 예의 경우 todos으로 Table name를 입력합니다.

? Table name: todos

열 및 쿼리 추가

NoSQL 데이터베이스에서 테이블을 생성하고 초기 열 집합을 추가하려고 합니다. 각 열에는 이름과 데이터유형이 지정됩니다. NoSQL을 통해 새 열을 포함하는 데이터를 저장할 때마다 열 하나를 추가할 수 있습니다. NoSQL 테이블에는 기본 키로 정의된 열 하나가 있어야 하며, 이 열은 각 행의 고유한 식별자입니다.

1. 이 예제의 경우, 프롬프트에 따라 team(문자열), todoId(숫자) 및 text(문자열)라는 세 개 열을 추가합니다.

? What would you like to name this column: team? Choose the data type: string

2. ? Add another column 메시지가 표시되면 Y를 입력한 후 Enter를 선택합니다. 이 단계를 반복하여todoId 및 text 열을 생성합니다.

3. team을 기본 키로 선택합니다.

? Select primary key# team todoId text

4. 이 예제를 간단한 형태로 유지하기 위해 (todoId)를 정렬 키로 선택한 후 다른 인덱스 추가에 대해 no를선택합니다.

정렬 키와 인덱스 성능을 최적화하기 위해 열 하나를 정렬 키로 정의할 수 있습니다. 정렬 키를 기본 키와 함께 자주 사용하여 테이블을 쿼리하려는 경우 정렬 키로 사용할 열 하나를 선택합니다. 또한 보조 인덱스를 생성하여 추가 열 정렬 키를 만들 수도 있습니다.

? Select sort key# todoId text (No Sort Key)

? Add index (Y/n): nTable todos saved.

이제 todos 테이블이 생성되었습니다.

클라우드 API를 사용하여 CRUD 작업 수행

NoSQL 데이터베이스에 액세스하려면 CRUD 작업을 수행하기 위해 앱에서 호출할 수 있는 API를 생성합니다.

148

Page 152: AWS Mobile Hub 개발자 안내서 - 개발자 안내서 · 2020-02-07 · iOS - Swift 1.iOS를 플랫폼으로 선택하고 다음을 선택합니다. 2.Download Cloud Config(클라우드

AWS Mobile Hub 개발자 안내서 개발자 안내서웹

왜 API인가? API를 사용한 데이터베이스 액세스는 프런트엔드에서 간단한 코딩 인터페이스를, 백엔드에서 견고한유연성을 제공합니다. 백그라운드에서 클라우드의Amazon API Gateway API 엔드포인트 호출은 서버리스 Lambda 함수에 의해 처리됩니다.

CRUD API를 생성하려면

1. Cloud Logic 기능 활성화 및 구성**

awsmobile cloud-api enable --prompt

2. 기존 Amazon DynamoDB 테이블에 대해 Create CRUD API for an existing Amazon DynamoDBtable API를 선택한 후 Enter를 선택합니다.

? Select from one of the choices below. (Use arrow keys) Create a new API# Create CRUD API for an existing Amazon DynamoDB table

3. 이전 단계에서 생성된 todos 테이블을 선택하고 Enter를 선택합니다.

? Select Amazon DynamoDB table to connect to a CRUD API# todos

4. 구성을 클라우드로 푸시합니다. 이 단계를 사용하지 않을 경우 데이터베이스 및 API에 대한 구성이 로컬시스템에만 배치됩니다.

awsmobile push

이제 필요한 DynamoDB 테이블, API Gateway 엔드포인트 및 Lambda 함수가 생성됩니다.

첫 번째 해야 할 일 만들기

AWS Mobile CLI에서는 명령줄을 통해 API를 테스트할 수 있습니다.

다음 명령을 실행하여 첫 번째 해야 할 일을 만듭니다.

awsmobile cloud-api invoke todosCRUD POST /todos '{"body": {"team": "React", "todoId": 1, "text": "Learn more Amplify"}}'

백엔드에 연결

이 단원의 예제에서는 React를 사용하여 AWS Amplify 라이브러리 호출을 통합하는 방법을 보여 줍니다(다른 Javascript 버전을 사용하려면 AWS Amplify 설명서 참조).

다음 구성 요소는 create-react-app 프로젝트에 추가할 수 있는 간단한 해야 할 일 목록입니다. Todos 구성 요소는 현재 todos를 인 메모리 배열에/에서 추가 및 표시합니다.

// To Do app example

import React from 'react';

class Todos extends React.Component { state = { team: "React", todos: [] };

149

Page 153: AWS Mobile Hub 개발자 안내서 - 개발자 안내서 · 2020-02-07 · iOS - Swift 1.iOS를 플랫폼으로 선택하고 다음을 선택합니다. 2.Download Cloud Config(클라우드

AWS Mobile Hub 개발자 안내서 개발자 안내서웹

render() { let todoItems = this.state.todos.map(({todoId, text}) => { return <li key={todoId}>{text}</li>; });

return ( <div style={styles}> <h1>{this.state.team} Todos</h1> <ul> {todoItems} </ul>

<form> <input ref="newTodo" type="text" placeholder="What do you want to do?" /> <input type="submit" value="Save" /> </form> </div> ); }}

let styles = { margin: "0 auto", width: "25%"};

export default Todos;

클라우드에서 해야 할 일 표시

AWS Amplify의 API 모듈을 사용하면 API 게이트웨이 엔드포인트를 통해 DynamoDB에 연결할 수 있습니다.

데이터베이스의 항목을 가져와서 표시하려면

1. API 모듈을 Todos 구성 요소 파일 맨 위에 있는 aws-amplify에서 가져옵니다.

import { API } from 'aws-amplify';

2. 다음 componentDidMount를 Todos 구성 요소에 추가하여 모든 todos를 가져옵니다.

async componentDidMount() { let todos = await API.get('todosCRUD', `/todos/${this.state.team}`); this.setState({ todos });}

Todos 구성 요소는 탑재 시 데이터베이스에 저장된 모든 todos를 가져와서 표시합니다.

클라우드에 todos 저장

다음 조각은 Todo 앱의 saveTodo 함수를 표시합니다.

async saveTodo(event) { event.preventDefault();

const { team, todos } = this.state; const todoId = todos.length + 1; const text = this.refs.newTodo.value;

150

Page 154: AWS Mobile Hub 개발자 안내서 - 개발자 안내서 · 2020-02-07 · iOS - Swift 1.iOS를 플랫폼으로 선택하고 다음을 선택합니다. 2.Download Cloud Config(클라우드

AWS Mobile Hub 개발자 안내서 개발자 안내서웹

const newTodo = {team, todoId, text}; await API.post('todosCRUD', '/todos', { body: newTodo }); todos.push(newTodo); this.refs.newTodo.value = ''; this.setState({ todos, team });}

양식이 제출되면 form 함수를 호출하도록 구성 요소의 렌더링 함수에 있는 saveTodo 요소를 업데이트합니다.

<form onSubmit={this.saveTodo.bind(this)}>

전체 구성 요소는 다음과 같습니다.

// To Do app example

import React from 'react';import { API } from 'aws-amplify';

class Todos extends React.Component { state = { team: "React", todos: [] };

async componentDidMount() { const todos = await API.get('todosCRUD', `/todos/${this.state.team}`) this.setState({ todos }); }

async saveTodo(event) { event.preventDefault();

const { team, todos } = this.state; const todoId = todos.length + 1; const text = this.refs.newTodo.value;

const newTodo = {team, todoId, text}; await API.post('todosCRUD', '/todos', { body: newTodo }); todos.push(newTodo); this.refs.newTodo.value = ''; this.setState({ todos, team }); }

render() { let todoItems = this.state.todos.map(({todoId, text}) => { return <li key={todoId}>{text}</li>; });

return ( <div style={styles}> <h1>{this.state.team} Todos</h1> <ul> {todoItems} </ul>

<form onSubmit={this.saveTodo.bind(this)}> <input ref="newTodo" type="text" placeholder="What do you want to do?" /> <input type="submit" value="Save" /> </form> </div> ); }}

151

Page 155: AWS Mobile Hub 개발자 안내서 - 개발자 안내서 · 2020-02-07 · iOS - Swift 1.iOS를 플랫폼으로 선택하고 다음을 선택합니다. 2.Download Cloud Config(클라우드

AWS Mobile Hub 개발자 안내서 개발자 안내서웹

let styles = { margin: "0 auto", width: "25%"}

export default Todos;

다음 단계

• AWS Amplify의 API 모듈에서 특정 항목 등을 가져오는 방법에 대해 알아봅니다.• AWS Mobile CLI를 사용하여 앱에 대해 그 밖의 기능을 활성화하는 방법에 대해 알아봅니다.

스토리지 추가Important

백엔드를 구성하기 위해 이미 AWS Mobile CLI를 사용하고 있다면 다음 콘텐츠가 적용됩니다.새 모바일 또는 웹 앱을 빌드하거나 기존 앱에 클라우드 기능을 추가하고 있다면 대신 새 AWSAmplify CLI를 사용하십시오. 새 Amplify CLI를 사용하면 추가 워크플로우를 제공하는 AWSCloudFormation 기능을 포함하여 AWS Amplify CLI Toolchain 공개에 설명된 모든 기능을 사용할수 있습니다.

백엔드 설정

AWS Mobile CLI 및 AWS Amplify 라이브러리를 사용하면 JavaScript 앱에서 클라우드의 파일을 쉽게 저장및 관리할 수 있습니다.

시작하기 전에 이 페이지의 단계에서는 시작하기 (p. 141)의 단계를 이미 완료했다고 가정합니다.

앱의 루트 폴더에서 다음 명령을 실행하여 사용자 파일 스토리지 기능을 활성화합니다.

awsmobile user-files enable

awsmobile push

백엔드에 연결

이 단원의 예제에서는 React를 사용하여 AWS Amplify 라이브러리 호출을 통합하는 방법을 보여 줍니다(다른 Javascript 버전을 사용하려면 AWS Amplify 설명서 참조).

다음 단순 구성 요소를 create-react-app 프로젝트에 추가하여 이미지를 업로드하고 표시용으로 다운로드하는 인터페이스를 제공할 수 있습니다.

// Image upload and download for display example component// src/ImageViewer.js

import React, { Component } from 'react';

class ImageViewer extends Component { render() { return ( <div>

152

Page 156: AWS Mobile Hub 개발자 안내서 - 개발자 안내서 · 2020-02-07 · iOS - Swift 1.iOS를 플랫폼으로 선택하고 다음을 선택합니다. 2.Download Cloud Config(클라우드

AWS Mobile Hub 개발자 안내서 개발자 안내서웹

<p>Pick a file</p> <input type="file" /> </div> ); }}

export default ImageViewer;

파일 업로드

Storage 모듈을 사용하면 파일을 클라우드에 업로드할 수 있습니다. 업로드된 모든 파일은 기본적으로 공개적으로 볼 수 있습니다.

구성 요소 파일의 Storage 모듈을 가져옵니다.

// ./src/ImageViewer.js

import { Storage } from 'aws-amplify';

put 모듈에서 Storage 함수를 사용하여 클라우드에 해당 파일을 업로드하고 구성 요소의 상태를 파일의 이름으로 설정하는 다음 함수를 추가합니다.

uploadFile(event) { const file = event.target.files[0]; const name = file.name;

Storage.put(key, file).then(() => { this.setState({ file: name }); });}

사용자가 파일을 선택할 때 업로드가 시작되도록 하려면 구성 요소 렌더링 함수의 uploadFile 요소에서input 함수를 호출합니다.

render() { return ( <div> <p>Pick a file</p> <input type="file" onChange={this.uploadFile.bind(this)} /> </div> );}

이미지 표시

이미지를 표시하기 위해 이 예제에서는 React용 AWS Amplify 라이브러리의 S3Image 구성 요소 사용을 보여 줍니다.

1. 터미널을 사용하여 앱의 루트 폴더에서 다음 명령을 실행합니다.

npm install --save aws-amplify-react

2. 구성 요소의 S3Image 모듈을 가져옵니다.

import { S3Image } from 'aws-amplify-react';

153

Page 157: AWS Mobile Hub 개발자 안내서 - 개발자 안내서 · 2020-02-07 · iOS - Swift 1.iOS를 플랫폼으로 선택하고 다음을 선택합니다. 2.Download Cloud Config(클라우드

AWS Mobile Hub 개발자 안내서 개발자 안내서웹

렌더링 함수의 S3Image 구성 요소를 사용합니다. 다음과 같은 형태가 되도록 렌더링 함수를 업데이트합니다.

render() { return ( <div> <p>Pick a file</p> <input type="file" onChange={this.handleUpload.bind(this)} /> { this.state && <S3Image path={this.state.path} /> } </div> );}

구성된 전체 구성 요소는 다음과 같습니다.

// Image upload and download for display example component

import React, { Component } from 'react';import { Storage } from 'aws-amplify';import { S3Image } from 'aws-amplify-react';

class ImageViewer extends Component {

handleUpload(event) { const file = event.target.files[0]; const path = file.name; Storage.put(path, file).then(() => this.setState({ path }) ); }

render() { return ( <div> <p>Pick a file</p> <input type="file" onChange={this.handleUpload.bind(this)} /> { this.state && <S3Image path={this.state.path} /> } </div> ); }}

export default ImageViewer;

다음 단계

• 프라이빗 파일 스토리지를 수행하는 방법과 AWS Amplify 스토리지 모듈의 다양한 활용 방법에 대해 알아봅니다.

• AWS Mobile CLI를 사용하여 앱에 대해 그 밖의 기능을 활성화하는 방법에 대해 알아봅니다.• AWS Amplify 라이브러리에서 앱의 이러한 기능을 사용하는 방법에 대해 알아봅니다.• 사용자 파일 스토리지 분석 기능에 대해 자세히 알아봅니다.• Amazon Simple Storage Service에 파일이 저장되는 방식에 대해 자세히 알아봅니다.

API에 액세스Important

백엔드를 구성하기 위해 이미 AWS Mobile CLI를 사용하고 있다면 다음 콘텐츠가 적용됩니다.새 모바일 또는 웹 앱을 빌드하거나 기존 앱에 클라우드 기능을 추가하고 있다면 대신 새 AWS

154

Page 158: AWS Mobile Hub 개발자 안내서 - 개발자 안내서 · 2020-02-07 · iOS - Swift 1.iOS를 플랫폼으로 선택하고 다음을 선택합니다. 2.Download Cloud Config(클라우드

AWS Mobile Hub 개발자 안내서 개발자 안내서웹

Amplify CLI를 사용하십시오. 새 Amplify CLI를 사용하면 추가 워크플로우를 제공하는 AWSCloudFormation 기능을 포함하여 AWS Amplify CLI Toolchain 공개에 설명된 모든 기능을 사용할수 있습니다.

백엔드 설정

AWS Mobile CLI 및 Amplify 라이브러리를 통해 쉽게 클라우드 API 및 핸들러 로직을 생성하고 JavaScript에서 호출할 수 있습니다.

시작하기 전에 이 페이지의 단계에서는 시작하기 (p. 141)의 단계를 이미 완료했다고 가정합니다.

API 생성

다음 예제에서는 클라우드 사용 번호의 일부인 API를 생성합니다. CLI는 백그라운드에서 API용 서버리스 핸들러를 생성합니다.

API를 활성화 및 구성하려면

1. 앱의 루트 폴더에서 다음을 실행합니다.

awsmobile cloud-api enable --prompt

2. 메시지가 표시되면 API Guesses의 이름을 지정합니다.

? API name: Guesses

3. HTTP 경로에 /number 이름을 지정합니다. 이 경로는 API 핸들러의 메서드 호출로 매핑됩니다.

? HTTP path name (/items): /number

4. Lambda API 핸들러 함수에 guesses 이름을 지정합니다.

? Lambda function name (This will be created if it does not already exists): guesses

5. 다른 HTTP 경로를 추가하라는 메시지가 표시되면 N을 입력합니다.

? Add another HTTP path (y/N): N

6. 이제는 Guesses API에 대한 구성이 로컬로 저장되었습니다. 구성을 클라우드로 푸시합니다.

awsmobile push

API 및 핸들러를 테스트하려면

명령줄에서 다음을 실행합니다.

awsmobile cloud-api invoke Guesses GET /number

이제 Guesses API의 클라우드 로직 API 엔드포인트가 생성되었습니다.

API 핸들러 로직 사용자 지정

AWS Mobile CLI가 Guesses API에 대한 호출을 처리할 Lambda 함수를 생성했습니다. 이 함수는 YOUR-APP-ROOT-FOLDER/awsmobilejs/backend/cloud-api/guesses에 로컬로 저장됩니다. 해당 디렉터리의 app.js 파일에는 API에 대해 처리되는 모든 경로에 대한 정의 및 기능 코드가 들어 있습니다.

155

Page 159: AWS Mobile Hub 개발자 안내서 - 개발자 안내서 · 2020-02-07 · iOS - Swift 1.iOS를 플랫폼으로 선택하고 다음을 선택합니다. 2.Download Cloud Config(클라우드

AWS Mobile Hub 개발자 안내서 개발자 안내서웹

API 핸들러를 사용자 지정하려면

1. /number 경로에서 POST 요청의 핸들러를 찾습니다. 해당 줄은 app.post('number',로 시작합니다.콜백 함수의 본문을 다음으로 바꿉니다.

# awsmobilejs/backend/cloud-api/guesses/app.jsapp.post('/number', function(req, res) { const correct = 12; let guess = req.body.guess let result = ""

if (guess === correct) { result = "correct"; } else if (guess > correct) { result = "high"; } else if (guess < correct) { result = "low"; }

res.json({ result })});

2. 변경 내용을 클라우드로 푸시합니다.

awsmobile push

새 번호 추측 기능을 구현하는 Guesses API 핸들러 로직이 이제 클라우드에 배포됩니다.

백엔드에 연결

이 단원의 예제에서는 React를 사용하여 AWS Amplify 라이브러리 호출을 통합하는 방법을 보여 줍니다(다른 Javascript 버전을 사용하려면 AWS Amplify 설명서 참조).

다음의 간단한 구성 요소를 create-react-app 프로젝트에 추가하여 번호 추측 게임을 표시할 수 있습니다.

// Number guessing game app example

# src/GuessNumber.js

class GuessNumber extends React.Component { state = { answer: null };

render() { let prompt = "" const answer = this.state.answer

switch (answer) { case "lower": prompt = "Incorrect. Guess a lower number." case "higher": prompt = "Incorrect. Guess a higher number." case "correct": prompt = `Correct! The number is ${this.refs.guess.value}!` default: prompt = "Guess a number between 1 and 100." }

return ( <div style={styles}>

156

Page 160: AWS Mobile Hub 개발자 안내서 - 개발자 안내서 · 2020-02-07 · iOS - Swift 1.iOS를 플랫폼으로 선택하고 다음을 선택합니다. 2.Download Cloud Config(클라우드

AWS Mobile Hub 개발자 안내서 개발자 안내서웹

<h1>Guess The Number</h1> <p>{ prompt }</p>

<input ref="guess" type="text" /> <button type="submit">Guess</button> </div> )

}}

let styles = { margin: "0 auto", width: "30%"};

export default GuessNumber;

추측

AWS Amplify의 API 모듈에서는 JavaScript 애플리케이션에서 클라우드 로직 API로 요청을 직접 보낼 수 있습니다.

RESTful API를 호출하려면

1. API 모듈을 aws-amplify 구성 요소 파일의 GuessNumber에서 가져옵니다.

import { API } from 'aws-amplify';

2. makeGuess 함수를 추가합니다. 이 함수는 API 모듈의 post 함수를 사용하여 클라우드 로직 API에 추측을 제출합니다.

async makeGuess() { const guess = parseInt(this.refs.guess.value); const body = { guess } const { result } = await API.post('Guesses', '/number', { body }); this.setState({ guess: result });}

3. 구성 요소의 render 함수에 있는 Guess(추측) 버튼을 변경하여 선택한 makeGuess 함수를 호출합니다.

<button type="submit" onClick={this.makeGuess.bind(this)}>Guess</button>

앱을 로컬로 열고 awsmobile run을 실행하여 번호 추측을 테스트합니다.

전체 구성 요소는 다음과 같습니다.

// Number guessing game app example

import React from 'react';import { API } from 'aws-amplify';

class GuessNumber extends React.Component { state = { guess: null };

async makeGuess() {

157

Page 161: AWS Mobile Hub 개발자 안내서 - 개발자 안내서 · 2020-02-07 · iOS - Swift 1.iOS를 플랫폼으로 선택하고 다음을 선택합니다. 2.Download Cloud Config(클라우드

AWS Mobile Hub 개발자 안내서 개발자 안내서웹

const guess = parseInt(this.refs.guess.value, 10); const body = { guess } const { result } = await API.post('Guesses', '/number', { body }); this.setState({ guess: result }); }

render() { let prompt = ""

switch (this.state.guess) { case "high": prompt = "Incorrect. Guess a lower number."; break; case "low": prompt = "Incorrect. Guess a higher number."; break; case "correct": prompt = `Correct! The number is ${this.refs.guess.value}!`; break; default: prompt = "Guess a number between 1 and 100."; }

return ( <div style={styles}> <h1>Guess The Number</h1> <p>{ prompt }</p>

<input ref="guess" type="text" /> <button type="submit" onClick={this.makeGuess.bind(this)}>Guess</button> </div> )

}}

let styles = { margin: "0 auto", width: "30%"};

export default GuessNumber;

다음 단계

• AWS Amplify의 API 모듈에서 특정 항목 등을 가져오는 방법에 대해 알아봅니다.• AWS Mobile CLI를 사용하여 앱에 대해 그 밖의 기능을 활성화하는 방법에 대해 알아봅니다.• Lambda 및 API Gateway 설정을 참조하여 백그라운드에서 어떤 일이 발생하는지에 대해 자세히 알아봅니

다.

웹 앱 호스팅Important

백엔드를 구성하기 위해 이미 AWS Mobile CLI를 사용하고 있다면 다음 콘텐츠가 적용됩니다.새 모바일 또는 웹 앱을 빌드하거나 기존 앱에 클라우드 기능을 추가하고 있다면 대신 새 AWSAmplify CLI를 사용하십시오. 새 Amplify CLI를 사용하면 추가 워크플로우를 제공하는 AWSCloudFormation 기능을 포함하여 AWS Amplify CLI Toolchain 공개에 설명된 모든 기능을 사용할수 있습니다.

158

Page 162: AWS Mobile Hub 개발자 안내서 - 개발자 안내서 · 2020-02-07 · iOS - Swift 1.iOS를 플랫폼으로 선택하고 다음을 선택합니다. 2.Download Cloud Config(클라우드

AWS Mobile Hub 개발자 안내서 개발자 안내서웹

주제• 호스팅 및 스트리밍 정보 (p. 159)• 앱 애셋 관리 (p. 159)• 웹 앱에 대한 사용자 지정 도메인 구성 (p. 160)

호스팅 및 스트리밍 정보

웹 앱을 클라우드로 처음 푸시하면 호스팅 및 스트리밍 기능이 활성화되어 웹 상에서 앱을 정적으로 호스팅합니다. AWS Mobile CLI를 사용하는 경우에는 처음 실행할 때 다음과 같은 일이 생깁니다.

$ awsmobile publish

Amazon S3 버킷을 사용하여 콘텐츠용 컨테이너를 생성합니다. 콘텐츠는 인터넷에서 공개적으로 사용할 수있으며 테스트 URL을 사용하여 콘텐츠를 직접 미리 볼 수 있습니다.

버킷에 배치된 콘텐츠는 글로벌 CDN(콘텐츠 전송 네트워크)에 자동으로 배포됩니다. Amazon CloudFront는전 세계적으로 모든 사용자에게 근접한 엔드포인트 상에서 앱을 호스팅할 수 있는 CDN을 구현합니다. 이러한 엔드포인트는 미디어 콘텐츠를 스트리밍할 수도 있습니다. 자세히 알아보려면 CloudFront 스트리밍 자습서를 참조하십시오.

기본적으로 호스팅 및 스트리밍은 AWS 서비스에 액세스하는 간단한 샘플 웹 앱을 배포합니다.

앱 애셋 관리

AWS Mobile CLI 또는 Amazon S3 콘솔을 사용하여 버킷의 콘텐츠를 관리할 수 있습니다.

AWS CLI를 사용하여 버킷 콘텐츠 관리

AWS CLI는 명령줄을 사용하여 버킷에 저장된 파일을 검토, 업로드, 이동 또는 삭제할 수 있도록 해줍니다.AWS CLI 클라이언트를 설치 및 구성하는 방법은 AWS 명령줄 인터페이스로 설정을 참조하십시오.

한 예로, 동기화 명령을 사용하면 로컬 폴더(source) 및 버킷(destination)과 파일을 주고 받을 수 있습니다.

$ aws s3 sync {source destination} [--options]

다음의 명령은 현재 로컬 폴더에서 나온 모든 파일을 path에 정의된 웹 앱 버킷의 폴더로 동기화합니다.

$ aws s3 sync . s3://my-web-app-bucket/path

AWS CLI를 사용하여 Amazon S3을 관리하는 방법에 대한 자세한 내용은 AWS 명령줄 인터페이스와 함께Amazon S3 사용을 참조하십시오

Amazon S3 콘솔을 사용하여 버킷 관리

Amazon S3 콘솔을 사용하여 버킷에 저장된 파일을 검토, 업로드, 삭제하려면 다음 절차를 따르십시오.

1. 프로젝트의 루트에서 다음을 실행합니다.

awsmobile console

2. 프로젝트의 이름이 있는 타일을 선택한 다음, 호스팅 및 스트리밍 타일을 선택합니다.3. Manage files(파일 관리)라는 레이블이 지정된 링크를 선택하여 Amazon S3 콘솔에서 버킷의 콘텐츠를 표

시합니다.

159

Page 163: AWS Mobile Hub 개발자 안내서 - 개발자 안내서 · 2020-02-07 · iOS - Swift 1.iOS를 플랫폼으로 선택하고 다음을 선택합니다. 2.Download Cloud Config(클라우드

AWS Mobile Hub 개발자 안내서 개발자 안내서웹

AWS Mobile Hub 콘솔의 기타 유용한 기능

Mobile Hub 콘솔에서는 웹 콘텐츠를 검색하고, 이 페이지의 AWS CLI 콘텐츠로 돌아올 수 있는 편리한 방법과 기타 관련 작업을 제공합니다. 다음이 포함됩니다.

• View from S3(S3에서 보기) 링크는 버킷의 웹 콘텐츠를 검색합니다. 호스팅 및 스트리밍이 활성화되면 버킷은 즉시 볼 수 있는 기본 웹 앱 파일용 파일로 채워집니다.

• View from CloudFront(CloudFront에서 보기)는 버킷에서 CDN으로 전파된 웹 콘텐츠를 검색합니다. 엔드포인트 전파 속도는 네트워크 상황에 따라 달라집니다. 콘텐츠가 한 시간 내에 배포되어 볼 수 있게 된다고예상하시면 됩니다.

• Sync files with the command line(명령줄을 사용해 파일 동기화) 링크를 클릭하면 버킷에서 명령줄을 사용하여 웹 앱 및 미디어 파일 스트리밍을 관리하는 방법에 관해 설명하는 이 페이지로 이동합니다.

웹 앱에 대한 사용자 지정 도메인 구성

웹 앱에 연결하기 위해 사용자 지정 도메인을 사용하려면 Route 53 서비스를 사용하여 DNS 라우팅을 구성합니다.

160

Page 164: AWS Mobile Hub 개발자 안내서 - 개발자 안내서 · 2020-02-07 · iOS - Swift 1.iOS를 플랫폼으로 선택하고 다음을 선택합니다. 2.Download Cloud Config(클라우드

AWS Mobile Hub 개발자 안내서 개발자 안내서웹

단일 위치에서 호스팅되는 웹 앱의 경우 Amazon S3 버킷에서 호스팅되는 웹 사이트로 트래픽 라우팅을 참조하십시오.

글로벌 CDN을 통해 배포되는 웹 앱의 경우 도메인 이름을 사용하여 Amazon CloudFront 웹 배포로 트래픽라우팅을 참조하십시오.

AWS Mobile Hub 기능Important

백엔드를 구성하기 위해 이미 AWS Mobile CLI를 사용하고 있다면 다음 콘텐츠가 적용됩니다.새 모바일 또는 웹 앱을 빌드하거나 기존 앱에 클라우드 기능을 추가하고 있다면 대신 새 AWSAmplify CLI를 사용하십시오. 새 Amplify CLI를 사용하면 추가 워크플로우를 제공하는 AWSCloudFormation 기능을 포함하여 AWS Amplify CLI Toolchain 공개에 설명된 모든 기능을 사용할수 있습니다.

다음 페이지에는 웹용 AWS Mobile CLI(JavaScript)에 대한 참조 자료가 포함되어 있습니다.

주제• AWS Mobile CLI 참조 (p. 161)• AWS Mobile CLI 사용자 자격 증명 (p. 170)• AWS CloudTrail을 사용하여 AWS Mobile CLI API 호출 로깅 (p. 172)

AWS Mobile CLI 참조Important

백엔드를 구성하기 위해 이미 AWS Mobile CLI를 사용하고 있다면 다음 콘텐츠가 적용됩니다.새 모바일 또는 웹 앱을 빌드하거나 기존 앱에 클라우드 기능을 추가하고 있다면 대신 새 AWSAmplify CLI를 사용하십시오. 새 Amplify CLI를 사용하면 추가 워크플로우를 제공하는 AWSCloudFormation 기능을 포함하여 AWS Amplify CLI Toolchain 공개에 설명된 모든 기능을 사용할수 있습니다.

AWS Mobile CLI는 AWS 서비스를 원활하게 활성화하여 자신의 앱 안에 구성할 수 있도록 프런트엔드JavaScript 개발자를 위한 명령줄 인터페이스를 제공합니다. 최소한의 구성으로 즐겨 사용하는 터미널 프로그램에서 AWS Mobile Hub에서 제공하는 모든 기능을 사용할 수 있습니다.

설치 및 사용

이 단원에서는 JavaScript용 awsmobile CLI의 사용법과 핵심 명령에 대해 자세히 설명합니다.

AWS Mobile CLI 설치

1. AWS 프리 티어에 가입합니다.2. Node.js(NPM)를 설치합니다.3. AWS Mobile CLI 설치

npm install -g awsmobile-cli

4. AWS 자격 증명을 사용하여 CLI 구성

CLI에 사용되는 도구 체인에 대한 권한을 설정하려면 다음을 실행합니다.

awsmobile configure

자격 증명을 지정하라는 메시지가 표시되면 CLI에서 제공하는 단계를 따릅니다. 자세한 내용은 AWSMobile CLI에 IAM 자격 증명 제공 (p. 170)을 참조하십시오.

161

Page 165: AWS Mobile Hub 개발자 안내서 - 개발자 안내서 · 2020-02-07 · iOS - Swift 1.iOS를 플랫폼으로 선택하고 다음을 선택합니다. 2.Download Cloud Config(클라우드

AWS Mobile Hub 개발자 안내서 개발자 안내서웹

사용량

AWS Mobile CLI 사용법은 다양한 산업 표준 명령줄 인터페이스와 비슷하게 설계되었습니다.

awsmobile <command> [options]

help 및 version 옵션은 모든 명령에 공통됩니다. 일부 명령을 위한 추가 특수 옵션은 관련 단원에서 자세히 설명합니다.

-V, --version output the version number-h, --help output usage information

예:

awsmobile -helporawsmobile init --help

CLI 명령 요약

아래에는 awsmobile CLI가 지원하는 현재의 명령 집합이 나와 있습니다.

awsmobile init (p. 163) 새 Mobile Hub 프로젝트를 초기화하고 IAM 키를 확인하며 aws-exports.js 파일을 가져옵니다.

awsmobile configure (p. 164) 기존 키를 표시하고 이미 설정된 경우 변경할 수 있도록 합니다. 키가 설정되지 않은 경우 사용자를IAM 콘솔에 단단히 연결하여 키를 생성하고 나서 액세스 키 및 보안 키를 묻는 메시지를 표시합니다. 이명령은 AWS 계정 또는 프로젝트에 대한 구성 설정을 편집하는 데 도움이 됩니다.

awsmobile pull (p. 164) Mobile Hub 프로젝트에서 최신 aws-exports.js,YAML 또는 기타 관련 프로젝트에 대한 자세한 정보를 다운로드합니다.

awsmobile push (p. 164) 로컬 메타데이터, Lambda 코드, DynamoDB 정의또는 다른 관련 프로젝트 세부 정보를 Mobile Hub로업로드합니다.

awsmobile publish (p. 165) awsmobile push를 실행한 후 클라이언트 측 애플리케이션을 빌드하고 S3 및 Cloud Front에 게시합니다.

awsmobile run (p. 165) awsmobile push를 실행하고 나서 프로젝트의 시작 명령을 실행하여 클라이언트 측 애플리케이션 실행을 테스트합니다.

awsmobile console (p. 165) 기본 브라우저에서 awsmobile Mobile Hub 프로젝트의 웹 콘솔을 엽니다.

awsmobile features (p. 166) 사용 가능하고 활성화된 기능을 표시합니다. 기능을선택하거나 선택 취소합니다.

awsmobile <feature-name> enable [--prompt] (p. 166)

기능을 기본값으로 활성화합니다(그리고 변경 여부를 묻는 메시지 표시)

162

Page 166: AWS Mobile Hub 개발자 안내서 - 개발자 안내서 · 2020-02-07 · iOS - Swift 1.iOS를 플랫폼으로 선택하고 다음을 선택합니다. 2.Download Cloud Config(클라우드

AWS Mobile Hub 개발자 안내서 개발자 안내서웹

awsmobile <feature-name> disable (p. 167) 기능을 비활성화합니다.

awsmobile <feature-name> configure (p. 168) add-table, add-api 등 기능 관련 하위 명령을 포함합니다.

awsmobile cloud-api invoke <apiname> <method><path> [init] (p. 169)

로컬로 테스트하기 위해 API를 호출합니다. 이렇게하면 서명되지 않은 API를 로컬 환경에서 신속히 테스트할 수 있습니다.

awsmobile delete (p. 170) Mobile hub 프로젝트를 삭제합니다.

awsmobile help [cmd] (p. 170) [cmd] 관련 도움말을 표시합니다.

init

awsmobile init 명령은 새 Mobile Hub 프로젝트를 초기화하고 IAM 키를 확인하며 aws-exports.js 파일을가져옵니다.

awsmobile init 명령은 두 가지 방식으로 사용됩니다.

1. awsmobilejs 기능을 사용하여 현재 프로젝트 초기화

awsmobile init

메시지가 표시되면 이러한 프로젝트 구성을 설정합니다.

Please tell us about your project:? Where is your project's source directory: src? Where is your project's distribution directory that stores build artifacts: build? What is your project's build command: npm run-script build? What is your project's start command for local test run: npm run-script start

? What awsmobile project name would you like to use: my-mobile-project

AWS Mobile CLI가 프런트엔드 코드에 쉽게 사용할 수 있도록 최신 aws-exports.js를 복사해 올 소스디렉터리입니다. 이 파일은 기능이 추가되거나 제거될 때마다 자동으로 업데이트됩니다. 잘못되었거나 사용할 수 없는 폴더를 지정하면 파일이 복사되지 않습니다.

배포 디렉터리는 기본적으로 프로젝트의 빌드 디렉터리입니다. 이 기능은 awsmobile publish 프로세스 중에 사용됩니다.

프로젝트의 빌드 값과 시작 값은 각각 awsmobile publish 및 awsmobile run 명령 중에 사용됩니다.

awsmobile 프로젝트 이름은 Mobile Hub에서 생성된 백엔드 프로젝트의 이름입니다.

awsmobile configure project (p. 164) 명령을 사용하여 프로젝트 설정을 변경할 수 있습니다.2. 기존 awsmobile 프로젝트를 초기화하고 백엔드로서 연결합니다.

awsmobile init <awsmobile-project-id>

awsmobile-project-id는 Mobile Hub의 기존 백엔드 프로젝트 ID입니다. 이 명령은 기존 백엔드 프로젝트를앱에 연결할 수 있도록 도와줍니다.

3. 연결된 awsmobile 프로젝트를 백엔드에서 제거합니다.

awsmobile init --remove

163

Page 167: AWS Mobile Hub 개발자 안내서 - 개발자 안내서 · 2020-02-07 · iOS - Swift 1.iOS를 플랫폼으로 선택하고 다음을 선택합니다. 2.Download Cloud Config(클라우드

AWS Mobile Hub 개발자 안내서 개발자 안내서웹

이 명령은 앱과 연결된 백엔드 프로젝트를 제거하고 연결된 파일을 정리합니다. 이렇게 해도 앱은 변경되지 않으며, 백엔드 프로젝트 자체만 제거됩니다.

configure

awsmobile configure는 기존 키를 표시하며 이미 설정된 경우 이러한 키를 변경할 수 있도록 합니다. 키가 설정되지 않은 경우 사용자를 IAM 콘솔에 단단히 연결하여 키를 생성하고 나서 액세스 키 및 보안 키를 묻는 메시지를 표시합니다. 이 명령은 두 가지 방식으로 사용할 수 있습니다. 선택한 인수에 따라 이 명령을 사용하여 AWS 계정 설정 또는 프로젝트 설정 사항을 설정하거나 변경할 수 있습니다.

awsmobile configure [aws|project]

1. aws 인수를 사용하여 AWS 계정 설정 구성. 이는 이 명령의 기본 인수입니다.

awsmobile configureorawsmobile configure aws

아래와 같이 AWS 계정 자격 증명을 설정하기 위한 질문이 표시됩니다.

configure aws? accessKeyId: <ACCESS-KEY-ID>? secretAccessKey: <SECRET-ACCESS-KEY>? region: <SELECT-REGION-FROM-THE-LIST>

2. project 인수를 사용하여 프로젝트 설정 구성

awsmobile configure project

아래 설명된 바와 같이 프로젝트를 구성하기 위한 질문이 표시됩니다.

? Where is your project's source directory: src? Where is your project's distribution directory to store build artifacts: dist? What is your project's build command: npm run-script build? What is your project's start command for local test run: npm run-script start

3. --list 옵션을 사용하여 AWS 자격 증명을 검색 및 표시

awsmobile configure --list

pull

awsmobile pull 명령은 최신 Mobile Hub 프로젝트에서 aws-exports.js, YAML 및 관련 클라우드/백엔드아티팩트를 로컬 개발 환경으로 다운로드합니다. Mobile Hub에서 프로젝트를 수정했으며 로컬 환경에서 최신 프로젝트를 가져오려면 이 명령을 사용합니다.

awsmobile pull

push

awsmobile push는 로컬 메타데이터, Lambda 코드, Dynamo 정의 및 관련 아티팩트를 모두 Mobile Hub에업로드합니다. 로컬 환경에서 기능을 활성화, 비활성화 또는 구성하는 경우와 Mobile Hub에서 백엔드 프로젝트를 관련 업데이트 사항으로 업데이트하려는 경우 이 명령을 사용합니다.

164

Page 168: AWS Mobile Hub 개발자 안내서 - 개발자 안내서 · 2020-02-07 · iOS - Swift 1.iOS를 플랫폼으로 선택하고 다음을 선택합니다. 2.Download Cloud Config(클라우드

AWS Mobile Hub 개발자 안내서 개발자 안내서웹

awsmobile push

awsmobile push, awsmobile features, awsmobile <feature> enable 또는 awsmobile<feature> disable를 사용한 후 awsmobile <feature> configure를 사용하여 백엔드 프로젝트를적절히 업데이트합니다. 이 명령은 각 변경 후에 사용하거나 모든 변경이 로컬로 수행된 후 한 번만 사용할수 있습니다.

publish

awsmobile publish 명령은 먼저 awsmobile push 명령을 실행한 후 클라이언트 측 코드를 빌드하여Amazon S3 호스팅 버킷에 게시합니다. 이 명령은 호스팅을 위해 클라이언트 애플리케이션을 s3 버킷에 게시한 후 브라우저를 열어 인덱스 페이지를 표시합니다. 이 명령은 배포 전에 필요할 경우 타임스탬프를 확인하여 앱을 자동으로 빌드합니다. 이 명령은 클라이언트가 백엔드 프로젝트 기능에서 호스팅을 선택했는지 여부를 확인하며, 선택하지 않은 경우 클라이언트에 백엔드를 호스팅 기능으로 업데이트하라는 메시지를 표시합니다.

awsmobile publish

publish 명령에는 사용할 옵션이 여러 개 있습니다.

1. Cloud Front 배포 새로 고침

awsmobile publish -c orawsmobile publish --cloud-front

2. AWS Device Farm에서 애플리케이션 테스트

awsmobile publish -torawsmobile publish --test

3. AWS Device Farm에서 테스트 제한

awsmobile publish -n

4. 백엔드를 업데이트하지 않은 상태에서만 프런트 엔드 게시

awsmobile publish -forawsmobile publish --frontend-only

run

awsmobile run 명령은 먼저 awsmobile push 명령을 실행한 후 npm run start 또는 npm run ios같은 프로젝트 구성에서 설정한 start 명령을 실행합니다. 이 명령은 클라우드에 게시되는 최신 백엔드 개발을 사용하여 애플리케이션을 로컬로 편리하게 테스트하는 데 사용할 수 있습니다.

awsmobile run

console

awsmobile console 명령은 기본 브라우저에서 awsmobile Mobile Hub 프로젝트의 웹 콘솔을 엽니다.

awsmobile console

165

Page 169: AWS Mobile Hub 개발자 안내서 - 개발자 안내서 · 2020-02-07 · iOS - Swift 1.iOS를 플랫폼으로 선택하고 다음을 선택합니다. 2.Download Cloud Config(클라우드

AWS Mobile Hub 개발자 안내서 개발자 안내서웹

features

awsmobile features 명령은 모든 사용 가능한 awsmobile 기능을 표시하고 이러한 기능을 개별적으로 로컬로 활성화/비활성화할 수 있도록 합니다. 화살표 키를 사용하여 위/아래로 스크롤하고 스페이스 키를 사용하여 각 기능을 활성화/비활성화합니다. 변경이 로컬로만 수행되므로 클라우드에서 awsmobile 프로젝트를업데이트하려면 awsmobile push를 실행합니다.

awsmobile features

AWS Mobile CLI에서 지원되는 기능은 다음과 같습니다.

• user-signin(Amazon Cognito)• user-files(Amazon S3)• cloud-api(Lambda/API 게이트웨이)• database(DynamoDB)• analytics(Amazon Pinpoint)• hosting(Amazon S3 및 CloudFront)

? select features: (Press <space> to select, <a> to toggle all, <i> to inverse selection)## user-signin # user-files # cloud-api # database # analytics # hosting

기능을 비활성화할 때는 각별히 주의하십시오. 기능을 비활성화하면 모든 관련 객체(API, Lambda 함수, 테이블 등)가 삭제됩니다. 기능을 다시 활성화하더라도 이러한 아티팩트를 로컬로 복구할 수 없습니다.

awsmobile push을 사용한 후 awsmobile <feature> disable를 사용하여 AWS Mobile Hub 프로젝트의 백엔드 프로젝트를 선택한 기능으로 업데이트합니다.

enable

awsmobile <feature> enable은 기본 설정을 사용하여 지정된 기능을 활성화합니다. 변경이 로컬로만수행되므로 클라우드에서 AWS Mobile 프로젝트를 업데이트하려면 awsmobile push를 실행합니다.

awsmobile <feature> enable

AWS Mobile CLI에서 지원되는 기능은 다음과 같습니다.

• user-signin(Amazon Cognito)• user-files(Amazon S3)• cloud-api(Lambda/API 게이트웨이)• database(DynamoDB)• analytics(Amazon Pinpoint)• hosting(Amazon S3 및 CloudFront)

awsmobile <feature> enable --prompt 하위 명령을 사용하면 사용자는 기본 설정을 사용하는 대신에 활성화할 Mobile Hub 기능의 세부 정보를 지정할 수 있습니다. 질문 목록에 답변하여 기능을 자세히 지정하라는 메시지가 사용자에게 표시됩니다.

awsmobile <feature> enable -- prompt

166

Page 170: AWS Mobile Hub 개발자 안내서 - 개발자 안내서 · 2020-02-07 · iOS - Swift 1.iOS를 플랫폼으로 선택하고 다음을 선택합니다. 2.Download Cloud Config(클라우드

AWS Mobile Hub 개발자 안내서 개발자 안내서웹

user-signin 기능을 활성화하면 활성화 방식을 변경하거나 고급 설정을 구성하거나 프로젝트에 대한 로그인 기능을 비활성화하라는 메시지가 표시됩니다. 원하는 옵션을 선택하면 추가 질문이 표시될 수도 있습니다.

awsmobile user-signin enable --prompt

? Sign-in is currently disabled, what do you want to do next (Use arrow keys)# Enable sign-in with default settings Go to advance settings

user-files 옵션과 함께 --prompt 기능을 활성화하면 사용자 파일에 대해 S3의 사용을 확인하라는 메시지가 표시됩니다.

awsmobile user-files enable --prompt

? This feature is for storing user files in the cloud, would you like to enable it? Yes

cloud-api와 함께 --prompt 기능을 활성화하면 프로젝트와 관련된 API를 생성, 제거 또는 편집하라는 메시지가 표시됩니다. 원하는 옵션을 선택하면 추가 질문이 표시될 수도 있습니다.

awsmobile cloud-api enable --prompt

? Select from one of the choices below. (Use arrow keys) # Create a new API

database와 함께 --prompt 기능을 활성화하면 프로젝트와 관련된 데이터베이스 테이블 세부 정보를 지정하기 위한 초기 질문이 표시됩니다. 원하는 옵션을 선택하면 추가 질문이 표시될 수도 있습니다.

awsmobile database enable --prompt

? Should the data of this table be open or restricted by user? (Use arrow keys)# Open Restricted

analytics와 함께 --prompt 기능을 활성화하면 Pinpoint Analytics의 사용을 확인하라는 메시지가 표시됩니다.

awsmobile analytics enable --prompt

? Do you want to enable Amazon Pinpoint analytics? (y/N)

hosting와 함께 --prompt 기능을 활성화하면 CloudFront 배포에서 호스팅 및 스트리밍을 확인하라는 메시지가 표시됩니다.

awsmobile hosting enable --prompt

? Do you want to host your web app including a global CDN? (y/N)

awsmobile <feature> enable을 사용한 후 awsmobile push를 실행하여 클라우드에서 awsmobile프로젝트를 업데이트합니다.

disable

awsmobile <feature> disable은 백엔드 프로젝트에서 기능을 비활성화합니다. 기능을 비활성화할 때는 각별히 주의하십시오. 기능을 비활성화하면 모든 관련 객체(API, Lambda 함수, 테이블 등)가 삭제됩니다.기능을 다시 활성화하더라도 이러한 아티팩트를 로컬로 복구할 수 없습니다.

167

Page 171: AWS Mobile Hub 개발자 안내서 - 개발자 안내서 · 2020-02-07 · iOS - Swift 1.iOS를 플랫폼으로 선택하고 다음을 선택합니다. 2.Download Cloud Config(클라우드

AWS Mobile Hub 개발자 안내서 개발자 안내서웹

awsmobile <feature> disable

AWS Mobile CLI에서 지원되는 기능은 다음과 같습니다.

• user-signin(Amazon Cognito)• user-files(Amazon S3)• cloud-api(Lambda/API 게이트웨이)• database(DynamoDB)• analytics(Amazon Pinpoint)• hosting `

awsmobile push을 사용한 후 awsmobile <feature> disable를 사용하여 AWS Mobile Hub 프로젝트의 백엔드 프로젝트를 비활성화된 기능으로 업데이트합니다.

configure

awsmobile <feature> configure는 선택한 기능에서 객체를 구성합니다. 이 구성은 특정 아티팩트를추가, 삭제 또는 업데이트함을 의미할 수도 있습니다. 이 명령은 특정 기능이 이미 활성화된 경우에만 사용할수 있습니다.

awsmobile <feature> configure

AWS Mobile CLI에서 지원되는 기능은 다음과 같습니다.

• user-signin(Amazon Cognito)• user-files(Amazon S3)• cloud-api(Lambda/API 게이트웨이)• database(DynamoDB)• analytics(Amazon Pinpoint)• hosting(Amazon S3 및 CloudFront)

user-signin 기능을 구성하면 활성화 방식을 변경하거나 고급 설정을 구성하거나 프로젝트에 대한 로그인 기능을 비활성화하라는 메시지가 표시됩니다. 원하는 옵션을 선택하면 추가 질문이 표시될 수도 있습니다.

awsmobile user-signin configure

? Sign-in is currently enabled, what do you want to do next (Use arrow keys)# Configure Sign-in to be required (Currently set to optional) Go to advance settings Disable sign-in

user-files 기능을 구성하면 사용자 파일에 대해 S3의 사용을 확인하라는 메시지가 표시됩니다.

awsmobile user-files configure

? This feature is for storing user files in the cloud, would you like to enable it? (Y/n)

cloud-api 기능을 구성하면 프로젝트와 관련된 API를 생성, 제거 또는 편집하라는 메시지가 표시됩니다.원하는 옵션을 선택하면 추가 질문이 표시될 수도 있습니다.

awsmobile cloud-api configure

168

Page 172: AWS Mobile Hub 개발자 안내서 - 개발자 안내서 · 2020-02-07 · iOS - Swift 1.iOS를 플랫폼으로 선택하고 다음을 선택합니다. 2.Download Cloud Config(클라우드

AWS Mobile Hub 개발자 안내서 개발자 안내서웹

? Select from one of the choices below. (Use arrow keys)# Create a new API Remove an API from the project Edit an API from the project

database 기능을 구성하면 프로젝트와 관련된 테이블을 생성, 제거 또는 편집하라는 메시지가 표시됩니다.원하는 옵션을 선택하면 추가 질문이 표시될 수도 있습니다.

awsmobile database configure

? Select from one of the choices below. (Use arrow keys) # Create a new table Remove table from the project Edit table from the project

analytics 기능을 구성하면 Pinpoint Analytics의 사용을 확인하라는 메시지가 표시됩니다.

awsmobile analytics configure

? Do you want to enable Amazon Pinpoint analytics? Yes

hosting 기능을 구성하면 CloudFront 배포에서 호스팅 및 스트리밍을 확인하라는 메시지가 표시됩니다.

awsmobile hosting configure

? Do you want to host your web app including a global CDN? Yes

awsmobile push를 사용한 후 awsmobile <feature> configure를 사용하여 AWS Mobile Hub 프로젝트의 백엔드 프로젝트를 구성된 기능으로 업데이트합니다.

invoke

awsmobile cloud-api invoke는 테스트용 API를 로컬로 호출합니다. 이 명령을 사용하면 해당 인수를전달하여 서명되지 않은 API를 로컬로 신속히 테스트할 수 있습니다. 이 명령은 API/Lambda 함수의 디버깅이나 개발 환경에 사용하기 위한 것입니다.

awsmobile cloud-api invoke <apiname> <method> <path> [init]

예를 들면 아래와 같이 sampleCloudApi post 메서드를 호출할 수 있습니다.

awsmobile cloud-api invoke sampleCloudApi post /items '{"body":{"test-key":"test-value"}}'

위의 테스트는 다음과 같은 값을 반환합니다.

{ success: 'post call succeed!', url: '/items', body: { 'test-key': 'test-value' } }

마찬가지로 아래와 같이 sampleCloudApi get 메서드를 호출할 수 있습니다.

awsmobile cloud-api invoke sampleCloudApi get /items

위의 테스트는 다음과 같은 값을 반환합니다.

{ success: 'get call succeed!', url: '/items' }

169

Page 173: AWS Mobile Hub 개발자 안내서 - 개발자 안내서 · 2020-02-07 · iOS - Swift 1.iOS를 플랫폼으로 선택하고 다음을 선택합니다. 2.Download Cloud Config(클라우드

AWS Mobile Hub 개발자 안내서 개발자 안내서웹

삭제

awsmobile delete 명령은 클라우드에서 Mobile Hub 프로젝트를 삭제합니다. 이 명령을 실행하기로 한경우에는 각별히 주의하십시오. 이 명령은 팀 작업에 취소 불가능한 영향을 미칠 수 있기 때문입니다. 이 명령이 실행되고 나면 Mobile Hub 프로젝트가 삭제되며 복구할 수 없습니다.

awsmobile delete

help

awsmobile help 명령은 독립 실행형 명령으로 사용하거나 도움이 필요한 명령 이름에 인수로 전달할 수도 있습니다. 이렇게 하면 함께 사용할 수 있는 옵션을 포함하여 해당 명령에 대한 사용 정보가 제공됩니다.

예:

awsmobile helporawsmobile help init

이 페이지의 시작 부분에 자세히 설명된 --help 옵션과 awsmobile help 명령은 동일한 상세 수준을 제공합니다. 사용법만 다를 뿐입니다.

AWS Mobile CLI 사용자 자격 증명Important

백엔드를 구성하기 위해 이미 AWS Mobile CLI를 사용하고 있다면 다음 콘텐츠가 적용됩니다.새 모바일 또는 웹 앱을 빌드하거나 기존 앱에 클라우드 기능을 추가하고 있다면 대신 새 AWSAmplify CLI를 사용하십시오. 새 Amplify CLI를 사용하면 추가 워크플로우를 제공하는 AWSCloudFormation 기능을 포함하여 AWS Amplify CLI Toolchain 공개에 설명된 모든 기능을 사용할수 있습니다.

개요

CLI를 처음 설정하면 AWS 사용자 자격 증명을 제공하라는 메시지가 표시됩니다. 이 자격 증명을 통해 CLI에서 사용자 대신 AWS 서비스를 관리할 수 있는 권한이 설정됩니다. 이 자격 증명은 CLI가 사용되는 계정에서관리자 권한을 갖고 있는 AWS IAM 사용자에 속해야 합니다.

권한

관리자 권한은 AWS 계정 관리자가 부여합니다. 관리자 권한이 없는 경우 AWS 계정 관리자에게 권한 부여를 요청해야 합니다.

계정 소유자이고 해당 계정의 루트 자격 증명으로 로그인한 경우 관리자 권한을 갖게 되거나AdministratorAccess 관리 정책을 사용해 스스로에게 관리자 권한을 부여할 수 있습니다. 루트 자격 증명을 사용하는 대신, 자신의 계정에 새 IAM 사용자를 생성하여 AWS 서비스에 액세스하는 것이 가장 좋습니다.

자세한 내용은 Mobile Hub 프로젝트에 대한 액세스 제어 (p. 213)를 참조하십시오.

계정 사용자 자격 증명 얻기

관리자 권한을 갖고 있다면 CLI를 제공하기 위해 필요한 값은 IAM 사용자의 액세스 키 ID와 보안 액세스 키입니다. 관리자 권한이 없다면 관리자에게서 이 값을 얻어야 합니다.

AWS CLI에 대한 ID와 키를 제공하려면 CLI 프롬프트에 따라 AWS에 로그인하여 사용자 이름과 AWS리전을 제공합니다. 그러면 CLI가 AWS IAM 콘솔 Add user(사용자 추가) 대화 상자를 여는데, 여기에는AdministratorAccess 정책이 연결되어 있고 Programmatic access(프로그래밍 방식 액세스) 옵션이 기본값으로 선택되어 있습니다.

주제

170

Page 174: AWS Mobile Hub 개발자 안내서 - 개발자 안내서 · 2020-02-07 · iOS - Swift 1.iOS를 플랫폼으로 선택하고 다음을 선택합니다. 2.Download Cloud Config(클라우드

AWS Mobile Hub 개발자 안내서 개발자 안내서웹

• 새 사용자에 대한 자격 증명 받기 (p. 171)• 기존 사용자의 자격 증명 받기 (p. 172)

새 사용자에 대한 자격 증명 받기

1. Next: Permissions(다음: 권한)를 선택한 다음 Create user(사용자 생성)를 선택합니다.

또는 연결된 AdministratorAccess가 연결된 그룹에 사용자를 추가할 수도 있습니다.

2. Create user를 선택합니다.3. 표시된 테이블에서 값을 복사하거나 Download .csv(.csv 다운로드)를 선택하여 값을 로컬로 저장한 다음,

이 값을 프롬프트에 입력합니다.

171

Page 175: AWS Mobile Hub 개발자 안내서 - 개발자 안내서 · 2020-02-07 · iOS - Swift 1.iOS를 플랫폼으로 선택하고 다음을 선택합니다. 2.Download Cloud Config(클라우드

AWS Mobile Hub 개발자 안내서 개발자 안내서웹

자세한 단계는 관리자 권한이 있는 새 계정 사용자 추가 (p. 215)를 참조하십시오.

기존 사용자의 자격 증명 받기

1. 취소를 선택합니다.2. 왼쪽에서 사용자를 선택한 후 목록에서 해당되는 사용자를 선택합니다. Security credentials(보안 자격 증

명)를 선택한 후 Create access key(액세스 키 생성)를 선택합니다.

AWS CloudTrail을 사용하여 AWS Mobile CLI API 호출 로깅Important

백엔드를 구성하기 위해 이미 AWS Mobile CLI를 사용하고 있다면 다음 콘텐츠가 적용됩니다.새 모바일 또는 웹 앱을 빌드하거나 기존 앱에 클라우드 기능을 추가하고 있다면 대신 새 AWSAmplify CLI를 사용하십시오. 새 Amplify CLI를 사용하면 추가 워크플로우를 제공하는 AWSCloudFormation 기능을 포함하여 AWS Amplify CLI Toolchain 공개에 설명된 모든 기능을 사용할수 있습니다.

AWS Mobile CLI는 CLI의 사용자, 역할 또는 AWS 서비스가 수행한 작업에 대한 레코드를 제공하는 서비스인 AWS CloudTrail과 통합됩니다. CloudTrail은 CLI API에 대한 코드 호출의 호출을 비롯하여 CLI에 대한 모든 API 호출을 이벤트로 캡처합니다. 추적을 생성하면 CLI 이벤트를 비롯하여 CloudTrail 이벤트를Amazon S3 버킷으로 지속적으로 배포하도록 할 수 있습니다. 추적을 구성하지 않은 경우 이벤트 기록에서CloudTrail 콘솔의 최신 이벤트를 볼 수도 있습니다. CloudTrail에서 수집하는 정보를 사용하여 CLI에 보내진요청, 요청이 수행된 IP 주소, 요청을 수행한 사람, 요청이 수행된 시간 및 추가 세부 정보를 확인할 수 있습니다.

CloudTrail에 대한 자세한 내용은 AWS CloudTrail 사용 설명서를 참조하십시오.

CloudTrail의 AWS Mobile CLI 정보

CloudTrail은 계정 생성 시 AWS 계정에서 활성화됩니다. 활동이 AWS Mobile CLI에서 이루어지면 해당 활동이 Event history(이벤트 기록)의 다른 AWS 서비스 이벤트와 함께 CloudTrail 이벤트에 기록됩니다. AWS 계정에서 최신 이벤트를 확인, 검색 및 다운로드할 수 있습니다. 자세한 내용은 CloudTrail 이벤트 내역을 사용하여 이벤트 보기를 참조하십시오.

AWS Mobile CLI 이벤트를 비롯하여 AWS 계정의 실시간 이벤트 기록을 보유하려면 추적을 생성하십시오.추적은 CloudTrail이 Amazon S3 버킷으로 로그 파일을 전송할 수 있도록 합니다. 콘솔에서 추적을 생성하면기본적으로 모든 리전에 추적이 적용됩니다. 추적은 AWS 파티션에 있는 모든 리전의 이벤트를 로깅하고 지정된 Amazon S3 버킷으로 로그 파일을 전송합니다. 또는 CloudTrail 로그에서 수집된 이벤트 데이터를 추가분석 및 처리하도록 다른 AWS 서비스를 구성할 수 있습니다. 자세한 내용은 다음을 참조하십시오.

• 추적 생성 개요• CloudTrail 지원 서비스 및 통합• CloudTrail에 대한 Amazon SNS 알림 구성• 여러 리전에서 CloudTrail 로그 파일 받기 및 여러 계정에서 CloudTrail 로그 파일 받기

모든 AWS Mobile CLI 작업은 CloudTrail에 의해 로깅되고 AWS Mobile CLI API 참조 (p. 161)에 설명되어있습니다. 예를 들어 awsmobile init, awsmobile pull 및 awsmobile push를 호출하면 CloudTrail로그 파일에 항목이 생성됩니다.

모든 이벤트 및 로그 항목에는 요청을 생성한 사용자에 대한 정보가 들어 있습니다. 자격 증명 정보를 이용하면 다음을 쉽게 판단할 수 있습니다.

• 요청을 루트로 했는지 아니면 AWS Identity and Access Management(IAM) 사용자 자격 증명으로 했는지여부

• 역할 또는 연합된 사용자에 대한 임시 보안 자격 증명을 사용하여 요청이 생성되었는지 여부.• 요청이 다른 AWS 서비스에 의해 이루어졌는지.

172

Page 176: AWS Mobile Hub 개발자 안내서 - 개발자 안내서 · 2020-02-07 · iOS - Swift 1.iOS를 플랫폼으로 선택하고 다음을 선택합니다. 2.Download Cloud Config(클라우드

AWS Mobile Hub 개발자 안내서 개발자 안내서React Native

자세한 내용은 CloudTrail userIdentity 요소를 참조하십시오.

AWS Mobile ClI 로그 파일 항목 이해

추적은 지정한 Amazon S3 버킷에 이벤트를 로그 파일로 제공할 수 있도록 해 주는 구성입니다. CloudTrail로그 파일에는 하나 이상의 로그 항목이 포함됩니다. 이벤트는 어떤 소스로부터의 단일 요청을 나타내며 요청된 작업, 작업 날짜와 시간, 요청 파라미터 등에 대한 정보가 들어 있습니다. CloudTrail 로그 파일은 퍼블릭API 호출의 주문 스택 추적이 아니기 때문에 특정 순서로 표시되지 않습니다.

다음은 ListProjects 작업을 보여 주는 CloudTrail 로그 항목이 나타낸 예제입니다.

{ "eventVersion": "1.05", "userIdentity": { "type": "IAMUser", "principalId": "ABCDEFGHIJK0123456789", "arn": "arn:aws:iam::012345678901:user/Administrator", "accountId": "012345678901", "accessKeyId": "ABCDEFGHIJK0123456789", "userName": "YOUR_ADMIN_USER_NAME" }, "eventTime": "2017-12-18T23:10:13Z", "eventSource": "mobilehub.amazonaws.com", "eventName": "ListProjects", "awsRegion": "us-west-2", "sourceIPAddress": "111.111.111.111", "userAgent": "aws-cli/1.11.140 Python/2.7.13 Darwin/15.6.0 botocore/1.6.7 ", "requestParameters": { "maxResults": 0 }, "responseElements": { "projects": [{ "name": "YOUR_PROJECT_NAME-0123456789012", "projectId": "abcd0123-0123-0123-0123-abcdef012345" }] }, "requestID": "abcd0123-0123-0123-0123-abcdef012345", "eventID": "abcd0123-0123-0123-0123-abcdef012345", "eventType": "AwsApiCall", "recipientAccountId": "012345678901"}

React Native용 AWS Amplify 라이브러리Important

백엔드를 구성하기 위해 이미 AWS Mobile CLI를 사용하고 있다면 다음 콘텐츠가 적용됩니다.새 모바일 또는 웹 앱을 빌드하거나 기존 앱에 클라우드 기능을 추가하고 있다면 대신 새 AWSAmplify CLI를 사용하십시오. 새 Amplify CLI를 사용하면 추가 워크플로우를 제공하는 AWSCloudFormation 기능을 포함하여 AWS Amplify CLI Toolchain 공개에 설명된 모든 기능을 사용할수 있습니다.

AWS Amplify는 클라우드 지원 애플리케이션을 빌드하는 프런트엔드 및 모바일 개발자를 위한 오픈 소스JavaScript 라이브러리입니다. 이 라이브러리는 일반 작업을 애플리케이션에 보다 쉽게 추가할 수 있도록 하는 다양한 작업 범주에 걸친 선언형 인터페이스입니다. 기본 구현은 AWS(Amazon Web Services) 리소스와작동하지만 구현 또는 사용자 지정 백엔드를 제공하고자 하는 다른 클라우드 서비스에서 사용할 수 있도록오픈 및 연결형으로 설계되었습니다.

AWS Mobile Hub를 기반으로 하는 AWS Mobile CLI는 AWS 서비스를 완벽하게 활성화하여 앱 안에 구성할수 있는 프런트엔드 JavaScript 개발자용 명령줄 인터페이스를 제공합니다. 최소한의 구성으로 즐겨 사용하는 터미널 애플리케이션에서 AWS Mobile Hub에서 제공하는 모든 기능을 사용할 수 있습니다.

173

Page 177: AWS Mobile Hub 개발자 안내서 - 개발자 안내서 · 2020-02-07 · iOS - Swift 1.iOS를 플랫폼으로 선택하고 다음을 선택합니다. 2.Download Cloud Config(클라우드

AWS Mobile Hub 개발자 안내서 개발자 안내서React Native

주제• 시작 (p. 174)• AWS Mobile Hub 기능 (p. 187)

시작Important

백엔드를 구성하기 위해 이미 AWS Mobile CLI를 사용하고 있다면 다음 콘텐츠가 적용됩니다.새 모바일 또는 웹 앱을 빌드하거나 기존 앱에 클라우드 기능을 추가하고 있다면 대신 새 AWSAmplify CLI를 사용하십시오. 새 Amplify CLI를 사용하면 추가 워크플로우를 제공하는 AWSCloudFormation 기능을 포함하여 AWS Amplify CLI Toolchain 공개에 설명된 모든 기능을 사용할수 있습니다.

개요

AWS Mobile CLI는 프런트엔드 JavaScript 개발자가 AWS 백엔드 리소스를 신속히 생성하여 모바일 앱에 통합할 수 있도록 하는 명령줄 환경을 제공합니다.

사전 조건

1. 최소 비용 또는 무료로 배우고 시제품화하려면 AWS 프리 티어에 가입합니다.2. Node.js(NPM)를 설치합니다.3. AWS Mobile CLI 설치

npm install --global awsmobile-cli

4. AWS 자격 증명을 사용하여 CLI 구성

CLI에 사용되는 도구 체인에 대한 권한을 설정하려면 다음을 실행합니다.

awsmobile configure

자격 증명을 지정하라는 메시지가 표시되면 CLI에서 제공하는 단계를 따릅니다. 자세한 내용은 AWSMobile CLI에 IAM 자격 증명 제공 (p. 170)을 참조하십시오.

백엔드 설정

간단한 샘플 React Native 앱을 만들어야 합니까? Create a React Native App을 참조하십시오.

앱에 맞게 백엔드 기능을 구성하려면

1. 앱의 루트 폴더에서 다음을 실행합니다.

awsmobile init

init 명령은 앱에 대한 백엔드 프로젝트를 생성합니다. 기본적으로 백엔드에서 분석 및 웹 호스팅이 활성화되고 초기화 시 이 구성이 앱으로 자동 풀됩니다.

2. 메시지가 표시되면 프로젝트에 대한 소스 디렉터리를 지정합니다. CLI는 이 위치에 대한 aws-exports.js를 생성합니다. 이 파일에는 프런트엔드를 백엔드 서비스에 연결하는 데 사용되는 구성과 엔드포인트 메타데이터가 들어 있습니다.

174

Page 178: AWS Mobile Hub 개발자 안내서 - 개발자 안내서 · 2020-02-07 · iOS - Swift 1.iOS를 플랫폼으로 선택하고 다음을 선택합니다. 2.Download Cloud Config(클라우드

AWS Mobile Hub 개발자 안내서 개발자 안내서React Native

? Where is your project's source directory: /

그러고 나서 이후 메시지에 대해 다음 값으로 응답합니다.

Please tell us about your project:? Where is your project's source directory: /? Where is your project's distribution directory that stores build artifacts: build? What is your project's build command: npm run-script build? What is your project's start command for local test run: npm run-script start

백엔드에 연결

AWS Mobile은 오픈 소스 AWS Amplify 라이브러리를 사용하여 코드를 앱용으로 구성된 AWS 기능에 연결합니다.

앱을 구성된 AWS 서비스에 연결하려면

1. React Native용 AWS Amplify 라이브러리를 설치합니다.

npm install --save aws-amplify

2. App.js(또는 시작 시 실행되는 다른 코드)에 다음 가져오기를 추가합니다.

import Amplify from 'aws-amplify';

import aws_exports from './YOUR-PATH-TO/aws-exports';

3. 그러고 나서 다음 코드를 추가합니다.

Amplify.configure(aws_exports);

로컬로 앱 실행

이제 앱이 AWS Mobile에서 구성된 기본 서비스를 시작하고 사용할 준비가 되었습니다.

앱을 로컬로 시작하려면

사용 중인 React Native 도구의 기본 명령을 사용합니다. 예를 들어 create-react-native-app을 사용하여 앱을 만든 경우 다음을 실행합니다.

npm run android

# OR

npm run ios

앱을 시작할 때마다 AWS 콘솔에서 앱 사용 분석을 수집하여 시각화할 수 있습니다 (p. 176).

AWS 프리 티어 CLI를 통해 앱을 초기화하거나 기능을 추가하면 사용자를 대신하여 AWS 서비스가 구성됩니다. AWSMobile 서비스 요금에서는 매우 저렴한 요금 또는무료로 AWS 프리 티어를 학습하고 시제품화할 수있습니다.

175

Page 179: AWS Mobile Hub 개발자 안내서 - 개발자 안내서 · 2020-02-07 · iOS - Swift 1.iOS를 플랫폼으로 선택하고 다음을 선택합니다. 2.Download Cloud Config(클라우드

AWS Mobile Hub 개발자 안내서 개발자 안내서React Native

다음 단계

기능 추가

CLI를 사용하여 다음 AWS Mobile 기능을 모바일 앱에 추가합니다.

• 분석 (p. 176)• 사용자 로그인 (p. 177)• NoSQL 데이터베이스 (p. 179)• 사용자 파일 스토리지 (p. 183)• 클라우드 로직 (p. 185)

자세히 알아보기

AWS Mobile CLI의 명령 및 사용법에 대해 자세히 알아보려면 AWS Mobile CLI 참조 (p. 161)를 참조하십시오.

AWS Mobile Amplify에 대해 알아봅니다.

분석 추가Important

백엔드를 구성하기 위해 이미 AWS Mobile CLI를 사용하고 있다면 다음 콘텐츠가 적용됩니다.새 모바일 또는 웹 앱을 빌드하거나 기존 앱에 클라우드 기능을 추가하고 있다면 대신 새 AWSAmplify CLI를 사용하십시오. 새 Amplify CLI를 사용하면 추가 워크플로우를 제공하는 AWSCloudFormation 기능을 포함하여 AWS Amplify CLI Toolchain 공개에 설명된 모든 기능을 사용할수 있습니다.

앱에 대해 기본 분석 백엔드 활성화

시작하기 전에 이 페이지의 단계에서는 시작하기 (p. 174)의 단계를 이미 완료했다고 가정합니다.

AWS Mobile CLI 설정을 완료할 때 앱, 익명화된 세션 및 AWS 분석 백엔드로의 디바이스 인구 통계 데이터흐름을 시작합니다.

AWS로 기본 앱 사용량 분석을 전송하려면

예를 들면 create-react-native-app을 사용하여 앱을 생성한 경우 다음을 실행하여 앱을 로컬로 시작합니다.

npm run android

# Or

npm run ios

앱을 사용할 때 Amazon Pinpoint 서비스에서 분석 데이터를 수집하고 시각화합니다.

Amazon Pinpoint 콘솔을 사용하여 분석을 보려면

1. 한 번 이상 앱을 시작합니다.2. AWS Mobile Hub 콘솔에서 프로젝트를 엽니다.

176

Page 180: AWS Mobile Hub 개발자 안내서 - 개발자 안내서 · 2020-02-07 · iOS - Swift 1.iOS를 플랫폼으로 선택하고 다음을 선택합니다. 2.Download Cloud Config(클라우드

AWS Mobile Hub 개발자 안내서 개발자 안내서React Native

awsmobile console

3. 왼쪽에 있는 분석 아이콘을 선택하여 Amazon Pinpoint 콘솔에서 해당 프로젝트로 이동합니다.4. 왼쪽에서 분석을 선택합니다.

여러 그래픽에 상향 틱이 표시됩니다.

앱에 사용자 지정 분석 추가

Amazon Pinpoint가 코드 흐름 내에서 사용자가 등록하는 사용자 지정 이벤트에 대한 데이터를 수집하도록앱을 구성할 수 있습니다.

앱에서 사용자 지정 분석을 계측하려면

추적할 이벤트를 포함하는 파일에서 다음 가져오기를 추가합니다.

import { Analytics } from 'aws-amplify';

다음과 같은 호출을 JavaScript 내에서 추적되는 이벤트가 발생해야 할 지점에 추가합니다.

componentDidMount() { Analytics.record('FIRST-EVENT-NAME');}

또는 관련 페이지 요소에 추가합니다.

handleClick = () => { Analytics.record('SECOND-EVENT-NAME');}

<Button title="Record event" onPress={this.handleClick}/>

을 테스트하려면 다음을 수행합니다.

1. 변경 내용을 저장하고 앱을 시작합니다. 추적되는 이벤트가 발생하도록 앱을 사용합니다.2. Amazon Pinpoint 콘솔에서 맨 위 부근에 있는 이벤트를 선택합니다.3. 왼쪽에 있는 이벤트 드롭다운 메뉴에서 이벤트를 선택합니다.

사용자 지정 이벤트 데이터가 콘솔에 보이는 데 몇 분이 걸릴 수도 있습니다.

다음 단계

AWS Mobile에서 메시징 및 분석 (p. 196) 기능의 일부로 제공되는 분석 기능에 대해 자세히 알아봅니다.이 기능에는 Amazon Pinpoint가 사용됩니다.

AWS Mobile CLI (p. 161)에 대해 알아봅니다.

React Native용 AWS Amplify 라이브러리에 대해 알아봅니다.

인증/사용자 로그인 추가Important

백엔드를 구성하기 위해 이미 AWS Mobile CLI를 사용하고 있다면 다음 콘텐츠가 적용됩니다.새 모바일 또는 웹 앱을 빌드하거나 기존 앱에 클라우드 기능을 추가하고 있다면 대신 새 AWS

177

Page 181: AWS Mobile Hub 개발자 안내서 - 개발자 안내서 · 2020-02-07 · iOS - Swift 1.iOS를 플랫폼으로 선택하고 다음을 선택합니다. 2.Download Cloud Config(클라우드

AWS Mobile Hub 개발자 안내서 개발자 안내서React Native

Amplify CLI를 사용하십시오. 새 Amplify CLI를 사용하면 추가 워크플로우를 제공하는 AWSCloudFormation 기능을 포함하여 AWS Amplify CLI Toolchain 공개에 설명된 모든 기능을 사용할수 있습니다.

백엔드 설정

시작하기 전에 이 페이지의 단계에서는 시작하기 (p. 174)의 단계를 이미 완료했다고 가정합니다.

사용자 인증용 AWS Mobile CLI 구성 요소에는 가입 및 로그인을 위한 구성 가능한 풍부한 UI가 포함되어 있습니다.

인증 기능을 활성화하려면

앱의 루트 폴더에서 다음을 실행합니다.

awsmobile user-signin enable

awsmobile push

백엔드에 연결

AWS Mobile CLI에서는 명령줄을 통해 미리 만들어진 sign-up/sign-in/sign-out UI를 통합할 수 있습니다.

앱에 사용자 인증 UI를 추가하려면

1. React Native용 AWS Amplify 라이브러리를 설치합니다.

npm install --save aws-amplifynpm install --save aws-amplify-react-native

참고 create-react-native-app 또는 Expov25.0.0(create-react-native-app 지원 엔진) 이전 버전을 사용하여 react-native 앱을 생성하지 않은 경우, React Native의 Auth 모듈(amazon-cognito-identity-js)에 대해 프로젝트에서 라이브러리를 연결합니다.

이 모듈에 연결하려면 먼저 프로젝트를 배출해야 합니다.

npm run ejectreact-native link amazon-cognito-identity-js

1. App.js(또는 앱 시작 시 실행되는 다른 파일)에 다음 가져오기를 추가합니다.

import { withAuthenticator } from 'aws-amplify-react-native';

2. 그런 다음 export default App;을 다음으로 변경합니다.

export default withAuthenticator(App);

178

Page 182: AWS Mobile Hub 개발자 안내서 - 개발자 안내서 · 2020-02-07 · iOS - Swift 1.iOS를 플랫폼으로 선택하고 다음을 선택합니다. 2.Download Cloud Config(클라우드

AWS Mobile Hub 개발자 안내서 개발자 안내서React Native

테스트하려면 npm start 또는 awsmobile run을 실행합니다.

다음 단계

AWS Mobile 사용자 로그인 (p. 204) 기능에 대해 자세히 알아봅니다. 이 기능에는 Amazon Cognito가 사용됩니다.

AWS Mobile CLI (p. 161)에 대해 알아봅니다.

AWS Mobile Amplify에 대해 알아봅니다.

데이터베이스에 액세스Important

백엔드를 구성하기 위해 이미 AWS Mobile CLI를 사용하고 있다면 다음 콘텐츠가 적용됩니다.새 모바일 또는 웹 앱을 빌드하거나 기존 앱에 클라우드 기능을 추가하고 있다면 대신 새 AWSAmplify CLI를 사용하십시오. 새 Amplify CLI를 사용하면 추가 워크플로우를 제공하는 AWSCloudFormation 기능을 포함하여 AWS Amplify CLI Toolchain 공개에 설명된 모든 기능을 사용할수 있습니다.

백엔드 설정

시작하기 전에 이 페이지의 단계에서는 시작하기 (p. 174)의 단계를 이미 완료했다고 가정합니다.

AWS Mobile database 기능은 요구에 맞는 사용자 지정된 테이블을 생성할 수 있도록 합니다. 그러고 나면CLI가 데이터베이스에 액세스할 사용자 지정 API를 생성하는 방법을 안내합니다.

테이블 만들기

테이블을 지정 및 생성하려면

1. 앱 루트 폴더에서 다음을 실행합니다.

awsmobile database enable --prompt

2. CLI에서 메시지가 표시되면 테이블을 디자인합니다.

CLI에서 테이블 및 다른 테이블 구성(예: 열)을 묻는 메시지가 표시됩니다.

Welcome to NoSQL database wizardYou will be asked a series of questions to help determine how to best construct your NoSQL database table.

? Should the data of this table be open or restricted by user? Open? Table name Notes

You can now add columns to the table.

? What would you like to name this column NoteId? Choose the data type string? Would you like to add another column Yes? What would you like to name this column NoteTitle? Choose the data type string? Would you like to add another column Yes? What would you like to name this column NoteContent

179

Page 183: AWS Mobile Hub 개발자 안내서 - 개발자 안내서 · 2020-02-07 · iOS - Swift 1.iOS를 플랫폼으로 선택하고 다음을 선택합니다. 2.Download Cloud Config(클라우드

AWS Mobile Hub 개발자 안내서 개발자 안내서React Native

? Choose the data type string? Would you like to add another column No

각 항목을 고유하게 식별할 기본 키를 선택합니다. 또는 데이터를 정렬 또는 검색하기 위해 이러한 값을기본 키와 함께 일반적으로 사용할 경우 정렬 키로 사용할 열을 선택합니다. 정렬 기준으로 사용할 각 열마다 보조 인덱스를 추가하여 정렬 키를 추가할 수 있습니다.

Before you create the database, you must specify how items in your table are uniquely organized. This is done by specifying a Primary key. The primary key uniquely identifies each item in the table, so that no two items can have the same key.This could be and individual column or a combination that has "primary key" and a "sort key".To learn more about primary key:http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/HowItWorks.CoreComponents.html#HowItWorks.CoreComponents.PrimaryKey

? Select primary key NoteId? Select sort key (No Sort Key)

You can optionally add global secondary indexes for this table. These are useful when running queries defined by a different column than the primary key.

To learn more about indexes:

http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/HowItWorks.CoreComponents.html#HowItWorks.CoreComponents.SecondaryIndexes

? Add index NoTable Notes added

CRUD API 생성

AWS Mobile은 데이터베이스에 대해 생성, 읽기, 업데이트 및 삭제(CRUD) 작업을 수행할 앱용 사용자 지정API를 생성합니다.

테이블의 CRUD API를 생성하려면

1. 앱의 루트 폴더에서 다음을 실행합니다.

awsmobile cloud-api enable --prompt

2. 메시지가 표시되면 Create CRUD API for existing Dynamo table를 선택하고 이전 단계에서 테이블 이름을 선택한 다음, 해당 테이블에 대해 액세스 권한을 선택합니다. 이전 단원의 예제 테이블 사용:

? Select from one of the choices below. Create a new API# Create CRUD API for an existing Amazon DynamoDB table

프롬프트 응답은 다음과 같습니다.

Path to be used on API for get and remove an object should be like:/Notes/object/:NoteId

Path to be used on API for list objects on get method should be like:/Notes/:NoteId

JSON to be used as data on put request should be like:{

180

Page 184: AWS Mobile Hub 개발자 안내서 - 개발자 안내서 · 2020-02-07 · iOS - Swift 1.iOS를 플랫폼으로 선택하고 다음을 선택합니다. 2.Download Cloud Config(클라우드

AWS Mobile Hub 개발자 안내서 개발자 안내서React Native

"NoteTitle": "INSERT VALUE HERE", "NoteContent": "INSERT VALUE HERE", "NoteId": "INSERT VALUE HERE"}To test the api from the command line (after awsmobile push) use this commandsawsmobile cloud-api invoke NotesCRUD <method> <path> [init]Api NotesCRUD saved

앱 코드에서 사용할 API 및 JSON의 경로를 복사하고 유지합니다.

이 기능은 Amazon API Gateway 및 AWS Lambda를 사용하여 API를 생성합니다. 또는 AmazonDynamoDB 테이블에 대해 Lambda 함수가 CRUD 작업을 수행하도록 할 수 있습니다.

3. 백엔드를 업데이트합니다.

구성한 API를 생성하려면 다음을 실행합니다.

awsmobile push

클라우드에 API 배포가 완료될 때까지 CLI에서 cloud-api update status:CREATE_IN_PROGRESS 메시지를 표시합니다. 배포되고 나면 생성 성공 메시지 cloud-api updatestatus: CREATE_COMPLETE가 표시됩니다.

awmobile console을 실행하고 Mobile Hub 콘솔에서 클라우드 로직을 선택하여 CLI에서 생성된 API를볼 수 있습니다.

백엔드에 연결

주제• 항목 저장(생성 또는 업데이트). (p. 181)• 특정 항목 가져오기 (p. 182)• 항목 삭제 (p. 116)• CRUD 호출을 실행할 UI (p. 183)

앱에서 데이터베이스 테이블에 액세스하려면

1. App.js에서 다음을 가져옵니다.

import Amplify, { API } from 'aws-amplify';import aws_exports from 'path_to_your_aws-exports';Amplify.configure(aws_exports);

2. 다음 state를 구성 요소에 추가합니다.

state = { apiResponse: null, noteId: '' };

handleChangeNoteId = (event) => { this.setState({noteId: event});}

항목 저장(생성 또는 업데이트).

항목을 저장하려면

181

Page 185: AWS Mobile Hub 개발자 안내서 - 개발자 안내서 · 2020-02-07 · iOS - Swift 1.iOS를 플랫폼으로 선택하고 다음을 선택합니다. 2.Download Cloud Config(클라우드

AWS Mobile Hub 개발자 안내서 개발자 안내서React Native

React 구성 요소의 이벤트 핸들기 같이 데이터베이스에 액세스할 앱 부분에서 put 메서드를 호출합니다. 이전에 CLI 프롬프트 응답에서 복사한 API의 JSON 및 루트 경로(/Notes)를 사용합니다.

// Create a new Note according to the columns we defined earlier async saveNote() { let newNote = { body: { "NoteTitle": "My first note!", "NoteContent": "This is so cool!", "NoteId": this.state.noteId } } const path = "/Notes";

// Use the API module to save the note to the database try { const apiResponse = await API.put("NotesCRUD", path, newNote) console.log("response from saving note: " + apiResponse); this.setState({apiResponse}); } catch (e) { console.log(e); } }

명령줄을 사용하여 데이터베이스에서 저장된 항목을 보려면 다음을 실행합니다.

awsmobile cloud-api invoke NotesCRUD GET /Notes/object/${noteId}

특정 항목 가져오기

특정 항목을 쿼리하려면

쿼리하려는 항목의 API 경로(이전에 복사됨)를 사용하여 get 메서드를 호출합니다.

// noteId is the primary key of the particular record you want to fetch async getNote() { const path = "/Notes/object/" + this.state.noteId; try { const apiResponse = await API.get("NotesCRUD", path); console.log("response from getting note: " + apiResponse); this.setState({apiResponse}); } catch (e) { console.log(e); } }

항목 삭제

항목 삭제 방법

구성 요소에 이 메서드를 추가합니다. API 경로(이전에 복사됨)를 사용합니다.

// noteId is the NoteId of the particular record you want to delete async deleteNote() { const path = "/Notes/object/" + this.state.noteId; try { const apiResponse = await API.del("NotesCRUD", path); console.log("response from deleting note: " + apiResponse); this.setState({apiResponse});

182

Page 186: AWS Mobile Hub 개발자 안내서 - 개발자 안내서 · 2020-02-07 · iOS - Swift 1.iOS를 플랫폼으로 선택하고 다음을 선택합니다. 2.Download Cloud Config(클라우드

AWS Mobile Hub 개발자 안내서 개발자 안내서React Native

} catch (e) { console.log(e); } }

CRUD 호출을 실행할 UI

다음은 이러한 연산을 실행하도록 UI를 생성하는 방법을 보여 주는 예입니다.

<View style={styles.container}> <Text>Response: {this.state.apiResponse && JSON.stringify(this.state.apiResponse)}</Text> <Button title="Save Note" onPress={this.saveNote.bind(this)} /> <Button title="Get Note" onPress={this.getNote.bind(this)} /> <Button title="Delete Note" onPress={this.deleteNote.bind(this)} /> <TextInput style={styles.textInput} autoCapitalize='none' onChangeText={this.handleChangeNoteId}/></View>

const styles = StyleSheet.create({ container: { flex: 1, backgroundColor: '#fff', alignItems: 'center', justifyContent: 'center', }, textInput: { margin: 15, height: 30, width: 200, borderWidth: 1, color: 'green', fontSize: 20, backgroundColor: 'black' }});

다음 단계

AWS Mobile NoSQL 데이터베이스 (p. 191) 기능에 대해 자세히 알아봅니다. 이 기능에는 AmazonDynamoDB가 사용됩니다.

AWS Mobile CLI (p. 161)에 대해 알아봅니다.

AWS Mobile Amplify에 대해 알아봅니다.

스토리지 추가Important

백엔드를 구성하기 위해 이미 AWS Mobile CLI를 사용하고 있다면 다음 콘텐츠가 적용됩니다.새 모바일 또는 웹 앱을 빌드하거나 기존 앱에 클라우드 기능을 추가하고 있다면 대신 새 AWSAmplify CLI를 사용하십시오. 새 Amplify CLI를 사용하면 추가 워크플로우를 제공하는 AWSCloudFormation 기능을 포함하여 AWS Amplify CLI Toolchain 공개에 설명된 모든 기능을 사용할수 있습니다.

백엔드 설정

AWS Mobile CLI 사용자 파일 스토리지 (p. 209) 기능을 사용하면 앱에서 클라우드에 사용자 파일을 저장할 수 있습니다.

183

Page 187: AWS Mobile Hub 개발자 안내서 - 개발자 안내서 · 2020-02-07 · iOS - Swift 1.iOS를 플랫폼으로 선택하고 다음을 선택합니다. 2.Download Cloud Config(클라우드

AWS Mobile Hub 개발자 안내서 개발자 안내서React Native

시작하기 전에 이 페이지의 단계에서는 시작하기 (p. 174)의 단계를 이미 완료했다고 가정합니다.

앱의 클라우드 스토리지 위치를 구성하려면

앱 루트 폴더에서 다음을 실행합니다.

awsmobile user-files enable

awsmobile push

백엔드에 연결

앱에 사용자 파일 스토리지를 추가하려면

파일을 전송할 구성 요소:

aws-amplify에서 Storage 모듈을 가져와서 백엔드와 통신하도록 구성합니다.

import { Storage } from 'aws-amplify';

이제 스토리지 모듈을 가져왔으며 백엔드와 통신하고 아래 코드를 사용하여 일반 파일 전송 작업용을 구현할준비가 완료되었습니다.

파일 업로드

스토리지에 파일을 업로드하려면

파일 업로드를 처리할 구성 요소에 다음 메서드를 추가합니다.

async uploadFile() { let file = 'My upload text'; let name = 'myFile.txt'; const access = { level: "public" }; // note the access path Storage.put(name, file, access);}

특정 파일 가져오기

클라우드 스토리지에서 파일을 다운로드하려면

파일을 표시할 구성 요소에 다음 코드를 추가합니다.

async getFile() { let name = 'myFile.txt'; const access = { level: "public" }; let fileUrl = await Storage.get(name, access); // use fileUrl to get the file}

모든 파일 나열

앱에 대해 클라우드에 저장된 파일을 나열하려면

184

Page 188: AWS Mobile Hub 개발자 안내서 - 개발자 안내서 · 2020-02-07 · iOS - Swift 1.iOS를 플랫폼으로 선택하고 다음을 선택합니다. 2.Download Cloud Config(클라우드

AWS Mobile Hub 개발자 안내서 개발자 안내서React Native

파일 모음을 나열할 구성 요소에 다음 코드를 추가합니다.

async componentDidMount() { const path = this.props.path; const access = { level: "public" }; let files = await Storage.list(path, access); // use file list to get single files}

다음 코드를 사용하여 최근 파일 변경 시간 또는 크기 같은 파일 속성을 가져옵니다.

file.Size; // file sizefile.LastModified.toLocaleDateString(); // last modified datefile.LastModified.toLocaleTimeString(); // last modified time

파일 삭제

파일 전송을 처리할 요소에 다음 상태를 추가합니다.

async deleteFile(key) { const access = { level: "public" }; Storage.remove(key, access);}

다음 단계

AWS Mobile에서 사용자 파일 스토리지 (p. 209) 기능의 일부로 제공되는 분석 기능에 대해 자세히 알아봅니다. 이 기능에는 Amazon Simple Storage Service(S3)가 사용됩니다.

AWS Mobile CLI (p. 161)에 대해 알아봅니다.

AWS Mobile Amplify에 대해 알아봅니다.

API에 액세스Important

백엔드를 구성하기 위해 이미 AWS Mobile CLI를 사용하고 있다면 다음 콘텐츠가 적용됩니다.새 모바일 또는 웹 앱을 빌드하거나 기존 앱에 클라우드 기능을 추가하고 있다면 대신 새 AWSAmplify CLI를 사용하십시오. 새 Amplify CLI를 사용하면 추가 워크플로우를 제공하는 AWSCloudFormation 기능을 포함하여 AWS Amplify CLI Toolchain 공개에 설명된 모든 기능을 사용할수 있습니다.

백엔드 설정

시작하기 전에 이 페이지의 단계에서는 시작하기 (p. 174)의 단계를 이미 완료했다고 가정합니다.

AWS Mobile 클라우드 로직 (p. 188) 기능을 통해 클라우드에서 API를 호출할 수 있습니다. API 호출은 서버리스 Lambda 함수에 의해 처리됩니다.

앱에서 클라우드 API를 활성화하려면

awsmobile cloud-api enable

185

Page 189: AWS Mobile Hub 개발자 안내서 - 개발자 안내서 · 2020-02-07 · iOS - Swift 1.iOS를 플랫폼으로 선택하고 다음을 선택합니다. 2.Download Cloud Config(클라우드

AWS Mobile Hub 개발자 안내서 개발자 안내서React Native

awsmobile push

앱에서 클라우드 로직을 활성화하면 샘플 API인 sampleCloudApi가 테스트용으로 사용할 수 있는 프로젝트에 추가됩니다.

앱 루트 폴더에서 awsmobile console을 실행하고 나서 Mobile Hub 프로젝트에서 클라우드 로직 기능을선택하여 API의 샘플 핸들러 함수를 찾을 수 있습니다.

CLI에서 API 신속 테스트

sampleCloudApi 및 관련 핸들러 함수를 통해 종단 간 API를 호출할 수 있습니다.

개발 환경에서 서명되지 않은 API 호출을 테스트하려면

awsmobile cloud-api invoke <apiname> <method> <path> [init]

sampleCloudApi의 경우 다음 예제를 사용하여 post 메서드를 테스트할 수도 있습니다.

awsmobile cloud-api invoke sampleCloudApi post /items '{"body": {"testKey":"testValue"}}'

이 호출은 다음과 비슷한 응답을 반환합니다.

{ success: 'post call succeed!',url: '/items',body: { testKey: 'testValue' } }

get 메서드를 테스트하려면

awsmobile cloud-api invoke sampleCloudApi get /items

그러면 다음과 같은 응답이 반환됩니다.

186

Page 190: AWS Mobile Hub 개발자 안내서 - 개발자 안내서 · 2020-02-07 · iOS - Swift 1.iOS를 플랫폼으로 선택하고 다음을 선택합니다. 2.Download Cloud Config(클라우드

AWS Mobile Hub 개발자 안내서 개발자 안내서React Native

{ success: 'get call succeed!', url: '/items' }

백엔드에 연결

고유의 클라우드 로직 (p. 188) API 및 Lambda 함수를 생성했으면 앱에서 이러한 API와 함수를 호출할 수있습니다.

앱에서 API를 호출하려면

App.js(또는 시작 시 실행되는 다른 코드)에 다음 가져오기를 추가합니다.

import Amplify, { API } from 'aws-amplify';import aws_exports from './aws-exports';Amplify.configure(aws_exports);

그런 다음 API를 호출하는 구성 요소에 이를 추가합니다.

state = { apiResponse: null };

async getSample() { const path = "/items"; // you can specify the path const apiResponse = await API.get("sampleCloudApi" , path); //replace the API name console.log('response:' + apiResponse); this.setState({ apiResponse });}

UI 요소에서 API를 호출하려면 구성 요소의 render() 메서드 안에서 API 호출을 추가합니다.

<View> <Button title="Send Request" onPress={this.getSample.bind(this)} /> <Text>Response: {this.state.apiResponse && JSON.stringify(this.state.apiResponse)}</Text></View>

테스트하려면 변경 내용을 저장하고 npm run android 또는 npm run ios`를 실행하여 앱을 시작합니다. 그런 다음 API를 호출하는 UI 요소를 사용해 봅니다.

다음 단계

Amazon API Gateway 및 AWS Lambda를 사용하는 AWS Mobile 클라우드 로직 (p. 188) 기능에 대해 자세히 알아봅니다.

API 및 관련 핸들러 생성 과정을 단계적으로 살펴보려면 awsmobile console을 실행하여 Mobile Hub 콘솔에서 앱을 열고 클라우드 로직을 선택합니다.

AWS Mobile CLI (p. 161)에 대해 알아봅니다.

AWS Mobile Amplify에 대해 알아봅니다.

AWS Mobile Hub 기능Important

백엔드를 구성하기 위해 이미 AWS Mobile CLI를 사용하고 있다면 다음 콘텐츠가 적용됩니다.새 모바일 또는 웹 앱을 빌드하거나 기존 앱에 클라우드 기능을 추가하고 있다면 대신 새 AWSAmplify CLI를 사용하십시오. 새 Amplify CLI를 사용하면 추가 워크플로우를 제공하는 AWS

187

Page 191: AWS Mobile Hub 개발자 안내서 - 개발자 안내서 · 2020-02-07 · iOS - Swift 1.iOS를 플랫폼으로 선택하고 다음을 선택합니다. 2.Download Cloud Config(클라우드

AWS Mobile Hub 개발자 안내서 개발자 안내서Mobile Hub 기능

CloudFormation 기능을 포함하여 AWS Amplify CLI Toolchain 공개에 설명된 모든 기능을 사용할수 있습니다.

다음 페이지에는 웹용 AWS Mobile CLI(JavaScript)에 대한 참조 자료가 포함되어 있습니다.

• AWS Mobile CLI 참조 (p. 161)• AWS Mobile CLI 자격 증명 (p. 170)

AWS Mobile Hub 기능

iOS 및 Android용 AWS SDK를 찾고 있으십니까? 이들 SDK와 그 문서는 AWS Amplify에 일부로 제공됩니다.

이 페이지의 콘텐츠는 AWS Mobile Hub 또는 awsmobile CLI를 사용해 구성된 앱에만 적용됩니다. v2.8.0이전 버전의 AWS Mobile SDK를 사용하고 있는 기존 앱의 경우, AWS Amplify 및 최신 SDK를 사용하도록앱을 마이그레이션하는 것이 좋습니다.

AWS Mobile Hub는 초보자도 강력한 여러 AWS 서비스를 사용하여 모바일 앱 백엔드 기능을 쉽게 배포하고구성할 수 있게 해주는 서비스입니다.

무료 프로젝트를 생성한 다음 포인트 앤 클릭 콘솔을 사용하여 모바일 앱 기능을 선택하고 구성합니다.Mobile Hub는 백그라운드에서 복잡성을 처리한 다음 단계별 통합 지침을 제공합니다.

주제• 클라우드 로직 (p. 188)• NoSQL 데이터베이스 (p. 191)• 메시징 및 분석 기능 (p. 196)• 호스팅 및 스트리밍 (p. 198)• 대화형 봇 (p. 202)• 사용자 로그인 (p. 204)• 사용자 파일 스토리지 (p. 209)

클라우드 로직

iOS 및 Android용 AWS SDK를 찾고 있으십니까? 이들 SDK와 그 문서는 AWS Amplify에 일부로 제공됩니다.

이 페이지의 콘텐츠는 AWS Mobile Hub 또는 awsmobile CLI를 사용해 구성된 앱에만 적용됩니다. v2.8.0이전 버전의 AWS Mobile SDK를 사용하고 있는 기존 앱의 경우, AWS Amplify 및 최신 SDK를 사용하도록앱을 마이그레이션하는 것이 좋습니다.

AWS Mobile Hub 클라우드 로직 모바일 백엔드 서비스 기능은 다음과 같은 작업이 가능합니다.

• 서버 설정 또는 유지 관리 비용 없이 비즈니스 로직 함수를 클라우드에 추가할 수 있습니다.• 앱을 다른 AWS 서비스를 비롯한 기타 서비스까지 확장할 수 있습니다.

무료 Mobile Hub 프로젝트를 생성하여 클라우드 로직 기능을 추가합니다.

188

Page 192: AWS Mobile Hub 개발자 안내서 - 개발자 안내서 · 2020-02-07 · iOS - Swift 1.iOS를 플랫폼으로 선택하고 다음을 선택합니다. 2.Download Cloud Config(클라우드

AWS Mobile Hub 개발자 안내서 개발자 안내서Mobile Hub 기능

기능 세부 정보

다음은 Amazon API Gateway 및 AWS Lambda를 함께 사용하여 서버리스 비즈니스 로직을 구현하고 다른서비스까지 확장하는 클라우드 로직을 나타낸 이미지입니다.

클라우드 로직 기능을 사용하면 모바일 앱에서 호출할 수 있는 AWS Lambda 함수를 가지고 백엔드 서비스를 빌드할 수 있습니다. 또한 클라우드 환경에서 코드를 실행하여 앱에 필요한 비즈니스 로직을 처리할 뿐만아니라 iOS 앱과 Android 앱에서 동일한 코드를 공유할 수도 있습니다. 클라우드 로직 기능은 함수를 기반으로 하기 때문에 프레임워크 관리나 백엔드 인프라 조정에 대한 걱정 없이 코드를 작성할 수 있습니다. 그 밖에 JavaScript, Java 또는 Python으로 함수를 작성하는 것도 가능합니다.

사용자가 생성하는 Lambda 함수는 단일 보안 엔드포인트이면서 트래픽 모니터링 및 조절 기능이 유연한Amazon API Gateway를 통해 REST API로 앱에 노출됩니다.

클라우드 로직 살펴보기

AWS 서비스 및 구성 리소스 • Amazon API Gateway(Amazon API Gateway 개발자 안내서 참조)

개념 | 콘솔 | 요금• AWS Lambda(AWS Lambda 개발자 안내서 참조)

개념 | 콘솔 | 요금• Amazon Virtual Private Cloud(Amazon VPC 사용

설명서 참조)

개념 | 콘솔 | 요금• AWS CloudFormation(AWS CloudFormation 사

용 설명서 참조)

개념 | 콘솔 | 요금

Mobile Hub에서 지원되는 기능은 Amazon Cognito을 인증에, IAM을 권한 부여에 사용합니다. 자세한내용은 사용자 로그인 (p. 204)을 참조하십시오.자세한 내용은 이 기능에 프로비저닝된 AWS 리소스 보기 (p. 190)를 참조하십시오.

189

Page 193: AWS Mobile Hub 개발자 안내서 - 개발자 안내서 · 2020-02-07 · iOS - Swift 1.iOS를 플랫폼으로 선택하고 다음을 선택합니다. 2.Download Cloud Config(클라우드

AWS Mobile Hub 개발자 안내서 개발자 안내서Mobile Hub 기능

구성 옵션 이 기능은 다음과 같은 모바일 백엔드 기능들을 활성화합니다.

• 앱 사용자가 입력하는 파라미터 값을 수신하여 다시 앱에 반환하는 기본 Hello World Lambda 함수를 제공합니다.

• 함께 제공되는 목록에서 기존 함수를 선택하거나,혹은 AWS Lambda 콘솔을 사용하여 새로운 함수를 생성할 수 있습니다.

퀵스타트 앱 데모 이 기능으로 Mobile Hub에서 개발된 퀵스타트 앱에추가되는 기능은 다음과 같습니다.

• 사용자가 이름을 기준으로 AWS Lambda 함수를지정하고 파라미터를 입력하여 함수를 호출한 후함수에서 반환되는 값을 확인할 수 있습니다.

이 기능에 프로비저닝된 AWS 리소스 보기

다음은 일반적으로 클라우드 로직 기능으로 프로비저닝되는 요소를 Mobile Hub 리소스 창에 표시한 이미지입니다.

퀵스타트 앱 세부 정보

퀵스타트 앱에는 AWS Lambda API를 사용하여 사용자가 프로젝트에서 선택한 모든 함수를 호출하는 코드가 포함되어 있습니다. 클라우드 로직을 퀵스타트 앱에 추가하면 기본 Hello World 함수가 제공됩니다. AWS계정에서 기존 함수를 선택하거나, 혹은 새로운 함수를 생성할 수도 있습니다. 편집 버튼을 선택하면 콘솔의

190

Page 194: AWS Mobile Hub 개발자 안내서 - 개발자 안내서 · 2020-02-07 · iOS - Swift 1.iOS를 플랫폼으로 선택하고 다음을 선택합니다. 2.Download Cloud Config(클라우드

AWS Mobile Hub 개발자 안내서 개발자 안내서Mobile Hub 기능

함수 편집기로 이동합니다. 콘솔에서 코드를 직접 편집하거나, 혹은 원본 패키지와 라이브러리를 .zip 파일로업로드할 수도 있습니다.

클라우드 로직 퀵스타트 앱의 데모 화면에서 호출하려는 Lambda 함수의 이름과 파라미터를 입력할 수 있습니다. 그러면 퀵스타트 앱이 함수를 호출하여 반환되는 결과를 표시합니다.

NoSQL 데이터베이스

iOS 및 Android용 AWS SDK를 찾고 있으십니까? 이들 SDK와 그 문서는 AWS Amplify에 일부로 제공됩니다.

이 페이지의 콘텐츠는 AWS Mobile Hub 또는 awsmobile CLI를 사용해 구성된 앱에만 적용됩니다. v2.8.0이전 버전의 AWS Mobile SDK를 사용하고 있는 기존 앱의 경우, AWS Amplify 및 최신 SDK를 사용하도록앱을 마이그레이션하는 것이 좋습니다.

Mobile Hub NoSQL 데이터베이스 모바일 백엔드 기능은 다음과 같은 작업이 가능합니다.

• 개발이 쉬울 뿐만 아니라 성능 및 비용까지 조절할 수 있는 데이터베이스 기능을 추가합니다.

무료 Mobile Hub 프로젝트를 생성하여 NoSQL DB 기능을 빠르게 추가합니다.

기능 세부 정보

다음은 NoSQL 플랫폼을 사용하여 모바일 앱과 Amazon DynamoDB 사이를 일반적으로 연결하는 이미지입니다.

NoSQL 데이터베이스 기능은 Amazon DynamoDB를 사용하여 사용자가 데이터베이스 테이블을 생성하여앱에서 생성할 목적으로 데이터를 저장하고 검색할 수 있도록 지원합니다.

NoSQL 데이터베이스는 배포 용이성, 확장 가능한 성능, 고가용성 및 복원력으로 널리 인증을 받으면서 여러모바일 백엔드 솔루션에게 선택을 받고 있습니다. 자세한 내용은 Amazon DynamoDB 개발자 안내서의 SQL에서 NoSQL로를 참조하십시오.

NoSQL 데이터베이스 살펴보기

AWS 서비스 및 구성 리소스 • Amazon DynamoDB 테이블(DynamoDB의 테이블 작업 참조)

개념 | 콘솔 | 요금

191

Page 195: AWS Mobile Hub 개발자 안내서 - 개발자 안내서 · 2020-02-07 · iOS - Swift 1.iOS를 플랫폼으로 선택하고 다음을 선택합니다. 2.Download Cloud Config(클라우드

AWS Mobile Hub 개발자 안내서 개발자 안내서Mobile Hub 기능

Mobile Hub에서 지원되는 기능은 Amazon Cognito을 인증에, IAM을 권한 부여에 사용합니다. 자세한내용은 사용자 로그인 (p. 204)을 참조하십시오.자세한 내용은 이 기능에 프로비저닝된 AWS 리소스 보기 (p. 195)를 참조하십시오.

구성 옵션 이 기능은 다음과 같은 모바일 앱 백엔드 기능들을활성화합니다.

테이블 구성 (p. 193) - 제공되는 샘플 스키마를 바탕으로 사용자 지정 스키마를 사용하거나, 혹은 테이블 생성 시 선택을 도와주는 마법사를 사용합니다.

데이터 권한 (p. 194) - 앱 데이터에 대한 액세스에는 다음과 같은 옵션이 있습니다.

• Public(퍼블릭)(모바일 앱 사용자는 누구나 테이블에 원하는 항목 읽기 또는 쓰기 가능)

• Protected(보호됨)(모바일 앱 사용자는 누구나 테이블에서 원하는 항목을 읽을 수 있지만 업데이트나 삭제는 항목 소유자만 가능)

• Private(프라이빗)(항목 소유자만 테이블 읽기/쓰기 가능) 자세한 내용은 NoSQL 데이터베이스 기능 구성 (p. 192)을 참조하십시오.

자세한 내용은 NoSQL 데이터베이스 기능 구성 (p. 192)을 참조하십시오.

퀵스타트 앱 데모 이 기능은 Mobile Hub에서 생성된 퀵스타트 앱에 다음을 추가합니다.

• 콘솔에서 지정하는 스키마에 따라 샘플 데이터를삽입하거나 삭제합니다.

• Get, Scan 그리고 설계 선택 시 콘솔에 표시되는 모든 쿼리 예제를 포함하여 테이블에 대한NoSQL 작업을 실행하고 그 결과를 표시합니다.

NoSQL 데이터베이스 기능 구성

이번 단원에서는 Mobile Hub에서 NoSQL 데이터베이스 기능을 구성하는 단계 및 옵션에 대해서 설명합니다.

|AMH| 프로젝트에 NoSQL 데이터베이스 기능을 추가하려면

1. Enable NoSQL(NoSQL 활성화)을 선택합니다.2. Add a new table(새 테이블 추가)을 선택합니다.3. 테이블의 초기 스키마를 선택합니다. 제공되는 스키마 예제를 사용하거나, 혹은 마법사를 통해 스키마를

생성할 수도 있습니다.

테이블 스키마 예제

AWS Mobile Hub는 일반적임 모바일 앱에 테이블 스키마 예제 집합을 제공합니다. 스키마 예제 템플릿 중 하나를 사용하여 테이블을 생성하는 경우 테이블이 처음에는 각 예제에 따른 속성 집합을 갖게 됩니다. 다음 템플릿 중 하나를 테이블의 첫 번째 스키마로 선택할 수 있습니다.

192

Page 196: AWS Mobile Hub 개발자 안내서 - 개발자 안내서 · 2020-02-07 · iOS - Swift 1.iOS를 플랫폼으로 선택하고 다음을 선택합니다. 2.Download Cloud Config(클라우드

AWS Mobile Hub 개발자 안내서 개발자 안내서Mobile Hub 기능

• 뉴스 - 작성자, 제목, 기사 내용, 키워드 그리고 그 밖에 뉴스 기사의 속성이 저장됩니다.• 위치 - 지리적 위치의 이름, 위도 및 경도가 저장됩니다.• 메모 - 각 사용자의 개인 메모가 저장됩니다.• 등급 - 항목 카탈로그에 대한 사용자 등급이 저장됩니다.• 그래피티 벽 - 공유하는 그림 항목이 저장됩니다.

|AMH| 프로젝트에서 스키마 예제 템플릿 중 하나를 사용하여 테이블을 추가하려면

1. 테이블의 초기 스키마로 사용할 템플릿 예제를 선택합니다.2. 원한다면 새로운 이름을 테이블 이름에 입력하여 테이블 이름을 변경합니다. 각 템플릿은 템플릿 이름에

따라 테이블의 기본 이름을 지정합니다.3. 테이블에 대해 퍼블릭, Protected(보호됨) 또는 프라이빗 권한을 선택하여 모바일 앱 사용자에게 부여합니

다. 자세한 내용은 데이터 권한 (p. 194)을 참조하십시오.4. (선택 사항) What attributes do you want on this table?(이 테이블에 어떤 속성을 사용하시겠습니까?)에서

테이블 속성을 추가 또는 삭제하거나, 이름을 변경합니다.5. (선택 사항) Add index(인덱스 추가)를 선택하여 테이블의 보조 인덱스에 대한 이름, 파티션 키 및 정렬

키(옵션)를 추가합니다.6. 테이블 만들기를 선택합니다.

테이블 구성이번 단원에서는 앱에서 DynamoDB NoSQL 테이블을 구성하는 옵션에 대해서 설명합니다.

주제• NoSQL 테이블 용어 (p. 193)• 데이터 권한 (p. 194)

NoSQL 테이블 용어

다른 데이터베이스 관리 시스템과 마찬가지로 DynamoDB는 데이터를 테이블에 저장합니다. 테이블이란 다음 요소들로 구성된 데이터 집합체를 말합니다.

항목

• 각 테이블에는 여러 개의 항목이 있습니다. 항목은 모든 기타 항목 중에서 고유하게 식별할 수 있는 속성들의 집합입니다. 항목은 관계형 데이터베이스 시스템의 행, 레코드 또는 튜플과 유사합니다.

속성

• 속성이란 DynamoDB 테이블에서 열에 해당합니다. 테이블에서 행이란 앱의 필요에 따라 추가하거나, 업데이트하거나, 읽어오거나, 삭제하는 개별 레코드를 말합니다.

테이블 스키마는 각 예제의 필요에 따라 초기 속성 집합은 제공합니다. 이러한 속성은 무엇이든 제거를 선택하여 삭제할 수 있습니다. 파티션 키 속성을 삭제하는 경우에는 다른 속성을 테이블의 기본 인덱스에 대한 파티션 키로 지정해야 합니다.

속성 추가를 선택하여 테이블에 빈 속성을 추가할 수 있습니다. 그런 다음 속성 이름을 지정하여 저장할 데이터 형식을 선택한 후 새로운 속성을 파티션 키로 사용할지, 아니면 정렬 키로 사용할지 선택합니다.

인덱스

• 각 테이블에는 처음부터 기본 인덱스가 정의되어 있으며, 여기에는 파티션 키 외에 정렬 키가 있는 경우도 있습니다. 기본 인덱스에서는 특정한 쿼리 유형이 허용됩니다. 테이블에서 실행할 수 있는 쿼리 유형은

193

Page 197: AWS Mobile Hub 개발자 안내서 - 개발자 안내서 · 2020-02-07 · iOS - Swift 1.iOS를 플랫폼으로 선택하고 다음을 선택합니다. 2.Download Cloud Config(클라우드

AWS Mobile Hub 개발자 안내서 개발자 안내서Mobile Hub 기능

Queries this table can perform(이 테이블에서 수행할 수 있는 쿼리) 섹션을 확장하면 확인할 수 있습니다.다른 속성을 사용하여 쿼리를 활성화하려면 보조 인덱스를 추가로 생성해야 합니다. 보조 인덱스에서는 기본 인덱스와 다른 파티션 키와 정렬 키(옵션)를 사용하여 데이터에 액세스할 수 있습니다.

데이터 권한

데이터 보안 모범 사례에 따라 앱 설계를 지원하는 테이블에 대해서는 최소 액세스가 허용됩니다. MobileHub에서는 데이터를 보호할 수 있는 두 가지 방법으로 사용자 로그인 (p. 204) 기능을 통한 사용자 인증과NoSQL 데이터베이스 데이터 테이블 사용자 권한을 제공합니다.

참고: NoSQL 데이터베이스를 활성화할 경우 앱이 DynamoDB 서비스와 직접 통신합니다. 이때 사용자 로그인 (p. 204) 기능을 필수로 설정하지 않아 테이블 사용자 권한으로 차단하지 않으면, 인증을 받지 않은 사용자들에게도 데이터를 읽거나 쓸 수 있는 액세스 권한이 부여됩니다.

인증 사용자에게만 권한 부여

로그인하지 않은 사용자가 앱에서 테이블 데이터를 읽거나 써야 하는 경우가 아니라면 사용자가 데이터베이스 작업을 위해 앱 기능을 사용하고 싶다면 먼저 로그인(인증)을 요청하도록 액세스 범위를 제한합니다.AWS Mobile Hub 사용자 로그인 (p. 204) 기능은 Facebook, Google, Active Directory 또는 기존 사용자 지정 서비스 같은 로그인 공급자와 연동하는 등 다양한 사용자 인증 방법을 제공합니다. 사용자가 몇 번만 클릭하면 AWS 서비스에서 지원하는 로그인 공급자를 직접 생성할 수도 있습니다.

사용자 로그인 기능을 앱에 추가하려면 기능 구성 페이지에서 Configure more features button(추가 기능 구성 버튼)을, 또는 왼쪽에 있는 구성 아이콘을 사용합니다. 그런 다음 사용자 로그인을 선택하여 활성화합니다.

개별 사용자에게 테이블 데이터 항목에 대한 권한 부여

NoSQL 데이터베이스에서 새로운 테이블을 생성할 때는 Public(퍼블릭), Private(프라이빗) 또는Protected(보호됨) 옵션 중에서 하나를 선택하여 테이블 데이터를 읽거나 쓸 수 있는 앱 사용자를 결정할 수있습니다. Mobile Hub에서는 액세스 제어 정책을 세분화하여 테이블에 연결함으로써 액세스하려는 데이터의 생성자 여부에 따라 가능한 작업을 제한할 수 있습니다.

Public

• [Public] 권한을 선택하면 사용자 누구나 테이블의 모든 항목(데이터 행)을 읽거나 업데이트할 수 있습니다.

Protected

• [Protected] 권한을 선택하면 사용자 누구나 테이블의 모든 항목을 읽을 수 있지만 업데이트나 삭제는 항목소유자만 가능합니다.

프라이빗

• [Private] 권한을 선택하면 항목 소유자만 읽거나 쓸 수 있습니다.

Note

Amazon Cognito 자격 증명 ID가 항목의 기본 키 값과 일치하면 사용자가 해당하는 데이터 항목을소유합니다.테이블에 대해 Protected(보호됨) 또는 Private(프라이빗) 권한을 선택하는 경우에는 테이블의 파티션 키가 userId이고, 형식은 string이 되어야 합니다. [Protected] 또는 [Private] 테이블의 보조 인덱스는 기본 인덱스와 패턴이 동일합니다.사용자가 필수 또는 프라이빗 테이블에 항목을 생성할 때는 AWS가 새롭게 생성하는 항목의 기본키 값을 해당 사용자의 Amazon Cognito 자격 증명 ID로 채웁니다.

194

Page 198: AWS Mobile Hub 개발자 안내서 - 개발자 안내서 · 2020-02-07 · iOS - Swift 1.iOS를 플랫폼으로 선택하고 다음을 선택합니다. 2.Download Cloud Config(클라우드

AWS Mobile Hub 개발자 안내서 개발자 안내서Mobile Hub 기능

보호됨 또는 프라이빗 항목에서 데이터 작업을 실행하려고 하면 제약이 따릅니다. IAM이 해당 항목의 userId가 현재 사용자의 Amazon Cognito 자격 증명 ID와 일치하는지 검사한 후 테이블에 연결되어 있는 정책에 따라 작업을 허용하거나 거부합니다.테이블 권한으로 Public(퍼블릭)을 선택하면 소유권에 대한 제약이 없습니다. [Public] 데이터의 기본 키와 보조 인덱스 기본 키 이름 및 데이터 형식에도 제한이 없습니다.

작성자가 다수일 때 제한된 항목에 대한 권한 관리

Mobile Hub가 Protected(보호됨) 또는 Private(프라이빗) 권한이 설정된 테이블에 대한 액세스 제한을 프로비저닝한 후에는 IAM이 테이블 항목을 생성하는 모바일 앱 사용자만 해당 항목의 속성 값을 작성할 수 있도록허용합니다. 하지만 다수의 사용자가 기존 항목에 데이터를 작성해야 하는 경우를 대비해 스키마를 설계할때는 사용자들이 다른 테이블에 작성할 수 있도록 스키마 구조를 설계하는 방법이 있습니다. 이러한 설계에서는 앱이 두 테이블 모두에게 쿼리를 실행하여 데이터를 조인합니다.

예를 들어 고객은 orders 테이블에 주문을 작성하고, 배송 서비스 운전 기사는 배송 추적 정보를deliveries 테이블에 작성합니다. 그러면 두 테이블에 orderId 또는 customerId를 기준으로 빠르게 조회할 수 있는 보조 인덱스가 정의됩니다.

데이터 가져오기

NoSQL 데이터베이스에서 데이터를 가져오는 작업은 다음과 같습니다.

• Get - 기본 키의 일치 여부에 따라 테이블에서 단일 항목을 가져옵니다.• Query - 기본 키 속성 값만 사용하여 테이블 또는 보조 인덱스의 항목을 찾습니다.• Scan - 테이블 또는 보조 인덱스의 모든 항목을 읽어옵니다. 기본적으로 Scan 작업은 테이블이나 인덱스

에 속한 항목의 데이터 속성을 모두 반환합니다. 모든 속성보다는 일부 속성만 반환할 때도 [Scan]을 사용할 수 있습니다.

• Query with Filter`s, which performs a :code:`Query. 하지만 작성하는 필터 표현식에 따라결과를 필터링하여 반환합니다.

• Scan with Filters - Scan을 실행하는 것과 동일하지만 작성하는 필터 표현식에 따라 결과를 필터링하여 반환합니다.

자세한 내용은 DynamoDB의 쿼리 및 스캔 작업을 참조하십시오.

이 기능에 프로비저닝된 AWS 리소스 보기

다음은 일반적으로 NoSQL 데이터베이스 기능으로 프로비저닝되는 AWS 요소를 Mobile Hub 리소스 창에표시한 이미지입니다.

195

Page 199: AWS Mobile Hub 개발자 안내서 - 개발자 안내서 · 2020-02-07 · iOS - Swift 1.iOS를 플랫폼으로 선택하고 다음을 선택합니다. 2.Download Cloud Config(클라우드

AWS Mobile Hub 개발자 안내서 개발자 안내서Mobile Hub 기능

퀵스타트 앱 세부 정보

Mobile Hub 퀵스타트 앱에서 NoSQL 데이터베이스 데모를 보면 앱 구성 과정에서 생성되는 모든 테이블 목록이 나와 있습니다. 임의의 테이블을 선택하면 기본 인덱스, 보조 인덱스 및 정렬 키에 대한 선택 사항에 따라 테이블에서 사용할 수 있는 모든 쿼리가 목록으로 표시됩니다. 예제 테이블을 사용하여 테이블을 생성하는 경우에는 앱 사용자가 샘플 데이터를 앱에 삽입하거나 삭제할 수 있습니다.

메시징 및 분석 기능

iOS 및 Android용 AWS SDK를 찾고 있으십니까? 이들 SDK와 그 문서는 AWS Amplify에 일부로 제공됩니다.

이 페이지의 콘텐츠는 AWS Mobile Hub 또는 awsmobile CLI를 사용해 구성된 앱에만 적용됩니다. v2.8.0이전 버전의 AWS Mobile SDK를 사용하고 있는 기존 앱의 경우, AWS Amplify 및 최신 SDK를 사용하도록앱을 마이그레이션하는 것이 좋습니다.

AWS Mobile Hub 메시징 및 분석 기능을 선택하여 다음을 수행하십시오.

• 앱 사용자의 행동 패턴을 이해하기 위해 데이터 수집• 이 정보를 활용하여 푸시 알림, 이메일 및 SMS를 통해 사용자의 참여도를 높일 수 있는 캠페인을 추가

무료 Mobile Hub 프로젝트를 생성하고 메시징 및 분석 기능을 추가합니다.

196

Page 200: AWS Mobile Hub 개발자 안내서 - 개발자 안내서 · 2020-02-07 · iOS - Swift 1.iOS를 플랫폼으로 선택하고 다음을 선택합니다. 2.Download Cloud Config(클라우드

AWS Mobile Hub 개발자 안내서 개발자 안내서Mobile Hub 기능

기능 세부 정보AWS Mobile Hub 메시징 및 분석 기능(이전의 사용자 참여 기능)은 사용자가 앱을 어떻게 사용하는지 이해할수 있도록 도와줍니다. 푸시 알림, 이메일 또는 SMS를 통해 고객의 참여도를 높일 수 있도록 해줍니다. 분석기능을 메시징 기능과 연계하여 사용자의 행동 패턴에서 흐름을 파악하여 공유할 수 있습니다.

다음 이미지는 Amazon Pinpoint를 사용하여 모바일 앱에서 사용량 데이터를 수집하는 메시징 및 분석 기능을 보여줍니다. Amazon Pinpoint는 앱을 위해 설계된 캠페인 로직을 토대로 선택된 앱 사용자에게 메시지를전송합니다.

메시징 및 분석 기능을 별도로 구성하거나 두 기능을 함께 사용하여 앱 사용량을 토대로 사용자와 상호 작용하기 위한 캠페인을 수행할 수 있습니다. 캠페인의 메시지를 수신하게 될 사용자를 비롯하여 메시지 전송을위한 조건 및 스케줄링 로직을 구성할 수 있습니다. 텍스트를 주고 받거나 프로그래밍 방식의 작업(애플리케이션 열기, 클라이언트에 사용자 지정 JSON 전달)을 발생시키도록 알림을 구성할 수 있습니다.

분석을 선택하면 Amazon Pinpoint가 앱 사용량 및 캠페인 데이터에 대해 캡처, 시각화 및 분석을 수행합니다.

• 기본적으로 Amazon Pinpoint는 앱 사용량 세션 데이터를 수집합니다.• 캠페인을 구성하면 캠페인에 대한 측정치가 포함됩니다.• 앱에 사용자 지정 분석을 추가하면 이러한 측정치를 시각화하고, 이러한 데이터를 캠페인 활동에서 요인으

로 사용하도록 Amazon Pinpoint를 구성할 수 있습니다. 사용자 지정 분석 통합에 대해 자세히 알아보려면Amazon Pinpoint 사용 설명서의 앱에 Amazon Pinpoint 통합을 참조하십시오.

• Amazon Pinpoint를 사용하면 퍼널 분석을 구성하여 사용자의 앱 참여도를 높이기 위한 마련된 일련의 단계를 얼마나 많은 사용자가 완료했는지 시각적으로 확인할 수 있습니다.

• 하나 이상의 앱에서 나온 데이터를 병합하거나 유연하게 쿼리를 수행하는 등 보다 복잡한 분석 작업을수행하기 위해 Kinesis에 데이터를 스트리밍하도록 Amazon Pinpoint를 구성할 수 있습니다. AmazonPinpoint와 Kinesis를 함께 사용할 수 있는 방법에 대한 자세한 내용은 Amazon Kinesis로 Amazon Pinpoint이벤트 스트리밍을 참조하십시오.

메시징을 선택하면 Amazon Pinpoint에서 전송할 수 있도록 프로젝트를 구성할 수 있습니다.

• Firebase Cloud Messaging(FCM)/Google Cloud Messaging(GCM), iOS 또는 APN을 통해 Android 사용자에게 푸시 알림을 전송

• 원하는 발신자 ID 및 도메인을 사용하여 앱 사용자에게 이메일 전송• SMS 메시지

197

Page 201: AWS Mobile Hub 개발자 안내서 - 개발자 안내서 · 2020-02-07 · iOS - Swift 1.iOS를 플랫폼으로 선택하고 다음을 선택합니다. 2.Download Cloud Config(클라우드

AWS Mobile Hub 개발자 안내서 개발자 안내서Mobile Hub 기능

Mobile Hub 프로젝트에서 메시징 및 분석 옵션을 활성화하면 Amazon Pinpoint 콘솔을 사용하여 분석 결과를 시각적으로 확인하거나 사용자 세그먼트 및 캠페인을 구성할 수 있습니다. 또한 어떤 사용자 그룹에서도캠페인을 사용할 수 있도록 Amazon Pinpoint에 사용자 세그먼트 데이터를 내보낼 수 있습니다.

메시징 및 분석 기능 개요

AWS 서비스 및 구성 리소스 • Amazon Pinpoint(Amazon Pinpoint 개발자 안내서 참조)

개념 | 콘솔

Mobile Hub에서 지원되는 기능은 Amazon Cognito을 인증에, IAM을 권한 부여에 사용합니다. 자세한내용은 사용자 로그인 (p. 204)을 참조하십시오.

구성 옵션 이 기능은 다음과 같은 모바일 백엔드 기능들을 활성화합니다.

• 앱 사용자의 행동 패턴에 대한 분석 데이터를 수집하여 시각화합니다.• Amazon Pinpoint 사용자 세그먼트 캠페인을 모

바일 앱에 통합합니다.• APN, GCM 및 FCM을 통해 푸시 알림을 이용하

여 앱 사용자와 통신합니다.• Firebase 또는 Google 클라우드 메시징

(FCM/GCM)을 통해(Android 푸시 알림 설정참조)

• Apple 푸시 알림 서비스(APN)를 통해(iOS 푸시 알림 설정 참조)

자세한 내용은 푸시 알림 구성을 참조하십시오.• 이메일을 통해 앱 사용자와 통신합니다.• SMS를 통해 앱 사용자와 통신합니다.

퀵스타트 앱 데모 이 기능은 Mobile Hub에서 생성된 퀵스타트 앱에 사용자 참여 기능을 추가합니다.

• 앱 사용자가 캠페인 알림을 수신하도록 지원할 수있음을 보여줍니다. 앱 사용자는 세션, 사용자 지정, 캠페인 및 구매 데이터를 생성하는 이벤트를발생시킬 수 있습니다. 이러한 이벤트에 대한 분석 결과를 Amazon Pinpoint 콘솔에서 실시간에가깝게 사용할 수 있습니다.

• 앱 사용자가 휴대폰에서 Amazon Pinpoint 데이터를 시각적으로 확인할 수 있다는 것을 보여줍니다.

호스팅 및 스트리밍AWS Mobile Hub 호스팅 및 스트리밍을 선택하여 다음을 수행하십시오.

• 모바일 앱, 네이티브 모바일 또는 하이브리드 앱을 위한 콘텐츠 호스팅• 글로벌 콘텐츠 전송 네트워크(CDN)를 통해 콘텐츠 배포

198

Page 202: AWS Mobile Hub 개발자 안내서 - 개발자 안내서 · 2020-02-07 · iOS - Swift 1.iOS를 플랫폼으로 선택하고 다음을 선택합니다. 2.Download Cloud Config(클라우드

AWS Mobile Hub 개발자 안내서 개발자 안내서Mobile Hub 기능

• 미디어 스트리밍

호스팅 및 스트리밍을 통해 무료 Mobile Hub 프로젝트를 생성합니다. 사용자 지정 샘플 앱 및 SDK를 가져옵니다.

기능 세부 정보호스팅 및 스트리밍 기능은 Amazon S3(Amazon Simple Storage Service) 및 Amazon CloudFront를 사용하여 엔드포인트의 글로벌 네트워크를 통해 콘텐츠를 제공합니다.

다음 이미지는 웹사이트 애셋 및 스트리밍 미디어가 모바일 웹 앱이나 브라우저에 어떻게 배포되는지 보여줍니다. 그림에서와 같이 웹 앱은 JavaScript용 AWS SDK를 통해 AWS 자격 증명을 요청하고 AWS 서비스를액세스합니다.

다음 이미지는 CDN 엣지 로케이션에서 나온 콘텐츠를 액세스하기 위해 AWS 자격 증명을 요청하고 있는 네이티브 또는 하이브리드 모바일 앱을 보여줍니다.

호스팅 및 스트리밍 기능은 웹사이트와 HTML, JavaScript 이미지, 미디어 파일 같은 클라우드의 앱 애셋을호스팅할 수 있도록 해줍니다. Mobile Hub는 Amazon S3 버킷을 사용하여 콘텐츠 소스 스토리지 위치(원본)를 생성합니다. 버킷은 웹 서버 없이 웹 콘텐츠를 정적으로 호스팅할 수 있는 기능을 통해 인터넷에서 액세스가 가능합니다.

199

Page 203: AWS Mobile Hub 개발자 안내서 - 개발자 안내서 · 2020-02-07 · iOS - Swift 1.iOS를 플랫폼으로 선택하고 다음을 선택합니다. 2.Download Cloud Config(클라우드

AWS Mobile Hub 개발자 안내서 개발자 안내서Mobile Hub 기능

엣지 로케이션 글로벌 네트워크에서 소스 콘텐츠가 캐시에 저장되기 때문에 모든 리전의 사용자가 짧은 지연시간으로 콘텐츠에 액세스할 수 있습니다. 이 콘텐츠 배포 네트워크(CDN)는 미디어 파일 스트리밍도 지원하는 Amazon CloudFront 배포판을 통해 제공됩니다(Amazon CloudFront 스트리밍 참조).

호스팅 및 스트리밍 개요

AWS 서비스 및 구성 리소스 • Amazon CloudFront - 콘텐츠 전송 네트워크(Amazon CloudFront 참조)

개념 | 콘솔 | 요금• Amazon S3 버킷(Amazon S3 시작 안내서

<https://aws.amazon.com/cloudfront/pricing/>`__참조)

개념 | 콘솔 | 요금

Mobile Hub에서 지원되는 기능은 Amazon Cognito을 인증에, IAM을 권한 부여에 사용합니다. 자세한내용은 사용자 로그인 (p. 204)을 참조하십시오.

자세한 내용은 이 기능에 프로비저닝된 AWS 리소스 보기 (p. 202)를 참조하십시오.

구성 옵션 이 기능은 다음과 같은 모바일 백엔드 기능들을 활성화합니다.

• 웹 앱 콘텐츠 호스팅 (콘텐츠를 인터넷에서 액세스, 웹 서버가 필요하지 않음)

• JavaScript용 AWS SDK (표준 스크립팅을 통해AWS 서비스 호출)

• 글로벌 CDN (글로벌 콘텐트 배포 및 미디어 스트리밍) CloudFront는 배포판의 리전 범위와 비용에대한 여러 가지 옵션을 제공합니다. 자세한 내용은 호스팅 및 스트리밍 기능 구성 (p. 201)을 참조하십시오.

웹 앱 데모 샘플

• Javascript용 AWS SDK와 사용자 지정 구성 파일이 버킷에 프로비저닝됩니다.

자세한 내용은 웹 앱 지원 (p. 200)을 참조하십시오.

퀵스타트 네이티브 앱 데모 이 기능은 Mobile Hub에서 생성된 퀵스타트 앱에 다음을 추가합니다.

• AWS 스토리지의 파일 목록을 보고, 파일을 다운로드 및 확인하며, 로컬 캐시를 관리합니다.

웹 앱 지원

호스팅 및 스트리밍을 활성화하면 모바일 허브가 버킷 루트에 JavaScript용 AWS SDK의 로컬 복사본을 프로비저닝합니다.

200

Page 204: AWS Mobile Hub 개발자 안내서 - 개발자 안내서 · 2020-02-07 · iOS - Swift 1.iOS를 플랫폼으로 선택하고 다음을 선택합니다. 2.Download Cloud Config(클라우드

AWS Mobile Hub 개발자 안내서 개발자 안내서Mobile Hub 기능

또한 모바일 허브는 프로젝트 구성 파일 aws-config.js 및 aws-exports.js를 생성하는데, 이들 파일에는 프로젝트를 위해 구성된 각 AWS 서비스 모바일 허브를 위한 엔드포인트 상수를 포함하고 있습니다.Node.js 같이 ES6과 호환이 가능한 스크립팅 언어와 통합이 가능하도록 aws-exports.js가 제공됩니다.이러한 값을 사용하여 호스팅된 웹 앱에서 SDK 서비스 호출을 수행합니다.

Note

앱의 리소스에 대한 액세스를 최대한 줄이는 것이 가장 좋은 보안 전략입니다. 이러한 구성 파일은 공개적으로 액세스가 가능하며, 앱의 모든 AWS 리소스에 대한 식별자를 포함하고 있습니다.설계에 부합할 경우, 인증된 사용자에게만 액세스를 허용하여 리소스를 보호하는 것이 좋습니다.Require sign-in(로그인 필요) 옵션을 사용하여 Mobile Hub 사용자 로그인 (p. 204)을 활성화함으로써 이 프로젝트에서 이 작업을 수행할 수 있습니다.

또한, 하이브리드 네이티브/웹 모바일 앱에 해당되는 구성 파일을 복사하여 JavaScript를 사용해 앱에서AWS 서비스를 호출할 수 있도록 할 수 있습니다.

호스팅 및 스트리밍 기능 구성

주제• 콘텐츠 검색 (p. 201)• 앱 애셋 관리 (p. 201)• 웹 앱에서 사용자 지정 도메인 사용 (p. 202)

콘텐츠 검색

호스팅 및 스트리밍 기능이 활성화되면 몇 가지 옵션을 사용할 수 있습니다.

• Launch from Amazon S3(Amazon S3에서 실행): 이 옵션은 소스 버킷의 루트에서 캐시에 저장되지 않은index.html을 검색합니다.

• Launch from Amazon CloudFront(Amazon CloudFront에서 실행): 이 옵션은 CDN 엣지 서버에서 캐시에저장된 index.html을 검색합니다.

Note

배포판에 대한 엣지 로케이션을 프로비저닝하는 데 최대 한 시간이 소요될 수 있습니다. 네트워크에서 배포판의 전파가 완료될 때까지 이 링크는 확인되지 않습니다.

• Manage files(파일 관리): 이 옵션은 Amazon S3 콘솔을 열어서 소스 버킷의 콘텐츠를 검토 및 관리합니다.또한, Mobile Hub에서 프로젝트를 열고 왼쪽의 리소스 아이콘을 선택하면 Amazon S3 콘솔에서 버킷을 찾을 수 있습니다. 호스팅 및 스트리밍을 위해 구성된 버킷의 이름에는 문자열 hosting이 포함되어 있습니다.

앱 애셋 관리

Amazon S3 콘솔, AWS 명령줄 인터페이스(CLI) 또는 출시된 다양한 타사 애플리케이션 중 하나를 사용하는등 다양한 방법 중 원하는 방법을 선택하여 웹 앱 애셋을 관리할 수 있습니다.

Amazon S3 콘솔 사용

Amazon S3 콘솔을 사용하여 버킷에 저장된 파일을 검토, 업로드, 이동 또는 삭제하려면 Amazon S3 콘솔로이동하여 이름에 프로젝트 이름이 포함된 버킷을 선택합니다. 웹 앱 콘텐츠는 루트 폴더에 상주합니다.

AWS CLI 사용

AWS CLI는 명령줄을 사용하여 버킷에 저장된 파일을 검토, 업로드, 이동 또는 삭제할 수 있도록 해줍니다.

AWS CLI 클라이언트를 설치 및 구성하는 방법은 AWS 명령줄 인터페이스로 설정을 참조하십시오.

한 예로, 동기화 명령을 사용하면 로컬 폴더(source) 및 버킷(destination)과 파일을 주고 받을 수 있습니다.

201

Page 205: AWS Mobile Hub 개발자 안내서 - 개발자 안내서 · 2020-02-07 · iOS - Swift 1.iOS를 플랫폼으로 선택하고 다음을 선택합니다. 2.Download Cloud Config(클라우드

AWS Mobile Hub 개발자 안내서 개발자 안내서Mobile Hub 기능

$ aws s3 sync {source destination} [--options]

다음의 명령은 현재 로컬 폴더에서 나온 모든 파일을 path에 정의된 웹 앱 버킷의 폴더로 동기화합니다.

$ aws s3 sync . s3://my-web-app-bucket/path

AWS CLI를 사용하여 Amazon S3을 관리하는 방법에 대한 자세한 내용은 AWS 명령줄 인터페이스와 함께Amazon S3 사용을 참조하십시오

웹 앱에서 사용자 지정 도메인 사용

호스팅 및 스트리밍 CDN을 사용자 지정 도메인의 목적지로 구성하려면 도메인 이름을 사용하여 AmazonCloudFront 웹 배포판으로 트래픽 라우팅을 참조하십시오.

이 기능에 프로비저닝된 AWS 리소스 보기

다음 이미지는 보통 호스팅 및 스트리밍 기능을 위해 프로비저닝되는 요소들을 표시하는 Mobile Hub 리소스창을 보여줍니다.

퀵스타트 앱 세부 정보

Mobile Hub 퀵스타트 앱에서 호스팅 및 스트리밍 데모는 로컬 다운로드 및 캐시 저장과 디바이스 표시가 가능한 이미지 파일 집합을 나열합니다. 사용자는 이 이미지 파일의 로컬 복사본을 삭제할 수도 있습니다.

대화형 봇AWS Mobile Hub 대화형 봇 모바일 백엔드 서비스는 다음과 같은 기능을 제공합니다.

• 음성 및 텍스트 자연어를 이해할 수 있는 인터페이스를 앱에 추가합니다.• 자연어 음성 및 텍스트를 사용하여 클라우드 환경의 비즈니스 로직과 상호 작용합니다.

무료 Mobile Hub 프로젝트를 생성하여 대화형 봇 기능을 추가합니다.

202

Page 206: AWS Mobile Hub 개발자 안내서 - 개발자 안내서 · 2020-02-07 · iOS - Swift 1.iOS를 플랫폼으로 선택하고 다음을 선택합니다. 2.Download Cloud Config(클라우드

AWS Mobile Hub 개발자 안내서 개발자 안내서Mobile Hub 기능

기능 세부 정보

다음은 Amazon Lex를 사용하여 자연어를 다른 서비스를 위한 통합 포인트로서 모바일 앱 인터페이스에 추가하는 대화형 봇을 나타낸 이미지입니다.

AWS Mobile Hub 대화형 봇은 동일한 자연어 이해 및 비즈니스 로직 통합을 모바일 앱에 구현하여 AmazonAlexa와 Amazon Shopping의 음성/텍스트 대화 환경을 한층 강화합니다.

Mobile Hub 대화형 봇은 음성/텍스트 대화 인터페이스를 애플리케이션에 구축하기 위한 AWS 서비스인Amazon Lex를 사용합니다. Amazon Lex는 에 기본적으로 통합되어 있습니다.

대화형 봇과 Amazon Lex만 있으면 딥 러닝 전문성은 더 이상 필요 없습니다. Amazon Lex 콘솔에서 기본적인 대화 흐름을 지정하여 봇을 생성하기만 하면 됩니다. 이 서비스는 대화를 관리하면서 대화에서 발생하는응답을 동적으로 조정합니다. Mobile Hub 대화형 봇을 사용하면 데모 템플릿을 기준으로 봇을 프로비저닝하여 테스트하거나, 혹은 Amazon Lex 콘솔에서 개발한 봇을 프로비저닝하여 테스트할 수 있습니다. MobileHub는 사용자 앱에서 생성되는 샘플 앱 코드를 재사용할 목적으로 통합 명령어와 사용자 지정 구성 요소를제공합니다.

대화형 봇 살펴보기

AWS 서비스 및 구성 리소스 • Amazon Lex(Amazon Lex 개발자 안내서 참조)

개념 | 콘솔

Mobile Hub에서 지원되는 기능은 Amazon Cognito을 인증에, IAM을 권한 부여에 사용합니다. 자세한내용은 사용자 로그인 (p. 204)을 참조하십시오.

구성 옵션 이 기능은 다음과 같은 모바일 백엔드 기능들을 활성화합니다.

• Amazon Lex 서비스에서 제공되는 데모 템플릿을기준으로, 혹은 Amazon Lex 콘솔을 사용해 사용자 지정 텍스트 및/또는 음성 명령어를 앱에 추가하여 대화형 봇을 개발하고 구성합니다.

• 기본적인 iOS 및 Android SDK 패키지인 퀵스타트앱의 코드는 물론이고 헬퍼 코드와 라인 지침까지다운로드하여 재사용할 수 있도록 앱을 통합합니다. 이 모든 코드와 지침은 Mobile Hub 프로젝트에 따라 동적으로 작성됩니다.

203

Page 207: AWS Mobile Hub 개발자 안내서 - 개발자 안내서 · 2020-02-07 · iOS - Swift 1.iOS를 플랫폼으로 선택하고 다음을 선택합니다. 2.Download Cloud Config(클라우드

AWS Mobile Hub 개발자 안내서 개발자 안내서Mobile Hub 기능

퀵스타트 앱 데모 이 기능으로 Mobile Hub에서 개발된 퀵스타트 앱에추가되는 기능은 다음과 같습니다.

• 사용자가 Amazon Lex와 상호 작용하는 대화형봇과 상호 작용할 수 있습니다.

사용자 로그인

iOS 및 Android용 AWS SDK를 찾고 있으십니까? 이들 SDK와 그 문서는 AWS Amplify에 일부로 제공됩니다.

이 페이지의 콘텐츠는 AWS Mobile Hub 또는 awsmobile CLI를 사용해 구성된 앱에만 적용됩니다. v2.8.0이전 버전의 AWS Mobile SDK를 사용하고 있는 기존 앱의 경우, AWS Amplify 및 최신 SDK를 사용하도록앱을 마이그레이션하는 것이 좋습니다.

AWS Mobile Hub 사용자 로그인 모바일 백엔드 기능을 선택하여 다음을 수행합니다.

• AWS 사용자 인증 및 보안 자격 증명 액세스 관리를 모바일 앱에 추가합니다.

참고: AWS 리소스에 대해 인증되지 않은 보안 액세스는 사용자 로그인 기능의 사용 여부와 상관없이 모든 Mobile Hub 프로젝트에서 사용할수 있습니다.

• 사용자는 Facebook, Google, Microsoft Active Directory Federation Services 또는 고유의 사용자 지정 사용자 디렉터리와 같은 자격 증명 공급자의 기존 자격 증명을 사용하여 AWS 리소스에 액세스하기 위해 로그인할 수 있습니다.

무료 Mobile Hub 프로젝트를 생성하고 사용자 로그인 기능을 추가합니다.

기능 세부 정보

다음 이미지는 인증되지 않은 사용자에게 적용되는 리소스 액세스 정책을 보여줍니다.

다음 이미지는 인증된 사용자에게 적용되는 리소스 액세스 정책을 보여줍니다.

204

Page 208: AWS Mobile Hub 개발자 안내서 - 개발자 안내서 · 2020-02-07 · iOS - Swift 1.iOS를 플랫폼으로 선택하고 다음을 선택합니다. 2.Download Cloud Config(클라우드

AWS Mobile Hub 개발자 안내서 개발자 안내서Mobile Hub 기능

이 기능을 사용하면 로그인 프로세스를 사용하지 않거나 하나 이상의 자격 증명 공급자가 제공한 인증을 통해 사용자가 앱에서 사용하는 AWS 리소스 및 서비스에 액세스할 수 있는 방법을 구성할 수 있습니다. 두 경우 모두 AWS 자격 증명 생성 및 자격 증명이 Amazon Cognito 자격 증명에서 제공되며, 액세스 권한 부여는AWS Identity and Access Management(IAM)를 통해 이루어집니다.

프로젝트를 생성하면 Mobile Hub는 모든 사용자에게 무제한 리소스에 대한 액세스를 허용하는 데 필요한AWS 자격 증명, 사용자 역할 및 액세스 정책 구성을 프로비저닝합니다. 사용자 로그인 기능을 앱에 추가하면 자격 증명 공급자가 확인한 자격 증명을 사용하여 로그인한 사용자만이 보호된 리소스를 사용할 수 있도록 액세스를 제한할 수 있습니다. Amazon Cognito 자격 증명를 통해 앱 사용자는 Mobile Hub 프로젝트에 대해 활성화하고 구성한 AWS 서비스에 직접 액세스하기 위한 AWS 자격 증명을 얻습니다. 인증된 사용자와인증되지 않은 사용자 모두 동일한 수준의 보안 적용으로 권한이 제한된 임시 자격 증명을 부여받습니다.

Amazon Cognito는 여러 자격 증명 공급자의 확인된 사용자 자격 증명을 단일 AWS 자격 증명에 연동할 수있습니다. Mobile Hub는 사용자가 Facebook, Google 및 자체 자격 증명 시스템의 기존 자격 증명을 사용하여 로그인할 수 있도록 자격 증명 공급자를 모바일 앱에 통합하는 데 도움이 됩니다. 또한 사용자 풀을 사용하여 자체 이메일 및 암호 기반 사용자 디렉터리를 생성하고 구성할 수 있습니다.

사용자 로그인 기능 개요

AWS 서비스 및 구성 리소스 • Amazon Cognito

개념 | 콘솔 | 요금• Amazon Cognito 자격 증명 풀

(연동된 자격 증명 사용 참조)• Amazon Cognito 사용자 풀

(사용자 풀 생성 및 관리 참조)• Amazon Cognito SAML 연동

(SAML 2.0 기반 연동 구성의 개요 참조)• IAM 역할 및 보안 정책(Mobile Hub 프로젝트에 대

한 액세스 제어 (p. 213) 참조)

개념 | 콘솔 | 요금

205

Page 209: AWS Mobile Hub 개발자 안내서 - 개발자 안내서 · 2020-02-07 · iOS - Swift 1.iOS를 플랫폼으로 선택하고 다음을 선택합니다. 2.Download Cloud Config(클라우드

AWS Mobile Hub 개발자 안내서 개발자 안내서Mobile Hub 기능

자세한 내용은 이 기능에 프로비저닝된 AWS 리소스 보기 (p. 208)를 참조하십시오.

구성 옵션 이 기능은 다음과 같은 모바일 백엔드 기능들을 활성화합니다.

로그인 공급자(로그인 시 사용자에게 더 많은 액세스 권한 부여)

• Google 인증을 통해(백엔드 설정 (p. 20) 참조)• Facebook 인증을 통해(mobile-auth-setup 참조)• 이메일 및 암호 인증을 통해(사용자 로그인 공급

자 (p. 206) 참조)• SAML 연동 인증을 통해(사용자 로그인 공급

자 (p. 206) 참조)

필수 로그인(인증된 액세스)

로그인(선택 사항)(사용자가 로그인 시 더 많은액세스 부여) 자세한 내용은 사용자 로그인 구성 (p. 206) 참조

퀵스타트 데모 기능 이 기능은 Mobile Hub에서 생성된 퀵스타트 앱에 다음을 추가합니다.

• 인증되지 않은 액세스(앱 구성에서 허용된 경우),AWS가 앱 인스턴스의 디바이스에 할당하는 ID를표시합니다.

• 선택한 방법(Facebook, Google 또는 이메일 및암호(고유 사용자 풀))을 사용하여 사용자를 인증하는 로그인 화면.

• Optional Sign-in(로그인(선택 사항)) 및 RequireSign-in(필수 로그인)을 사용하여 앱은 인증되지않은 사용자를 위해 보호된 폴더에 대한 액세스장벽을 보여줍니다.

사용자 로그인 구성

다음 옵션을 사용하여 사용자의 로그인 환경을 구성할 수 있습니다.

사용자 로그인 공급자

Facebook

• Facebook 사용자 인증을 활성화하려면 애플리케이션을 Facebook에 등록합니다.

등록된 Facebook 앱이 이미 있는 경우 Facebook 개발자 [App Dashboard]에서 [App ID]를 복사합니다. ID를 Facebook [App ID] 필드에 붙여 넣고 [Save Changes]를 선택합니다.

Facebook 앱 ID가 아직 없는 경우 Facebook 앱 ID를 생성해야 모바일 앱에서 Facebook을 통합할 수 있습니다. Facebook 개발자 포털에서 Facebook 애플리케이션 설정 프로세스에 연결됩니다.

애플리케이션과 Facebook의 통합에 대한 자세한 내용은 Facebook 인증 설정을 참조하십시오.

Google

206

Page 210: AWS Mobile Hub 개발자 안내서 - 개발자 안내서 · 2020-02-07 · iOS - Swift 1.iOS를 플랫폼으로 선택하고 다음을 선택합니다. 2.Download Cloud Config(클라우드

AWS Mobile Hub 개발자 안내서 개발자 안내서Mobile Hub 기능

• Google을 통해 사용자를 인증하려면 샘플 앱을 Google+ Sign-in과 완전히 통합합니다.

Google+ API에 등록된 Google 콘솔 프로젝트가 이미 있는 경우 웹 애플리케이션 OAuthClient와 선택한플랫폼의 클라이언트 ID를 설정한 다음 Google 개발자 콘솔의 클라이언트 ID와 Google 웹 앱 클라이언트ID를 복사하여 해당 필드에 붙여 넣고 Save Changes(변경 사항 저장)를 선택합니다.

선택한 플랫폼(Android 또는 iOS)에 관계없이 최소한 다음을 생성해야 합니다.• Google+ API가 활성화된 Google 콘솔 프로젝트(Google 로그인에 사용)• 웹 애플리케이션 OAuth 클라이언트 ID• 지원하는 플랫폼에 따라 iOS 및/또는 Android 클라이언트 ID

애플리케이션과 Google+의 통합에 대한 자세한 내용은 Google 인증 설정을 참조하십시오.

이메일 및 암호

• 앱 사용자를 위한 로그인 프로세스와 자체 AWS 관리형 사용자 디렉터리를 생성하려면 이메일 및 암호 로그인을 선택합니다. 다음을 수행하여 로그인 환경의 특성을 구성합니다.• 사용자 로그인 옵션(이메일, 사용자 이름 및/또는 전화 번호) 선택• 항목 코드의 전송을 문자 메시지를 통해 사용자의 전화에 추가하는 멀티 팩터 인증(없음, 필수, 선택 사

항)과 로그인을 위해 다른 요소와 함께 해당 코드를 입력하라는 프롬프트 활성화• 암호 문자 요구 사항(최소 길이, 대문자/소문자, 숫자 또는 허용된 특수 문자) 선택

SAML 연동

• SAML 연동을 사용하면 기존 자격 증명 스토어에 자격 증명이 있는 사용자가 익숙한 사용자 이름과 암호를사용하여 모바일 앱에 로그인할 수 있습니다. 사용자는 유효한 SAML 어설션을 반환하도록 구성된 IdP(자격 증명 공급자)에 로그인합니다. 그런 다음 앱은 Amazon Cognito 연동 자격 증명을 사용하여 AWS 백엔드 서비스에 액세스할 수 있도록 권한이 제한된 일반적인 임시 자격 증명에 대한 SAML 어설션을 교환합니다.

SAML 2.0(Security Assertion Markup Language 2.0)은 Microsoft Active Directory 연동 서비스 및Shibboleth를 포함하여 많은 IdP가 사용하는 개방형 표준입니다. 이 Mobile Hub 옵션을 사용하려면 IdP가 SAML 2.0과 호환되어야 합니다. AWS와 IdP 사이의 연동을 설정하려면 두 시스템이 SAML 연동메타데이터를 교환해야 합니다. AWS 연동 메타데이터는 https://signin.aws.amazon.com/static/saml-metadata.xml에서 확인할 수 있습니다. 이 xml 파일은 IdP의 메타데이터가 사용해야 하는 형식을 보여줍니다. IdP의 SAML 연동 메타데이터에 대한 자세한 내용은 AWS와 타사 SAML 솔루션 공급자 통합을 참조하십시오.

이 교환을 구현하려면1. IdP의 설명서를 참조하여 AWS 연동 메타데이터 파일을 사용해 AWS를 서비스 공급자로 등록하는 방법

을 이해합니다.2. Mobile Hub 프로젝트가 이메일 및 암호 로그인을 사용하여 Amazon Cognito 사용자 풀을 생성하도록

구성되어 있는지 확인합니다.3. 사용자 풀에 대한 SAML 자격 증명 공급자 생성의 절차에 따라 IdP를 사용자 풀의 자격 증명 공급자로

구성합니다.

AWS가 SAML 연동을 지원하는 방법에 대해 자세히 알아보려면 SAML 2.0 기반 연동 구성의 개요를 참조하십시오.

사용자 로그인 요구 사항

선택적 로그인

207

Page 211: AWS Mobile Hub 개발자 안내서 - 개발자 안내서 · 2020-02-07 · iOS - Swift 1.iOS를 플랫폼으로 선택하고 다음을 선택합니다. 2.Download Cloud Config(클라우드

AWS Mobile Hub 개발자 안내서 개발자 안내서Mobile Hub 기능

• 사용자는 선택한 로그인 자격 증명 공급자를 사용하여 로그인(인증)하거나 로그인을 건너뛸 수 있습니다(인증되지 않음). 앱이 AWS 서비스에 안전하게 액세스할 수 있도록 앱은 Amazon Cognito 자격 증명에서권한이 제한된 임시 액세스 자격 증명을 인증된 사용자 또는 인증되지 않은 게스트 사용자로 받습니다.

필수 로그인

• 사용자는 선택한 로그인 공급자 중 하나를 사용하여 로그인해야 합니다. 앱이 AWS 서비스에 안전하게 액세스할 수 있도록 앱은 Amazon Cognito 자격 증명에서 권한이 제한된 임시 액세스 자격 증명을 인증된 사용자로 받습니다.

Note

사용자 로그인이 필요하지 않은 경우 인증되지 않은 사용자는 리소스가 또 다른 메커니즘을 통해 명시적으로 제한되지 않는 한 스토리지 버킷의 데이터베이스 테이블 및 파일에 있는 데이터에 액세스할 수 있습니다.

사용자 로그인 및 AWS Identity and Access Management(IAM)

모바일 앱이 저장되면 Mobile Hub는 Amazon Cognito 자격 증명 풀과 새로운 IAM 역할을 생성합니다. 이는 퀵스타트 앱 사용자가 AWS 리소스에 액세스할 수 있는 임시 AWS 자격 증명을 생성하는 데 사용됩니다.AWS 역할 보안 정책은 활성화된 로그인 기능을 기반으로 업데이트됩니다.

이때 사용자가 로그인할 수 있도록 모바일 프로젝트가 설정됩니다. 선택한 자격 증명 공급자마다 퀵스타트앱의 로그인 화면에 추가되었습니다.

자세한 내용은 Mobile Hub 프로젝트에 대한 액세스 제어 (p. 213)를 참조하십시오.

이 기능에 프로비저닝된 AWS 리소스 보기

다음 이미지는 사용자 로그인 기능에 대해 일반적으로 프로비저닝된 요소를 표시하는 Mobile Hub리소스 창을 보여줍니다.

208

Page 212: AWS Mobile Hub 개발자 안내서 - 개발자 안내서 · 2020-02-07 · iOS - Swift 1.iOS를 플랫폼으로 선택하고 다음을 선택합니다. 2.Download Cloud Config(클라우드

AWS Mobile Hub 개발자 안내서 개발자 안내서Mobile Hub 기능

퀵스타트 앱 세부 정보Mobile Hub 퀵스타트 앱에서 사용자 로그인 데모를 사용하면 사용자가 인증 없이 또는 Facebook, Google,SAML 연동 또는 이메일 및 암호를 비롯한 자격 증명 공급자를 통해 앱에 로그인하여 AWS 리소스에 액세스하는 기능을 사용할 수 있습니다.

Optional Sign-in(로그인(선택 사항)) 옵션을 사용하여 사용자 로그인을 프로젝트에 추가한 경우 앱의 퀵스타트 로그인 데모를 선택하면 사용자의 Amazon Cognito 자격 증명 풀 ID가 반환되고 표시됩니다. 이 식별자는현재 AWS 리소스에 액세스하는 앱 인스턴스의 디바이스와 연결됩니다.

Required Sign-in(필수 로그인)을 사용하여 사용자 로그인을 프로젝트에 추가한 경우 앱의 퀵스타트 로그인데모를 선택하면 프로젝트에 구성된 자격 증명 공급자와 일치하도록 브랜딩된 로그인 환경이 표시됩니다. 데모에 로그인하면 선택한 자격 증명 공급자 서비스에서 사용자가 인증되고 사용자의 자격 증명 풀 ID 식별자가 반환되고 표시됩니다.

사용자 파일 스토리지

iOS 및 Android용 AWS SDK를 찾고 있으십니까? 이들 SDK와 그 문서는 AWS Amplify에 일부로 제공됩니다.

이 페이지의 콘텐츠는 AWS Mobile Hub 또는 awsmobile CLI를 사용해 구성된 앱에만 적용됩니다. v2.8.0이전 버전의 AWS Mobile SDK를 사용하고 있는 기존 앱의 경우, AWS Amplify 및 최신 SDK를 사용하도록앱을 마이그레이션하는 것이 좋습니다.

AWS Mobile Hub 사용자 파일 스토리지 선택 목적:

• 사용자 파일, 프로파일 데이터 및 앱 상태가 저장되는 클라우드 스토리지를 모바일 앱에 추가합니다.• 파일 및 데이터에 대한 액세스 제어를 세분화하여 공통된 권한 정책 패턴 4가지를 구현합니다.

Amazon Cognito Sync를 찾으시나요? Amazon Cognito Sync는 사용 중지되었습니다. 기본으로 제공되는 오프라인 기능을 이용한 장치 간실시간 데이터 동기화는 AWS AppSync를 참조하십시오.

무료 Mobile Hub 프로젝트를 생성하고 사용자 파일 스토리지 기능을 추가합니다.

기능 세부 정보Mobile Hub의 사용자 파일 스토리지 기능은 앱에 속한 Amazon Simple Storage Service(Amazon S3) 버킷에사용자마다 폴더 4개를 생성 및 구성합니다.

앱 보안 모범 사례에 따라 앱 설계를 지원하는 버킷에 대해서는 최소 액세스가 허용됩니다. 프로비저닝되는 폴더 4개는 각각 다른 권한이 연결되어 있다는 것을 설명하는 정책이 하나씩 있습니다. 그 밖에도 MobileHub는 사용자 로그인 (p. 204) 기능을 사용하여 앱에 대한 액세스 권한을 인증된 사용자로 제한하는 옵션을 제공합니다.

참고: 사용자 로그인 (p. 204) 기능을 필수로 설정하지 않으면 폴더 또는 버킷 액세스 정책에 따라 차단되지않기 때문에 인증을 거치지 않은 사용자에게도 데이터를 읽거나 쓸 수 있는 액세스 권한이 부여됩니다.

다음 표는 각 폴더마다 프로비저닝되는 권한 정책에 대한 세부 정보를 나타낸 것입니다.

폴더 이름 소유자 권한 기타 사용자 권한

Public 읽기/쓰기 읽기/쓰기

209

Page 213: AWS Mobile Hub 개발자 안내서 - 개발자 안내서 · 2020-02-07 · iOS - Swift 1.iOS를 플랫폼으로 선택하고 다음을 선택합니다. 2.Download Cloud Config(클라우드

AWS Mobile Hub 개발자 안내서 개발자 안내서Mobile Hub 기능

폴더 이름 소유자 권한 기타 사용자 권한

프라이빗 읽기/쓰기 없음

Protected 읽기/쓰기 읽기 전용

Uploads 쓰기 전용 쓰기 전용

다음은 Protected 폴더에서 파일 액세스를 제어할 목적으로 적용되는 IAM 정책을 나타낸 이미지입니다. 이정책에 따라 폴더를 생성한 사용자에게는 읽기/쓰기 권한이 부여되고, 기타 사용자에게는 읽기 전용 권한만부여됩니다.

사용자 파일 스토리지는 사진이나 문서 같은 사용자 파일을 클라우드에 저장할 수 있는 기능으로서, 앱 설정이나 게임 상태 같은 사용자 프로파일 데이터를 키/값 페어에 저장할 수도 있습니다. 이 기능을 선택하면 앱에서 사용자 파일을 저장하는 위치로 Amazon S3 버킷이 생성됩니다.

사용자 파일 스토리지 개요

AWS 서비스 및 구성 리소스 • Amazon S3 버킷(Amazon S3 시작 안내서 참조)

개념 | 콘솔 | 요금

Mobile Hub에서 지원되는 기능은 Amazon Cognito을 인증에, IAM을 권한 부여에 사용합니다. 자세한내용은 사용자 로그인 (p. 204)을 참조하십시오.자세한 내용은 이 기능에 프로비저닝된 AWS 리소스 보기 (p. 211)를 참조하십시오.

구성 옵션 사용자 데이터 스토리지 기능은 다음 구성 옵션을모바일 백엔드에서 활성화합니다.

• Amazon S3를 사용하여 사용자 파일과 앱 데이터를 저장합니다. 사용자 파일 스토리지를 활성화하면 다음과 같이 액세스 정책 구성이 서로 다른 파일 4개가 프로비저닝됩니다.• private - 모바일 앱 사용자는 이 폴더에서 자

신의 고유 파일을 생성하거나, 읽거나, 업데이트하거나, 삭제합니다. 다른 앱 사용자는 이 폴더에 액세스할 수 없습니다.

• protected - 모바일 앱 사용자는 이 폴더에서자신의 고유 파일을 생성하거나, 읽거나, 업데

210

Page 214: AWS Mobile Hub 개발자 안내서 - 개발자 안내서 · 2020-02-07 · iOS - Swift 1.iOS를 플랫폼으로 선택하고 다음을 선택합니다. 2.Download Cloud Config(클라우드

AWS Mobile Hub 개발자 안내서 개발자 안내서Mobile Hub 기능

이트하거나, 삭제합니다. 또한 모든 앱 사용자가 이 폴더에 저장되는 다른 앱 사용자의 파일을 읽을 수 있습니다.

• public ? 모든 앱 사용자가 이 폴더에서 파일을 생성하거나, 읽거나, 업데이트하거나, 삭제할 수 있습니다.

퀵스타트 데모 기능 이 기능은 Mobile Hub에서 생성된 퀵스타트 앱에 다음을 추가합니다.

• 앱의 S3 버킷용 파일 탐색기는 다음과 같은 사용자 작업이 가능합니다.• 퍼블릭 폴더의 파일을 업로드하거나 확인할 수

있습니다.• 사용자가 생성한 프라이빗 폴더의 파일을 확인

하거나 다운로드할 수 있습니다.• 어떤 사용자가 생성했든 상관없이 Protected(보

호됨) 폴더의 파일을 확인하거나 다운로드하고,해당 사용자가 생성한 경우에 한해 파일을 이폴더에 업로드할 수 있습니다.

• 파일을 Uploads 폴더에 업로드할 수 있습니다.사용자가 선택한 색상 테마 설정은 클라우드까지 계속 유지하거나 클라우드에서 가져올 수 있습니다.

이 기능에 프로비저닝된 AWS 리소스 보기

다음 이미지는 사용자 파일 스토리지 기능에 대해 일반적으로 프로비저닝되는 요소를 표시한 Mobile Hub리소스 창입니다.

211

Page 215: AWS Mobile Hub 개발자 안내서 - 개발자 안내서 · 2020-02-07 · iOS - Swift 1.iOS를 플랫폼으로 선택하고 다음을 선택합니다. 2.Download Cloud Config(클라우드

AWS Mobile Hub 개발자 안내서 개발자 안내서IAM 사용량

AWS Mobile Hub에서 AWS Identity and AccessManagement 사용

iOS 및 Android용 AWS SDK를 찾고 있으십니까? 이들 SDK와 그 문서는 AWS Amplify에 일부로 제공됩니다.

이 페이지의 콘텐츠는 AWS Mobile Hub 또는 awsmobile CLI를 사용해 구성된 앱에만 적용됩니다. v2.8.0이전 버전의 AWS Mobile SDK를 사용하고 있는 기존 앱의 경우, AWS Amplify 및 최신 SDK를 사용하도록앱을 마이그레이션하는 것이 좋습니다.

Note

AWS IAM 인증 및 액세스 제어에 대한 깊은 이해가 있어야만 Mobile Hub를 사용해 모바일 앱에 백엔드를 구성할 수 있는 것은 아닙니다.

• Mobile Hub 프로젝트에 대한 액세스 제어 (p. 213) - Mobile Hub 프로젝트 구성 권한을 부여하는 방법에대해 알아봅니다.

• Mobile Hub 프로젝트 권한 모델 (p. 212) - Mobile Hub에 AWS 리소스 및 서비스 구성 권한을 부여하는방법에 대해 알아봅니다.

• Mobile Hub의 IAM 인증 및 액세스 제어 (p. 217) - IAM 및 AWS 인증과 액세스 제어에 관한 세부 정보를알아봅니다.

Mobile Hub 프로젝트 권한 모델

iOS 및 Android용 AWS SDK를 찾고 있으십니까? 이들 SDK와 그 문서는 AWS Amplify에 일부로 제공됩니다.

이 페이지의 콘텐츠는 AWS Mobile Hub 또는 awsmobile CLI를 사용해 구성된 앱에만 적용됩니다. v2.8.0이전 버전의 AWS Mobile SDK를 사용하고 있는 기존 앱의 경우, AWS Amplify 및 최신 SDK를 사용하도록앱을 마이그레이션하는 것이 좋습니다.

중요

사용자가 계정의 Mobile Hub 프로젝트를 수정하려면 계정 관리자가 사용자에게 관리 권한을 부여 (p. 214)해야 합니다. 자세한 내용은 이 단원을 참조하십시오.

프로젝트에 대해 추가 권한이 필요한 사용자는 AWS 계정 관리자에게 연락하십시오. 새 권한 모델과 관련된문제로 도움을 받고 싶다면 [email protected]으로 연락하십시오.

주제• Mobile Hub 권한 모델 (p. 212)• 현재 Mobile Hub 권한을 부여할 때 MobileHub_Service_Role을 사용하고 있다면? (p. 213)• 권한 모델이 변경된 이유는? (p. 213)

Mobile Hub 권한 모델

현재 Mobile Hub의 권한 모델은 사용자가 Mobile Hub 콘솔이나 명령줄 인터페이스에서 작업을 수행할 때 사용자의 권한을 직접 사용합니다. 이 모델은 사용자가 직접 서비스와 상호 작용하기 위해 Mobile Hub를 사용

212

Page 216: AWS Mobile Hub 개발자 안내서 - 개발자 안내서 · 2020-02-07 · iOS - Swift 1.iOS를 플랫폼으로 선택하고 다음을 선택합니다. 2.Download Cloud Config(클라우드

AWS Mobile Hub 개발자 안내서 개발자 안내서IAM 사용량

하든 콘솔이나 명령줄 인터페이스를 사용하든 관계없이 사용자가 계정에서 수행할 수 있는 작업에 대해 세분화된 액세스 제어를 할 수 있는 권한을 계정 관리자에게 제공합니다.

사용자는 프로젝트를 수정할 수 있으려면 (AWSMobileHubFullAccess IAM 정책에 따라 부여되는) MobileHub 사용 권한이 있어야 하며, Mobile Hub가 사용자 대신 하는 모든 작업을 수행할 수 있는 권한이 있어야 합니다. 거의 모든 경우에 이는 계정 관리자가 사용자에게 AWS 리소스 Mobile Hub를 수정할 수 있는 액세스권한을 제공하기 위해 사용자에게 AdministratorAccess 정책을 부여 (p. 214)해야 함을 뜻합니다. 이는 프로젝트 설정이 수정되는 경우 Mobile Hub가 이러한 설정에 영향을 받는 기능을 활성화하는 데 사용되는 IAM역할과 정책을 수정하기 때문입니다. 사용자는 IAM 역할과 정책을 변경해 계정의 리소스에 대한 액세스를제어할 수 있으므로 사용자에게는 관리자 권한이 있어야 합니다.

관리자가 전체 계정에 관리자 권한을 부여하고 싶지 않다면 그 대신에 AWS Organizations를 사용 (p. 215)하여 각 사용자 또는 팀에게 하위 계정을 제공할 수 있습니다. 사용자는 이 하위 계정 내에서 완전한 관리자 권한을 갖습니다. 하위 계정 소유주는 자신의 관리자가 설정한 정책이 허용하는 작업만 할 수 있고, 결제는 상위 계정으로 롤업됩니다.

현재 Mobile Hub 권한을 부여할 때 MobileHub_Service_Role을 사용하고 있다면?기존의 Mobile Hub는 다음 관리형 정책을 사용하여 사용자를 대신해 서비스 구성을 수정하기 위해MobileHub_Service_Role이라는 서비스 역할을 맡았습니다.

https://console.aws.amazon.com/iam/home?#/policies/arn:aws:iam::aws:policy/service-role/AWSMobileHub_ServiceUseOnly

이전 모델의 경우 콘솔이나 명령줄을 통해 Mobile Hub API를 호출할 수 있는 권한만 있으면 Mobile Hub 프로젝트를 수정할 수 있었습니다. 관리자는 AWS IAM 사용자, 그룹 또는 역할에 AWSMobileHub_FullAccess정책을 연결해 이러한 권한을 위임할 수 있었습니다.

Mobile Hub 프로젝트의 계정이 이전 모델에 기반을 둔 것이라면 AdministratorAccess 권한이 부여되지 않은사용자는 다음과 같은 영향을 받게 됩니다.

• AWSMobileHub_FullAccess 정책을 갖고 있는 IAM 사용자, 그룹, 역할은 이제 콘솔이나 awsmobile 명령줄 인터페이스를 이용해 Mobile Hub에서 변경 작업을 하기에 충분한 권한이 없습니다.

• IAM 사용자, 그룹 또는 역할이 Mobile Hub를 사용해 변경 작업을 수행하려면 적절한 권한이 있어야 합니다. 관리자가 Mobile Hub에서 사용 가능한 모든 작업을 호출할 수 있도록 사용자에게 권한을 부여 (p. 213)하는 방법은 두 가지입니다. 즉 사용자나 연결된 역할, 소속된 그룹에AdministratorAccess 정책을 연결하는 방법, 또는 AWS Organizations를 사용하여 권한을 관리하는방법입니다.

권한 모델이 변경된 이유는?AWS Mobile Hub는 IAM 역할을 생성하고 모바일 앱에서 AWS 리소스를 사용할 수 있도록 권한을 할당합니다. 이러한 작업은 관리자의 작업으로 간주되는데, 그 이유는 계정 내 리소스에 대해 작업을 수행할 수 있는권한을 활성화하는 것이 포함되어 있기 때문입니다. 이전에는 Mobile Hub의 서비스 역할이 리소스에 대한작업을 할 수 있는 자체 권한을 에스컬레이션할 수 있는 경로를 AWSMobileHub_FullAccess 권한이 부여된 사용자에게 제공했는데, 이것은 관리자가 허용할 의도가 없었던 방식입니다. 서비스 역할을 제거하면 권한을 에스컬레이션하는 경로가 제거되며, Mobile Hub 프로젝트에 대한 사용자 권한을 관리자가 직접 제어할수 있게 됩니다.

Mobile Hub 프로젝트에 대한 액세스 제어

iOS 및 Android용 AWS SDK를 찾고 있으십니까? 이들 SDK와 그 문서는 AWS Amplify에 일부로 제공됩니다.

이 페이지의 콘텐츠는 AWS Mobile Hub 또는 awsmobile CLI를 사용해 구성된 앱에만 적용됩니다. v2.8.0이전 버전의 AWS Mobile SDK를 사용하고 있는 기존 앱의 경우, AWS Amplify 및 최신 SDK를 사용하도록앱을 마이그레이션하는 것이 좋습니다.

213

Page 217: AWS Mobile Hub 개발자 안내서 - 개발자 안내서 · 2020-02-07 · iOS - Swift 1.iOS를 플랫폼으로 선택하고 다음을 선택합니다. 2.Download Cloud Config(클라우드

AWS Mobile Hub 개발자 안내서 개발자 안내서IAM 사용량

개요

이 단원에서는 Mobile Hub 프로젝트에 대한 액세스를 제어하는 두 가지 방법을 설명합니다.

• 사용자에게 관리자 계정 권한 부여 (p. 214)

Mobile Hub 프로젝트에 대한 액세스를 세그먼트화하는 것에 관한 요구 사항이 단순한 개별 개발자나 그룹의 경우, 관리형 AdministratorAccess (p. 216)나 AWSMobileHub_ReadOnly (p. 216) AWS 관리형 정책을 사용자, 연결된 역할, 소속된 그룹에 연결하는 방법으로 권한을 부여할 수 있습니다.

Or:

• AWS Organizations를 사용하여 권한을 관리 (p. 215)

Mobile Hub 프로젝트에 대한 세분화된 액세스 제어 및 비용 추적이 필요한 조직의 경우, AWS 계정 관리자는 하위 계정을 제공하고 이러한 사용자에게 적용되는 정책을 결정할 수 있습니다.

Mobile Hub가 사용자에 연결된 IAM 정책을 사용하여 사용자 대신 서비스를 생성하고 수정하는 방법을 이해하려면 Mobile Hub 프로젝트 권한 모델 (p. 212)을 참조하십시오.

AWS Identity and Access Management(IAM)를 자세히 이해하려면 IAM Authentication and AccessControl for Mobile Hub (p. 217) 및 IAM Authentication and Access Control for Mobile Hub (p. 217) 단원을 참조하십시오.

모범 사례: IAM 사용자를 사용해 AWS에 액세스

보안을 강화하려면 AWS 루트 계정을 사용하여 Mobile Hub에 액세스하지 않는 것이 좋습니다. 그 대신 AWS계정에서 AWS Identity and Access Management(IAM) 사용자를 생성하거나 기존 IAM 사용자를 사용한 다음, 해당 사용자로 Mobile Hub에 액세스합니다. 자세한 내용은 AWS 일반 참조의 AWS 보안 자격 증명을 참조하십시오.

IAM 콘솔을 사용해 직접 IAM 사용자를 생성하거나 사용자를 위임할 수 있습니다. 먼저 IAM 관리자 그룹을생성한 다음 새로운 IAM 사용자를 해당 그룹에 할당합니다.

Note

계정 내의 모든 IAM 사용자가 Mobile Hub 프로젝트를 생성할 수 있으려면 계정에 대한 관리자 권한이 있는 사용자가 Mobile Hub 콘솔로 이동하여 초기 프로젝트를 생성해야 합니다. 이 단계는 가 사용자 대신 AWS 서비스를 관리할 수 있다는 확인을 제공합니다.IAM 사용자 또는 그룹에 액세스 권한을 할당하는 방법에 대해 자세히 알아보려면 IAMAuthentication and Access Control for Mobile Hub (p. 217) 단원을 참조하십시오.

Mobile Hub 프로젝트에 사용자 권한 부여

주제• 계정에서 새 IAM 사용자를 생성하고 Mobile Hub 권한 부여 (p. 215)• IAM 그룹 생성 (p. 215)• 기존 계정 사용자에게 Mobile Hub 권한 부여 (p. 215)

다음 절차에 따라 그룹 및/또는 사용자를 생성하고 Mobile Hub 프로젝트에 사용자 액세스 권한을 부여합니다.

역할에 권한을 부여하려면 AWS IAM 사용 설명서의 권한 추가를 참조하십시오.

214

Page 218: AWS Mobile Hub 개발자 안내서 - 개발자 안내서 · 2020-02-07 · iOS - Swift 1.iOS를 플랫폼으로 선택하고 다음을 선택합니다. 2.Download Cloud Config(클라우드

AWS Mobile Hub 개발자 안내서 개발자 안내서IAM 사용량

계정에서 새 IAM 사용자를 생성하고 Mobile Hub 권한 부여

1. IAM 콘솔을 엽니다. 왼쪽에서 사용자를 선택한 다음, Add User(사용자 추가)를 선택합니다.2. 사용자 이름을 입력하고 Programmatic access(프로그래밍 방식 액세스) 및 AWS Management Console

access(AWS Management Console 액세스)의 확인란을 선택합니다.3. 선호하는 암호 정책을 선택합니다. 그런 후 Next: Permissions(다음: 권한)를 선택합니다.4. Add user to group(그룹에 사용자 추가) 탭에서 사용자에 대해 Administrators(관리자) 또는 Read_Only(읽

기_전용) 그룹을 선택하고 Next, Review(다음, 검토)를 선택합니다.

이 과정에서 사용자의 암호를 사용자 지정하고, 이메일을 통해 새 계정에 관해 알리고, 액세스 키 ID, 키값, 암호를 다운로드할 수 있는 옵션이 표시됩니다.

5. Create user를 선택합니다.6. 정책을 적용하려면

• 프로젝트 권한을 관리할 그룹을 생성했으면 Add user to group(그룹에 사용자 추가)를 선택하고 해당 그룹을 선택한 다음, Next: Review(다음, 검토)를 선택하고 Create User(사용자 생성)를 선택합니다.

Or:• 사용자 당 프로젝트 권한을 관리하는 경우 Attach existing policies directly(직접 기존 정책 연결)를 선

택하고 연결할 정책, 즉 AdministratorAccess나 AWSMobileHub_ReadOnly를 선택한 다음, Createuser(사용자 생성)을 선택합니다.

IAM 그룹 생성

1. AWS Management Console에 로그인하여 http://console.aws.amazon.com/iam/에서 IAM 콘솔을 엽니다.2. 탐색 창에서 그룹을 선택한 다음, 새 그룹 생성을 클릭합니다.3. Group Name(그룹 이름)에 Administrators나 Read_Only 같은 그룹 이름을 입력한 후 Next Step(다음

단계)를 선택합니다.4. 정책 목록에서 AdministratorAccess 정책 옆의 확인란을 선택해 그룹에 완전한 권한을 부여하거나

AWSMobileHub_ReadOnly를 선택해 읽기 액세스 권한만 부여합니다. 필터 메뉴와 검색 상자를 사용하여정책 목록을 필터링합니다.

5. Next Step(다음 단계)을 선택한 다음, Create Group(그룹 생성)을 선택합니다. [Group Name] 아래에 새 그룹이 나열됩니다.

기존 계정 사용자에게 Mobile Hub 권한 부여

1. 왼쪽에서 정책을 선택합니다.2. 관리형 정책에 대한 링크, 연결하려는 AdministratorAccess 또는 AWSMobileHub_ReadOnly를 선택합니

다.3. 연결된 엔터티를 선택합니다.4. 연결을 선택합니다.5. 권한을 부여할 사용자, 역할 또는 그룹을 선택합니다.6. Attach Policy(정책 연결)를 선택합니다.

AWS Organizations를 사용하여 권한을 관리

AWS Organizations를 사용하여 Mobile Hub 프로젝트에 대한 액세스를 세그먼트화해야 하는 그룹의 권한을관리할 수 있습니다. 예를 들어 관리자는 팀의 각 개발자에게 계정을 제공할 수 있습니다. 사용자는 각자의계정에서 관리자가 부여한 권한을 갖게 됩니다. 이를 위해 수행할 절차는 다음과 같습니다.

1. AWS 계정이 없으면 AWS 프리 티어에 가입합니다.2. AWS Organizations 콘솔에서 조직을 생성합니다.

215

Page 219: AWS Mobile Hub 개발자 안내서 - 개발자 안내서 · 2020-02-07 · iOS - Swift 1.iOS를 플랫폼으로 선택하고 다음을 선택합니다. 2.Download Cloud Config(클라우드

AWS Mobile Hub 개발자 안내서 개발자 안내서IAM 사용량

3. 조직의 각 사용자에 대해 계정을 생성하거나 기존 계정을 추가합니다.4. 사용자를 초대합니다.5. 개발자에 대해 조직 단위를 생성합니다.6. 단위 구성원에 대해 정책을 활성화해 연결합니다.

연결한 정책은 사용자의 AWS 계정 범위 내에서 적용됩니다. Mobile Hub 사용에 필요하지 않은 서비스 및기능에 대한 액세스를 제한해야 할 수도 있습니다. 예를 들어 다음 정책은 FullAWSAccess 관리형 정책에 정의된 모든 권한을 부여하지만 Amazon EC2 서비스에 대한 액세스는 제외됩니다.

"Statement": [ { "Effect": "Allow", "Action": "*", "Resource": "*" }, { "Effect": “Deny”, "Action": “ec2:*”, "Resource": "*" }]

단계별 지침은 AWS Organization 생성 및 관리의 자습서를 참조하십시오.

Mobile Hub 프로젝트 액세스에 대한 AWS 관리형(미리 정의된) 정책

AWS Identity and Access Management 서비스는 AWS 서비스 및 리소스에 대한 사용자 권한을 제어합니다.를 사용하여 프로젝트의 구성을 보고 수정하려면 특정 권한이 필요합니다. 이러한 권한은 사용자, 역할 또는그룹에 연결할 수 있는 다음 관리형 정책으로 그룹화되었습니다.

• AdministratorAccess

이 정책에서는 계정에서 AWS 서비스에 무제한 액세스할 수 있는 권한을 제공합니다. 여기에는 AWSMobile Hub 프로젝트에 대한 읽기 및 쓰기 권한이 포함됩니다. 이 정책이 사용자, 역할 또는 그룹에 연결된 사용자는 새 프로젝트를 생성하고 기존 프로젝트의 구성을 수정하고 프로젝트 및 리소스를 삭제할 수있습니다. 이 정책에는 AWSMobileHub_ReadOnly 관리형 정책에서 허용되는 모든 권한도 포함됩니다.Mobile Hub 콘솔에 로그인하고 프로젝트를 생성한 후에는 다음 링크를 사용하여 이 정책과 연결된 IAM 자격 증명을 볼 수 있습니다.• https://console.aws.amazon.com/iam/home?region=us-east-1#/policies/arn:aws:iam::aws:policy/

AdministratorAccess$jsonEditor

• AWSMobileHub_ReadOnly

이 정책은 AWS Mobile Hub 프로젝트에 대한 읽기 전용 액세스 권한을 제공합니다. 이 정책이 사용자,역할 또는 그룹에 연결된 사용자는 프로젝트 구성을 보고 개발자의 데스크톱(예: Android Studio 또는Xcode)에서 다운로드하여 구축할 수 있는 샘플 퀵 스타트 앱 프로젝트를 생성할 수 있습니다. 이 정책은Mobile Hub 프로젝트 구성을 수정할 수 없으며 아직 활성화되지 않은 계정에서 사용자의 AWS MobileHub 사용을 허용하지 않습니다. Mobile Hub 콘솔에 로그인하고 프로젝트를 생성한 후에는 다음 링크를 사용하여 이 정책과 연결된 IAM 자격 증명을 볼 수 있습니다.• http://console.aws.amazon.com/iam/home?region=us-east-1#policies/arn:aws:iam::aws:policy/

AWSMobileHub_ReadOnly

IAM 사용자, 역할 또는 그룹에 AWS Mobile Hub 프로젝트에서 사용할 읽기 전용 권한이 있는 경우 콘솔에 표시되는 프로젝트 정보는 Mobile Hub 외부에서 변경된 사항을 반영하지 않습니다. 예를 들어 API게이트웨이에서 클라우드 로직 API를 제거할 경우 mobilehub:SynchronizeProject 권한을 가진 사용자

216

Page 220: AWS Mobile Hub 개발자 안내서 - 개발자 안내서 · 2020-02-07 · iOS - Swift 1.iOS를 플랫폼으로 선택하고 다음을 선택합니다. 2.Download Cloud Config(클라우드

AWS Mobile Hub 개발자 안내서 개발자 안내서IAM 사용량

가 콘솔을 방문할 때까지 Mobile Hub 프로젝트의 클라우드 로직 함수 목록에 계속 있을 수 있습니다.AdministratorAccess 정책을 통해 콘솔 액세스 권한이 부여된 사용자에게는 이러한 권한이 있습니다.Mobile Hub에서 추가 권한이 필요한 경우 관리자에게 문의하여 AdministratorAccess 정책을 요청하십시오.

Mobile Hub에 대한 IAM 인증 및 액세스 제어

iOS 및 Android용 AWS SDK를 찾고 있으십니까? 이들 SDK와 그 문서는 AWS Amplify에 일부로 제공됩니다.

이 페이지의 콘텐츠는 AWS Mobile Hub 또는 awsmobile CLI를 사용해 구성된 앱에만 적용됩니다. v2.8.0이전 버전의 AWS Mobile SDK를 사용하고 있는 기존 앱의 경우, AWS Amplify 및 최신 SDK를 사용하도록앱을 마이그레이션하는 것이 좋습니다.

Note

AWS IAM 인증 및 액세스 제어에 대한 깊은 이해가 있어야만 Mobile Hub를 사용해 모바일 앱에 백엔드를 구성할 수 있는 것은 아닙니다.

Mobile Hub는 AWS 자격 증명 및 권한 정책을 사용하여 사용자로 하여금 자신이 모바일 앱에 대해 선택한 백엔드 기능을 보고 생성하고 구성할 수 있게 해줍니다.

다음 단원에서는 IAM의 작동 방법, IAM을 사용하여 프로젝트에 대한 액세스를 안전하게 제어하는 방법,Mobile Hub가 사용자 대신 구성하는 IAM 역할 및 정책에 대한 세부 정보를 제공합니다.

주제• 인증 (p. 217)• 액세스 제어 (p. 218)

인증

AWS 리소스 및 서비스는 AWS 자격 증명(해당 리소스 및 서비스에 대한 액세스 권한 (p. 218)도 부여해야함)을 사용하여 올바른 인증으로만 보고 생성하거나 수정할 수 있습니다. 다음과 같은 자격 증명 유형으로AWS에 액세스할 수 있습니다.

• AWS 계정 루트 사용자

AWS에 가입할 때 AWS 계정과 연결된 이메일 주소 및 암호를 입력해야 합니다. 이 두 가지가 루트 자격 증명으로, 모든 AWS 리소스에 대한 전체 액세스를 제공합니다.

Important

보안상 관리자 사용자, 즉 AWS 계정에 대한 전체 권한이 있는 IAM 사용자를 만들 때에만 루트 자격 증명을 사용하는 것이 좋습니다. 그런 다음 이 관리자 사용자를 사용하여 제한된 권한이 있는다른 IAM 사용자 및 역할을 만들 수 있습니다. 자세한 내용은 IAM 사용 설명서의 IAM 모범 사례및 관리자 및 그룹 만들기를 참조하십시오.

• IAM 사용자

IAM 사용자는 특정한 사용자 지정 권한(예: Mobile Hub 프로젝트에 액세스할 수 있는 읽기 전용 권한)을가진 AWS 계정 내의 자격 증명입니다. IAM 사용자 이름과 암호를 사용하여 AWS Management Console,AWS 토론 포럼 또는 AWS 지원 센터 같은 보안 AWS 웹 페이지에 로그인할 수 있습니다.

사용자 이름과 암호 외에도 각 사용자에 대해 액세스 키를 생성할 수 있습니다. 여러 SDK 중 하나를 통하거나 AWS 명령줄 인터페이스(CLI)를 사용하여 AWS 서비스에 프로그래밍 방식으로 액세스할 때 이러한

217

Page 221: AWS Mobile Hub 개발자 안내서 - 개발자 안내서 · 2020-02-07 · iOS - Swift 1.iOS를 플랫폼으로 선택하고 다음을 선택합니다. 2.Download Cloud Config(클라우드

AWS Mobile Hub 개발자 안내서 개발자 안내서IAM 사용량

키를 사용할 수 있습니다. SDK 및 CLI 도구는 액세스 키를 사용하여 암호화 방식으로 요청에 서명합니다.AWS 도구를 사용하지 않는 경우 요청에 직접 서명해야 합니다.

• IAM 역할

IAM 역할은 특정 권한을 가진 계정에 생성할 수 있는 또 다른 IAM 자격 증명입니다. IAM 사용자와 유사하지만, 특정 개인과 연결되지 않습니다. IAM 역할을 사용하면 AWS 서비스와 리소스에 액세스하는 데 사용할 수 있는 임시 액세스 키를 얻을 수 있습니다. 임시 자격 증명을 가진 IAM 역할은 다음과 같은 상황에서유용합니다.• 연합된 사용자 액세스

IAM 사용자를 생성하는 대신 엔터프라이즈 사용자 디렉터리 또는 웹 자격 증명 공급자의 기존 사용자자격 증명을 사용할 수 있습니다. 이러한 사용자를 연합된 사용자라고 합니다. 자격 증명 공급자를 통해액세스를 요청하면 AWS가 연합된 사용자에게 역할을 할당합니다. 연합된 사용자에 대한 자세한 내용은IAM 사용 설명서의 연합된 사용자 및 역할을 참조하십시오.

• 교차 계정 액세스

계정의 IAM 역할을 사용하여 다른 AWS 계정에 계정의 리소스에 액세스할 수 있는 권한을 부여할 수 있습니다. 예는 IAM 사용 설명서의 자습서: IAM 역할을 사용한 AWS 계정 간 액세스 권한 위임을 참조하십시오.

• AWS 서비스 액세스

계정의 IAM 역할을 사용하여 AWS 서비스에 계정의 리소스에 액세스할 수 있는 권한을 부여할 수 있습니다. 예를 들어 Amazon Redshift에서 자동으로 Amazon S3 버킷에 액세스하도록 허용하는 역할을 만든 후 버킷에 저장된 데이터를 Amazon Redshift 클러스터에 로드할 수 있습니다. 자세한 내용은 IAM 사용 설명서의 AWS 서비스에 대한 권한을 위임할 역할 생성을 참조하십시오.

• Amazon EC2에서 실행 중인 애플리케이션

인스턴스에서 실행되고 AWS API 요청을 하는 애플리케이션에서 사용할 수 있도록 EC2 인스턴스 내에액세스 키를 저장하는 대신 IAM 역할을 사용하여 이러한 애플리케이션의 임시 자격 증명을 관리할 수있습니다. EC2 인스턴스에 AWS 역할을 할당하고 모든 애플리케이션에서 사용할 수 있도록 인스턴스에 연결된 인스턴스 프로파일을 만들 수 있습니다. 인스턴스 프로파일에는 역할이 포함되어 있으며 EC2인스턴스에서 실행되는 프로그램이 임시 자격 증명을 얻을 수 있습니다. 자세한 내용은 IAM 사용 설명서의 Amazon EC2에서 실행되는 애플리케이션의 역할 사용하기를 참조하십시오.

액세스 제어

요청을 인증하는 데 유효한 자격 증명이 있더라도 권한이 없다면 Mobile Hub 프로젝트를 액세스하거나 수정할 수 없습니다. 프로젝트에 대해 구성한 서비스와 리소스를 생성하고 구성할 때 도 마찬가지입니다.

다음 단원에서는 권한을 관리하고 Mobile Hub에서 사용자 대신 관리하는 권한을 이해하는 방법에 대해 설명합니다.

• Mobile Hub 프로젝트에 대한 액세스 제어 (p. 213)

Mobile Hub 프로젝트에 대한 액세스 권한 관리 개요

iOS 및 Android용 AWS SDK를 찾고 있으십니까? 이들 SDK와 그 문서는 AWS Amplify에 일부로 제공됩니다.

이 페이지의 콘텐츠는 AWS Mobile Hub 또는 awsmobile CLI를 사용해 구성된 앱에만 적용됩니다. v2.8.0이전 버전의 AWS Mobile SDK를 사용하고 있는 기존 앱의 경우, AWS Amplify 및 최신 SDK를 사용하도록앱을 마이그레이션하는 것이 좋습니다.

218

Page 222: AWS Mobile Hub 개발자 안내서 - 개발자 안내서 · 2020-02-07 · iOS - Swift 1.iOS를 플랫폼으로 선택하고 다음을 선택합니다. 2.Download Cloud Config(클라우드

AWS Mobile Hub 개발자 안내서 개발자 안내서IAM 사용량

Note

AWS IAM 인증 및 액세스 제어에 대한 깊은 이해가 있어야만 Mobile Hub를 사용해 모바일 앱에 백엔드를 구성할 수 있는 것은 아닙니다.

모든 AWS 리소스는 한 AWS 계정이 소유합니다. 리소스 확인, 생성 및/또는 액세스 권한 (p. 213)은 정책을통해 관리합니다.

계정 관리자는 IAM 자격 증명(즉, 사용자, 그룹, 역할)에 권한 정책을 연결할 수 있고, 일부 서비스(예: AWSLambda)에서는 리소스에 대한 권한 정책 연결도 지원합니다.

Note

계정 관리자 또는 관리자 사용자는 관리자 권한이 있는 사용자입니다. 자세한 내용은 IAM 사용 설명서의 IAM 모범 사례를 참조하십시오.권한을 부여하려면 권한을 부여 받을 사용자, 권한 대상이 되는 리소스, 해당 리소스에 허용되는 특정 작업을 결정합니다.

주제• AWS Mobile Hub에 대한 리소스 소유권 이해 (p. 219)• 리소스 액세스 관리 (p. 219)• 정책 요소 지정: 작업, 효과, 리소스, 보안 주체 (p. 220)

AWS Mobile Hub에 대한 리소스 소유권 이해Mobile Hub 프로젝트의 기본 리소스는 프로젝트 자체입니다. Mobile Hub 콘솔을 처음 사용할 경우 MobileHub에서 권한을 관리하고 프로젝트 리소스에 액세스할 수 있습니다. 리소스 소유자는 리소스를 만든 AWS계정입니다. 즉, 리소스 소유자는 리소스를 생성하는 요청을 인증하는 보안 주체 엔터티(루트 계정, IAM 사용자 또는 IAM 역할)의 AWS 계정입니다. 다음 예에서는 이 계정의 작동 방식을 설명합니다.

• AWS 계정의 루트 계정 자격 증명을 사용하여 AWS Mobile Hub 프로젝트를 생성하면 AWS 계정은 해당프로젝트와 연결된 리소스의 소유자가 됩니다.

• AWS 계정에서 IAM 사용자를 생성하고 Mobile Hub 프로젝트를 생성할 수 있는 권한을 해당 사용자에게부여하면 해당 사용자는 프로젝트를 생성할 수 있습니다. 하지만 해당 사용자가 속한 AWS 계정은 프로젝트와 연결된 리소스를 소유합니다.

• AWS 계정에서 IAM 프로젝트를 생성할 수 있는 권한이 있는 AWS Mobile Hub 역할을 생성하는 경우 해당역할을 수임할 수 있는 사람은 누구나 프로젝트를 생성, 편집 또는 삭제할 수 있습니다. 해당 역할이 속한AWS 계정은 해당 프로젝트와 연결된 리소스를 소유합니다.

리소스 액세스 관리권한 정책은 누가 무엇에 액세스 할 수 있는지를 나타냅니다. 다음 단원에서는 권한 정책을 만드는 데 사용가능한 옵션에 대해 설명합니다.

Note

이 단원에서는 AWS Mobile Hub의 맥락에서 IAM을 사용하는 방법에 대해 설명하며, IAM 서비스에대한 자세한 정보는 다루지 않습니다. IAM에 대한 전체 설명서는 IAM 사용 설명서의 IAM이란?을참조하십시오. IAM 정책 구문 및 설명에 대한 자세한 내용은 IAM 사용 설명서의 AWS 자격 증명 및액세스 관리 정책 참조를 참조하십시오.

IAM 자격 증명에 연결된 정책을 자격 증명 기반 정책(IAM 정책)이라 하고 리소스에 연결된 정책을 리소스 기반 정책이라고 합니다.

주제• 자격 증명 기반 정책(IAM 정책) (p. 220)• 리소스 기반 정책 (p. 220)

219

Page 223: AWS Mobile Hub 개발자 안내서 - 개발자 안내서 · 2020-02-07 · iOS - Swift 1.iOS를 플랫폼으로 선택하고 다음을 선택합니다. 2.Download Cloud Config(클라우드

AWS Mobile Hub 개발자 안내서 개발자 안내서IAM 사용량

자격 증명 기반 정책(IAM 정책)

정책을 IAM 자격 증명에 연결할 수 있습니다. 예를 들면,

• 계정 내 사용자 또는 그룹에 권한 정책 연결 - 계정 관리자는 특정 사용자에 연결된 권한 정책을 사용하여해당 사용자에게 AWS Mobile Hub 프로젝트를 보거나 수정하는 권한을 부여할 수 있습니다.

• 역할에 권한 정책 연결(교차 계정 권한 부여) - 자격 증명 기반 권한 정책을 IAM 역할에 연결하여 교차 계정권한을 부여할 수 있습니다. 예를 들어 처음 Mobile Hub에 들어가서 계정 보안 주체로서 프로젝트를 프로비저닝 및 구성할 수 있는 권한을 부여하는 데 동의하면 AWS 관리형 MobileHub_Service_Role 역할교차 계정 권한을 부여합니다. AWS 관리형 정책인 AWSMobileHub_ServiceUseOnly는 Mobile Hub 프로젝트의 컨텍스트에서 해당 역할에 연결됩니다. 역할에는 가 프로젝트에서 사용하는 서비스 및 리소스에대한 권한을 부여하는 기능을 가진 계정 보안 주체 역할을 할 수 있도록 하는 신뢰 정책이 있습니다.

IAM을 사용하여 권한을 위임하는 방법에 대한 자세한 내용은 IAM 사용 설명서의 액세스 관리를 참조하십시오.

자격 증명 기반 정책을 사용하는 예제로서 다음 정책은 사용자에게 Amazon S3 버킷을 생성할 수 있는 권한을 부여합니다. 이러한 권한이 있는 사용자는 서비스를 사용하여 스토리지 위치를 생성할 수 있습니다.

{ "Version":"2012-10-17", "Statement":[ { "Effect":"Allow", "Action":"s3:CreateBucket*", "Resource":"*" } ] }

Mobile Hub에서 자격 증명 기반 정책을 사용하는 방법에 관한 자세한 내용은 :ref: reference-mobile-hub-project-permissions-model` 단원을 참조하십시오.

사용자, 그룹, 역할 및 권한에 대한 자세한 내용은 IAM 사용 설명서의 자격 증명(사용자, 그룹 및 역할)을 참조하십시오.

리소스 기반 정책

Amazon S3와 같은 다른 서비스도 리소스 기반 권한 정책을 지원합니다. 예를 들어, 정책을 Amazon S3 버킷에 연결하여 해당 버킷에 대한 액세스 권한을 관리할 수 있습니다.

정책 요소 지정: 작업, 효과, 리소스, 보안 주체

Mobile Hub에서 구성된 각 서비스는 일련의 API 작업을 정의합니다. 에 이러한 API 작업에 대한 권한을 부여하기 위해 일련의 작업이 AWS 관리형 정책에서 지정됩니다. API 작업을 실시하려면 둘 이상의 작업에 대한권한이 필요할 수 있습니다.

다음은 기본 정책 요소입니다.

• 리소스 – 정책에서 Amazon 리소스 이름(ARN)을 사용하여 정책을 적용할 리소스를 식별합니다.• 작업 - 작업 키워드를 사용하여 허용 또는 거부할 리소스 작업을 식별합니다. 예를 들어s3:Createbucket 권한은 Mobile Hub에서 Amazon S3CreateBucket 작업을 수행할 수 있도록 허용합니다.

• 결과 - 사용자가 특정 작업을 요청하는 경우의 결과를 지정합니다. 이는 허용 또는 거부 중에 하나가 될 수있습니다. 명시적으로 리소스에 대한 액세스 권한을 부여(허용)하지 않는 경우, 액세스는 묵시적으로 거부됩니다. 다른 정책에서 액세스 권한을 부여하는 경우라도 사용자가 해당 리소스에 액세스할 수 없도록 하기 위해 리소스에 대한 권한을 명시적으로 거부할 수도 있습니다.

220

Page 224: AWS Mobile Hub 개발자 안내서 - 개발자 안내서 · 2020-02-07 · iOS - Swift 1.iOS를 플랫폼으로 선택하고 다음을 선택합니다. 2.Download Cloud Config(클라우드

AWS Mobile Hub 개발자 안내서 개발자 안내서프로젝트 서비스 리전 호스팅

• 보안 주체 – 자격 증명 기반 정책(IAM 정책)에서 정책이 연결되는 사용자는 암시적인 보안 주체입니다. 리소스 기반 정책의 경우 사용자, 계정, 서비스 또는 권한의 수신자인 기타 엔터티를 지정합니다(리소스 기반정책에만 해당).

Mobile Hub 프로젝트 서비스 리전 호스팅

iOS 및 Android용 AWS SDK를 찾고 있으십니까? 이들 SDK와 그 문서는 AWS Amplify에 일부로 제공됩니다.

이 페이지의 콘텐츠는 AWS Mobile Hub 또는 awsmobile CLI를 사용해 구성된 앱에만 적용됩니다. v2.8.0이전 버전의 AWS Mobile SDK를 사용하고 있는 기존 앱의 경우, AWS Amplify 및 최신 SDK를 사용하도록앱을 마이그레이션하는 것이 좋습니다.

Mobile Hub 프로젝트에 대한 구성 설정은 AWS 미국 동부(버지니아) 리전에 저장됩니다.

구성하는 AWS 서비스는 프로젝트에 대해 선택하는 리전에서 호스팅됩니다(서비스를 해당 리전에서 사용할수 있는 경우). 서비스를 해당 리전에서 사용할 수 없는 경우 Mobile Hub는 다른 리전에서 서비스를 호스팅합니다.

리전 엔드포인트에 대한 자세한 내용은 AWS 리전 및 엔드포인트를 참조하십시오.

프로젝트에 대한 서비스가 호스팅될 위치를 알아보려면 다음 표에서 프로젝트에 해당하는 리전을 찾습니다.

프로젝트의 리전을 선택합니다.• 미국 동부(버지니아) (p. 221)• 미국 동부(오하이오) (p. 222)• 미국 서부(캘리포니아) (p. 222)• 미국 서부(오리건) (p. 222)• EU 서부(아일랜드) (p. 223)• EU 서부(아일랜드) (p. 223)• EU(프랑크푸르트) (p. 224)• 아시아 태평양(도쿄) (p. 224)• 아시아 태평양(서울) (p. 224)• 아시아 태평양(뭄바이) (p. 225)• 아시아 태평양(싱가포르) (p. 225)• 아시아 태평양(시드니) (p. 225)• 남아메리카(상파울루) (p. 226)

미국 동부(버지니아)

이러한 서비스에 대한 호스팅: 위치:

Amazon API Gateway(클라우드 로직) 미국 동부(버지니아)

Amazon Cognito(사용자 로그인/사용자 파일 스토리지)

미국 동부(버지니아)

Amazon DynamoDB(NoSQL 데이터베이스) 미국 동부(버지니아)

Amazon Lex(대화형 봇) 미국 동부(버지니아)

221

Page 225: AWS Mobile Hub 개발자 안내서 - 개발자 안내서 · 2020-02-07 · iOS - Swift 1.iOS를 플랫폼으로 선택하고 다음을 선택합니다. 2.Download Cloud Config(클라우드

AWS Mobile Hub 개발자 안내서 개발자 안내서프로젝트 서비스 리전 호스팅

이러한 서비스에 대한 호스팅: 위치:

Amazon Pinpoint(메시징 및 분석) 미국 동부(버지니아)

Amazon S3(사용자 파일 스토리지/메시징 및 호스팅)

미국 동부(버지니아)

AWS Lambda(클라우드 로직) 미국 동부(버지니아)

미국 동부(오하이오)

이러한 서비스에 대한 호스팅: 위치:

Amazon API Gateway(클라우드 로직) 미국 동부(오하이오)

Amazon Cognito(사용자 로그인/사용자 파일 스토리지)

미국 동부(오하이오)

Amazon DynamoDB(NoSQL 데이터베이스) 미국 동부(오하이오)

Amazon Lex(대화형 봇) 미국 동부(버지니아)

Amazon Pinpoint(메시징 및 분석) 미국 동부(버지니아)

Amazon S3(사용자 파일 스토리지/메시징 및 호스팅)

미국 동부(오하이오)

AWS Lambda(클라우드 로직) 미국 동부(오하이오)

미국 서부(캘리포니아)

이러한 서비스에 대한 호스팅: 위치:

Amazon API Gateway(클라우드 로직) 미국 서부(캘리포니아)

Amazon Cognito(사용자 로그인/사용자 파일 스토리지)

미국 서부(오리건)

Amazon DynamoDB(NoSQL 데이터베이스) 미국 서부(캘리포니아)

Amazon Lex(대화형 봇) 미국 동부(버지니아)

Amazon Pinpoint(메시징 및 분석) 미국 동부(버지니아)

Amazon S3(사용자 파일 스토리지/메시징 및 호스팅)

미국 서부(캘리포니아)

AWS Lambda(클라우드 로직) 미국 서부(캘리포니아)

미국 서부(오리건)

이러한 서비스에 대한 호스팅: 위치:

Amazon API Gateway(클라우드 로직) 미국 서부(오리건)

222

Page 226: AWS Mobile Hub 개발자 안내서 - 개발자 안내서 · 2020-02-07 · iOS - Swift 1.iOS를 플랫폼으로 선택하고 다음을 선택합니다. 2.Download Cloud Config(클라우드

AWS Mobile Hub 개발자 안내서 개발자 안내서프로젝트 서비스 리전 호스팅

이러한 서비스에 대한 호스팅: 위치:

Amazon Cognito(사용자 로그인/사용자 파일 스토리지)

미국 서부(오리건)

Amazon DynamoDB(NoSQL 데이터베이스) 미국 서부(오리건)

Amazon Lex(대화형 봇) 미국 동부(버지니아)

Amazon Pinpoint(메시징 및 분석) 미국 동부(버지니아)

Amazon S3(사용자 파일 스토리지/메시징 및 호스팅)

미국 서부(오리건)

AWS Lambda(클라우드 로직) 미국 서부(오리건)

EU 서부(아일랜드)

이러한 서비스에 대한 호스팅: 위치:

Amazon API Gateway(클라우드 로직) EU 서부(아일랜드)

Amazon Cognito(사용자 로그인/사용자 파일 스토리지)

EU 서부(아일랜드)

Amazon DynamoDB(NoSQL 데이터베이스) EU 서부(아일랜드)

Amazon Lex(대화형 봇) 미국 동부(버지니아)

Amazon Pinpoint(메시징 및 분석) 미국 동부(버지니아)

Amazon S3(사용자 파일 스토리지/메시징 및 호스팅)

EU 서부(아일랜드)

AWS Lambda(클라우드 로직) EU 서부(아일랜드)

EU 서부(아일랜드)

이러한 서비스에 대한 호스팅: 위치:

Amazon API Gateway(클라우드 로직) EU 서부(아일랜드)

Amazon Cognito(사용자 로그인/사용자 파일 스토리지)

EU 서부(아일랜드)

Amazon DynamoDB(NoSQL 데이터베이스) EU 서부(아일랜드)

Amazon Lex(대화형 봇) 미국 동부(버지니아)

Amazon Pinpoint(메시징 및 분석) 미국 동부(버지니아)

Amazon S3(사용자 파일 스토리지/메시징 및 호스팅)

EU 서부(아일랜드)

AWS Lambda(클라우드 로직) EU 서부(아일랜드)

223

Page 227: AWS Mobile Hub 개발자 안내서 - 개발자 안내서 · 2020-02-07 · iOS - Swift 1.iOS를 플랫폼으로 선택하고 다음을 선택합니다. 2.Download Cloud Config(클라우드

AWS Mobile Hub 개발자 안내서 개발자 안내서프로젝트 서비스 리전 호스팅

EU(프랑크푸르트)

이러한 서비스에 대한 호스팅: 위치:

Amazon API Gateway(클라우드 로직) EU(프랑크푸르트)

Amazon Cognito(사용자 로그인/사용자 파일 스토리지)

EU(프랑크푸르트)

Amazon DynamoDB(NoSQL 데이터베이스) EU(프랑크푸르트)

Amazon Lex(대화형 봇) 미국 동부(버지니아)

Amazon Pinpoint(메시징 및 분석) 미국 동부(버지니아)

Amazon S3(사용자 파일 스토리지/메시징 및 호스팅)

EU(프랑크푸르트)

AWS Lambda(클라우드 로직) EU(프랑크푸르트)

아시아 태평양(도쿄)

이러한 서비스에 대한 호스팅: 위치:

Amazon API Gateway(클라우드 로직) 아시아 태평양(도쿄)

Amazon Cognito(사용자 로그인/사용자 파일 스토리지)

아시아 태평양(도쿄)

Amazon DynamoDB(NoSQL 데이터베이스) 아시아 태평양(도쿄)

Amazon Lex(대화형 봇) 미국 동부(버지니아)

Amazon Pinpoint(메시징 및 분석) 미국 동부(버지니아)

Amazon S3(사용자 파일 스토리지/메시징 및 호스팅)

아시아 태평양(도쿄)

AWS Lambda(클라우드 로직) 아시아 태평양(도쿄)

아시아 태평양(서울)

이러한 서비스에 대한 호스팅: 위치:

Amazon API Gateway(클라우드 로직) 아시아 태평양(서울)

Amazon Cognito(사용자 로그인/사용자 파일 스토리지)

아시아 태평양(서울)

Amazon DynamoDB(NoSQL 데이터베이스) 아시아 태평양(서울)

Amazon Lex(대화형 봇) 미국 동부(버지니아)

Amazon Pinpoint(메시징 및 분석) 미국 동부(버지니아)

224

Page 228: AWS Mobile Hub 개발자 안내서 - 개발자 안내서 · 2020-02-07 · iOS - Swift 1.iOS를 플랫폼으로 선택하고 다음을 선택합니다. 2.Download Cloud Config(클라우드

AWS Mobile Hub 개발자 안내서 개발자 안내서프로젝트 서비스 리전 호스팅

이러한 서비스에 대한 호스팅: 위치:

Amazon S3(사용자 파일 스토리지/메시징 및 호스팅)

아시아 태평양(서울)

AWS Lambda(클라우드 로직) 아시아 태평양(서울)

아시아 태평양(뭄바이)

이러한 서비스에 대한 호스팅: 위치:

Amazon API Gateway(클라우드 로직) 아시아 태평양(뭄바이)

Amazon Cognito(사용자 로그인/사용자 파일 스토리지)

아시아 태평양(뭄바이)

Amazon DynamoDB(NoSQL 데이터베이스) 아시아 태평양(뭄바이)

Amazon Lex(대화형 봇) 미국 동부(버지니아)

Amazon Pinpoint(메시징 및 분석) 미국 동부(버지니아)

Amazon S3(사용자 파일 스토리지/메시징 및 호스팅)

아시아 태평양(뭄바이)

AWS Lambda(클라우드 로직) 아시아 태평양(뭄바이)

아시아 태평양(싱가포르)

이러한 서비스에 대한 호스팅: 위치:

Amazon API Gateway(클라우드 로직) 아시아 태평양(싱가포르)

Amazon Cognito(사용자 로그인/사용자 파일 스토리지)

아시아 태평양(싱가포르)

Amazon DynamoDB(NoSQL 데이터베이스) 아시아 태평양(싱가포르)

Amazon Lex(대화형 봇) 미국 동부(버지니아)

Amazon Pinpoint(메시징 및 분석) 미국 동부(버지니아)

Amazon S3(사용자 파일 스토리지/메시징 및 호스팅)

아시아 태평양(싱가포르)

AWS Lambda(클라우드 로직) 아시아 태평양(싱가포르)

아시아 태평양(시드니)

이러한 서비스에 대한 호스팅: 위치:

Amazon API Gateway(클라우드 로직) 아시아 태평양(시드니)

225

Page 229: AWS Mobile Hub 개발자 안내서 - 개발자 안내서 · 2020-02-07 · iOS - Swift 1.iOS를 플랫폼으로 선택하고 다음을 선택합니다. 2.Download Cloud Config(클라우드

AWS Mobile Hub 개발자 안내서 개발자 안내서프로젝트 문제 해결

이러한 서비스에 대한 호스팅: 위치:

Amazon Cognito(사용자 로그인/사용자 파일 스토리지)

아시아 태평양(시드니)

Amazon DynamoDB(NoSQL 데이터베이스) 아시아 태평양(시드니)

Amazon Lex(대화형 봇) 미국 동부(버지니아)

Amazon Pinpoint(메시징 및 분석) 미국 동부(버지니아)

Amazon S3(사용자 파일 스토리지/메시징 및 호스팅)

아시아 태평양(시드니)

AWS Lambda(클라우드 로직) 아시아 태평양(시드니)

남아메리카(상파울루)

이러한 서비스에 대한 호스팅: 위치:

Amazon API Gateway(클라우드 로직) 남아메리카(상파울루)

Amazon Cognito(사용자 로그인/사용자 파일 스토리지)

미국 동부(버지니아)

Amazon DynamoDB(NoSQL 데이터베이스) 남아메리카(상파울루)

Amazon Lex(대화형 봇) 미국 동부(버지니아)

Amazon Pinpoint(메시징 및 분석) 미국 동부(버지니아)

Amazon S3(사용자 파일 스토리지/메시징 및 호스팅)

미국 동부(버지니아)

AWS Lambda(클라우드 로직) 남아메리카(상파울루)

Mobile Hub 프로젝트 문제 해결

iOS 및 Android용 AWS SDK를 찾고 있으십니까? 이들 SDK와 그 문서는 AWS Amplify에 일부로 제공됩니다.

이 페이지의 콘텐츠는 AWS Mobile Hub 또는 awsmobile CLI를 사용해 구성된 앱에만 적용됩니다. v2.8.0이전 버전의 AWS Mobile SDK를 사용하고 있는 기존 앱의 경우, AWS Amplify 및 최신 SDK를 사용하도록앱을 마이그레이션하는 것이 좋습니다.

다음 단원에서는 Mobile Hub 프로젝트 설정, 가져오기, 내보내기 중에 생길 수 있는 문제와 이를 해결하는 방법에 대해 설명합니다.

주제• API를 가져올 수 없음 (p. 227)• NoSQL 테이블을 가져올 수 없음 (p. 227)• 여러 NoSQL 테이블을 가져올 수 없음 (p. 228)• 푸시 자격 증명을 가져올 수 없음 (p. 228)

226

Page 230: AWS Mobile Hub 개발자 안내서 - 개발자 안내서 · 2020-02-07 · iOS - Swift 1.iOS를 플랫폼으로 선택하고 다음을 선택합니다. 2.Download Cloud Config(클라우드

AWS Mobile Hub 개발자 안내서 개발자 안내서프로젝트 문제 해결

• 빌드 아티팩트를 찾을 수 없음 (p. 228)• S3 버킷을 구성할 수 없습니다. (p. 229)• 설정 동안 관리자 필요 오류 발생 (p. 229)• 계정 설정 미완료 (p. 230)• 파일이 너무 커서 가져올 수 없음 (p. 230)

API를 가져올 수 없음오류 메시지

• Project owner does not own existing API : arn:aws:execute-api:us-east-1:012345678901:abcdefghij.

(여기서 API 식별자 arn:aws:execute-api:us-east-1:012345678901:abcdefghij는 가져오는 프로젝트에 고유함)

설명

• 이 메시지는 ID가 표시된 API가 현재 AWS 계정에 존재하지 않기 때문에 가져올 수 없음을 의미합니다. 이는 원본 프로젝트의 API를 Mobile Hub 클라우드 로직 기능 외부에서 생성한 다음 가져온 경우에 발생합니다.

해결 방법

• 이 문제를 해결하려면 다음 단계를 수행합니다.1. 원본 프로젝트의 클라우드 로직 기능으로 가져온 API의 이름으로 시작하는 features:components

노드 아래의 섹션을 제거하여 가져오는 프로젝트 정의의 YAML을 수정합니다.2. 프로젝트 정의를 저장하고 가져옵니다.3. 가져온 프로젝트에서 Mobile Hub 클라우드 로직 기능을 활성화하고 API 및 핸들러를 다시 생성합니다.

NoSQL 테이블을 가져올 수 없음오류 메시지

• 계정에 'someprojectname-mobilehub-012345678-TableName'이라고 하는 기존 DynamoDB 테이블이 이미 있습니다. 다른 이름을 선택하거나 기존 테이블을 제거하고 요청을 다시 시도하십시오.

(여기서 테이블 이름 someprojectname-mobilehub-012345678-TableName은 가져오는 프로젝트에 고유함)

설명

• 이 메시지는 NoSQL 데이터베이스 기능을 포함하는 프로젝트를 가져올 경우에 발생합니다. 이는 프로젝트구성의 Amazon DynamoDB 테이블이 이미 존재함을 나타냅니다. YAML 테이블 이름 값이 프로젝트 정의파일에서 편집되었고 동일한 계정으로 가져오려는 시도가 두 번 이상 있을 경우 발생할 수 있습니다.

해결 방법

• 이 문제를 해결하려면 다음 단계를 수행합니다.1. 테이블 이름 값을 수정하여 충돌을 제거합니다.2. 프로젝트 정의를 저장하고 가져옵니다.

227

Page 231: AWS Mobile Hub 개발자 안내서 - 개발자 안내서 · 2020-02-07 · iOS - Swift 1.iOS를 플랫폼으로 선택하고 다음을 선택합니다. 2.Download Cloud Config(클라우드

AWS Mobile Hub 개발자 안내서 개발자 안내서프로젝트 문제 해결

3. 이전 테이블 이름 값을 참조하는 가져온 앱의 코드를 조정합니다.

여러 NoSQL 테이블을 가져올 수 없음오류 메시지

• 프로젝트 파일을 디코딩할 수 없습니다. 다른 계정으로 암호화된 데이터를 포함할 수 있습니다. 푸시 기능을 디코딩하지 못했습니다. 자격 증명 속성을 디코딩하지 못했습니다.

설명

• 이 메시지는 AWS 계정과 연결되지 않은 기능에 대한 푸시 알림 메시징 서비스 자격 증명 또는 AmazonSNS 주제 식별자를 가져올 경우에 발생합니다.

해결 방법

• 이 문제를 해결하려면 다음 단계를 수행합니다.1. 테이블 정의 섹션을 제거하여 가져오는 프로젝트 정의의 YAML을 수정합니다.2. 프로젝트 정의를 저장하고 가져옵니다.3. 제거한 테이블 정의를 사용하여 Mobile Hub NoSQL 데이터베이스 기능을 통해 해당 테이블을 수동으로

생성합니다.

푸시 자격 증명을 가져올 수 없음오류 메시지

• 프로젝트 파일을 디코딩할 수 없습니다. 다른 계정으로 암호화된 데이터를 포함할 수 있습니다. 푸시 기능을 디코딩하지 못했습니다. 자격 증명 속성을 디코딩하지 못했습니다.

설명

• 이 메시지는 AWS 계정과 연결되지 않은 기능에 대한 푸시 알림 메시징 서비스 자격 증명 또는 AmazonSNS 주제 식별자를 가져올 경우에 발생합니다.

해결 방법

• 이 문제를 해결하려면 다음 단계를 수행합니다.1. push: 노드를 제거하여 가져오는 프로젝트 정의의 YAML을 수정합니다.2. 프로젝트 정의를 저장하고 가져옵니다.3. 자체 메시징 서비스 자격 증명 및 주제를 사용하여 Mobile Hub 푸시 알림 또는 사용자 참여 기능을 활성

화합니다.

빌드 아티팩트를 찾을 수 없음오류 메시지

• project-name에 대한 Amazon S3 버킷 archive-deployments-mobilehub-0123456789에서 빌드 아티팩트업로드/exported-project-definition.zip을 찾을 수 없습니다.

여기서 exported-project-definition, Amazon S3 버킷 식별자의 숫자 부분, project-name은 가져오는 프로젝트에 고유함)

228

Page 232: AWS Mobile Hub 개발자 안내서 - 개발자 안내서 · 2020-02-07 · iOS - Swift 1.iOS를 플랫폼으로 선택하고 다음을 선택합니다. 2.Download Cloud Config(클라우드

AWS Mobile Hub 개발자 안내서 개발자 안내서프로젝트 문제 해결

설명

• 이 메시지는 Mobile Hub가 .yml 프로젝트 정의 파일에 지정된 클라우드 로직 API 핸들러 함수(Lambda)의파일을 찾을 수 없기 때문에 프로젝트 가져오기에 실패할 경우 발생합니다.

해결 방법

• 이 문제를 해결하려면 다음 단계를 수행합니다.

이 문제에 대한 해결 방법은 Lambda 파일의 위치를 프로젝트 정의 YAML에 지정된 경로와 일치시키는 것입니다.

어떤 이유로든 YAML의 codeFilename: 키에 설명된 경로가 클라우드 로직이 활성화될 때 Mobile Hub가배포하는 ...-deployments-... Amazon S3 버킷의 루트와 관련된 Lambda 함수 파일의 실제 위치와일치하지 않을 경우 오류가 발생합니다.

S3 버킷을 구성할 수 없습니다.오류 메시지

• S3 버킷을 생성 또는 구성하는 동안 문제가 발생한 것으로 보입니다.

설명

• Mobile Hub가 Mobile Hub 프로젝트를 가져오는 동안 프로젝트 배포 아티팩트에 대한 S3 버킷을 생성하지못했습니다.

해결 방법

• 이 문제를 해결하려면 다음 절차를 수행해 보십시오.

Amazon S3 콘솔을 사용하여 최대 버킷 용량인지 확인합니다.

설정 동안 관리자 필요 오류 발생오류 메시지

• 이 작업을 수행할 수 있는 권한이 없는 것으로 보입니다.

설명

• 사용자가 Mobile Hub 프로젝트를 구성하는 동안 필요한 Mobile Hub 서비스 역할을 생성할 권한이 없습니다.

해결 방법

• 이 문제를 해결하려면 다음 절차를 수행해 보십시오.

AWS 계정 관리자에게 연락하여 https://console.aws.amazon.com/mobilehub/home#/activaterole/ 위치에서 서비스 역할을 생성해줄 것을 요청합니다.

229

Page 233: AWS Mobile Hub 개발자 안내서 - 개발자 안내서 · 2020-02-07 · iOS - Swift 1.iOS를 플랫폼으로 선택하고 다음을 선택합니다. 2.Download Cloud Config(클라우드

AWS Mobile Hub 개발자 안내서 개발자 안내서프로젝트 내보내기 및 가져오기

계정 설정 미완료오류 메시지

• AWS 계정이 완전히 설정되지 않은 것으로 보입니다.

설명

• 이 오류는 Mobile Hub 프로젝트를 구성하는 동안 다양한 이유로 발생할 수 있습니다.

해결 방법

• 이 문제를 해결하려면 다음 절차를 수행해 보십시오.• AWS 콘솔에서 로그아웃한 후 모든 브라우저 창을 닫습니다. 그런 다음

<problematic>`AWS Mobile console <>`__</problematic>처음에 오류를 발생시킨 작업을 시도합니다.

• 문제가 지속될 경우<problematic>`AWS Mobile Development forum<https://forums.aws.amazon.com/forum.jspa?forumID=88>`__</problematic>에 지원을 요청합니다.

파일이 너무 커서 가져올 수 없음오류 메시지

• 프로젝트 파일이 너무 큽니다. 최대 파일 크기는 10MB입니다.

설명

• 이 메시지는 10MB보다 큰 프로젝트 정의 파일을 가져오려고 시도할 경우에 발생합니다.

해결 방법

• 프로젝트 내보내기 파일의 크기를 줄입니다. 프로젝트 내보내기는 AWS 콘솔을 사용하여 동반되는 파일을통합하는 방법에 대한 지침을 가져오기에 제공하는 동시에 프로젝트 정의 파일 외부에 대용량 파일 페이로드를 제공할 수 있습니다.

AWS Mobile Hub 프로젝트 내보내기 및 가져오기

iOS 및 Android용 AWS SDK를 찾고 있으십니까? 이들 SDK와 그 문서는 AWS Amplify에 일부로 제공됩니다.

이 페이지의 콘텐츠는 AWS Mobile Hub 또는 awsmobile CLI를 사용해 구성된 앱에만 적용됩니다. v2.8.0이전 버전의 AWS Mobile SDK를 사용하고 있는 기존 앱의 경우, AWS Amplify 및 최신 SDK를 사용하도록앱을 마이그레이션하는 것이 좋습니다.

230

Page 234: AWS Mobile Hub 개발자 안내서 - 개발자 안내서 · 2020-02-07 · iOS - Swift 1.iOS를 플랫폼으로 선택하고 다음을 선택합니다. 2.Download Cloud Config(클라우드

AWS Mobile Hub 개발자 안내서 개발자 안내서프로젝트 내보내기 및 가져오기

개요Mobile Hub는 Mobile Hub 프로젝트의 구성을 설명하는 YAML 파일을 내보내거나 가져올 수 있는 기능을 지원합니다. AWS 계정만 있다면 누구든지 내보낸 프로젝트 구성 파일을 가져와서 구성 파일과 일치하는 새로운 AWS 리소스와 함께 새로운 프로젝트를 배포할 수 있습니다.

이 기능은 내보낸 프로젝트의 AWS 서비스 구성 파일을 복제하는 것도 가능합니다. 프로젝트의 테이블 데이터가 아직 내보내기 전이라면 스토리지 또는 호스팅 버킷의 파일과 API 핸들러 함수 코드를 내보낸 프로젝트정의에 수동으로 추가할 수 있습니다. 자세히 알아보려면 import-export-manual을 참조하십시오.

프로젝트 구성 파일을 내보내려면

1. Mobile Hub 콘솔의 프로젝트 목록으로 이동합니다.2. 프로젝트 카드 오른쪽 상단에 있는 3개의 점 위로 마우스 포인터를 가져갑니다.3. 내보낼 프로젝트 카드의 오른쪽 상단에서 [Export (file)]를 선택합니다.4. 프로젝트 내보내기 파일을 저장합니다.

내보내는 프로젝트 구성 파일의 내용에 대한 자세히 알아보려면 프로젝트 내보내기 .yml 파일의 구조 (p. 234)를 참조하십시오.

프로젝트를 가져오려면

1. Mobile Hub 콘솔의 프로젝트 목록으로 이동합니다.2. 페이지 왼쪽 상단에서 [Import your project]를 선택합니다.3. 프로젝트 정의 파일을 찾아서 [Import project configuration] 대화 상자로 끌어옵니다.4. [Import project]를 선택합니다.

프로젝트 구성 파일을 AWS Mobile Hub로 배포 링크와 공유내보냈지만 링크의 쿼리 문자열에 정의되어 있는 프로젝트 구성 파일을 가져와서 새로운 Mobile Hub 프로젝트를 빠르게 생성할 수 있는 링크를 모든 퍼블릭 GitHub 리포지토리에 입력할 수 있습니다. 링크 형식은 다음과 같습니다.

https://console.aws.amazon.com/mobilehub/home?#/?config=YOUR-MOBILE-HUB-PROJECT-CONFIGURATION-LOCATION

예를 들어 다음 HTML은 react-sample.zip 파일에 정의되어 있는 Mobile Hub 기능에 따라 앱의 AWS백엔드 서비스를 즉석에서 구성할 수 있는 링크를 생성합니다. 이 코드의 실행 모습을 보려면 AWS MobileReact 샘플에 대한 README.md 파일을 참조하십시오.

<p align="center">

231

Page 235: AWS Mobile Hub 개발자 안내서 - 개발자 안내서 · 2020-02-07 · iOS - Swift 1.iOS를 플랫폼으로 선택하고 다음을 선택합니다. 2.Download Cloud Config(클라우드

AWS Mobile Hub 개발자 안내서 개발자 안내서프로젝트 내보내기 및 가져오기

<a target="_blank" href="https://console.aws.amazon.com/mobilehub/home?#/?config=https://github.com/awslabs/aws-mobile-react-sample/blob/master/backend/import_mobilehub/react-sample.zip"> <span> <img height="100%" src="https://s3.amazonaws.com/deploytomh/button-deploy-aws-mh.png"/> </span> </a></p>

링크에서 쿼리 문자열 구간은 Mobile Hub 프로젝트 구성 파일인 mobile-hub-project.yml이나, 혹은mobile-hub-project.yml 파일이 포함되어 있는 프로젝트 내보내기 .zip 파일의 위치를 가리킬 수 있습니다.

Important

.zip 파일을 사용하는 경우에는 Mobile Hub 프로젝트 구성 파일 가져오기에 필요한 구조와 내용을따라야 합니다. 자세한 내용은 프로젝트 내보내기 .zip 파일의 구조 (p. 234)를 참조하십시오.

프로젝트를 가져오는 데 따른 제한 사항주제

• 프로젝트 정의 파일의 최대 크기는 10MB입니다. (p. 232)• 수동으로 내보내기를 해야 하는 프로젝트 구성 요소가 있습니다. (p. 232)• 교차 계정 자격 증명 (p. 233)• 내보내지 못하는 프로젝트 구성 요소 (p. 233)

프로젝트 정의 파일의 최대 크기는 10MB입니다.

10MB보다 큰 Mobile Hub 프로젝트 .zip 또는 .yml 파일은 가져오기가 지원되지 않습니다.

수동으로 내보내기를 해야 하는 프로젝트 구성 요소가 있습니다.

다음 프로젝트 구성 파일 항목을 가져오려면 프로젝트에서 내보낸 .zip 파일을 수동으로 수정해야 합니다.

• 사용자 데이터 스토리지 내용

원본 프로젝트에서 사용자 파일 스토리지 Amazon S3 버킷에 저장된 파일을 가져오려면 사용자 파일 스토리지 내용 가져오기 (p. 237)를 참조하십시오.

• 호스팅 및 스트리밍 내용

원본 프로젝트에서 호스팅 및 스트리밍 버킷에 호스팅되었던 파일을 가져오려면 호스팅 및 스트리밍 내용가져오기 (p. 237)를 참조하십시오.

• SAML 연동

원본 프로젝트에서 사용자 로그인 SAML 연동 구성 파일을 가져오려면 SAML 연합된 사용자 로그인 가져오기 (p. 238)를 참조하십시오.

• 클라우드 로직 API 핸들러

클라우드 로직 API 핸들러 코드 및 구성을 원래 프로젝트에서 가져오려면 클라우드 로직 API용 API 핸들러 가져오기 (p. 238)를 참조하십시오.

Note

브라우저에서 클라우드 로직 API를 호출하려면 API 경로마다 CORS(Cross-Origin ResourceSharing)을 구성해야 합니다. 프로젝트를 가져올 때 CORS 구성을 활성화하려면 교차 원본 리소스 공유(CORS) 구성 가져오기 (p. 241)를 참조하십시오.

232

Page 236: AWS Mobile Hub 개발자 안내서 - 개발자 안내서 · 2020-02-07 · iOS - Swift 1.iOS를 플랫폼으로 선택하고 다음을 선택합니다. 2.Download Cloud Config(클라우드

AWS Mobile Hub 개발자 안내서 개발자 안내서프로젝트 내보내기 및 가져오기

교차 계정 자격 증명

일부 기능은 구성되어 있는 AWS 계정에 연결된 자격 증명과 자산이 필요합니다. 이러한 기능이 포함된Mobile Hub 프로젝트는 내보냈던 계정으로만 가져올 수 있습니다. 이러한 제한이 적용되는 기능으로는 내보내는 Mobile Hub 프로젝트 외부에서 생성된 클라우드 로직 API와 푸시 알림을 위한 메시징 공급자 자격 증명, 그리고 Amazon SNS 주제가 있습니다.

Mobile Hub 기능 AWS 계정에서 내보내서 다른 계정으로 가져올 수있습니까?

사용자 로그인 예

NoSQL 데이터베이스 예

클라우드 로직 Mobile Hub 프로젝트에서 생성된 API 사용:

프로젝트로 가져온 API 사용 시:

아니요(해결 방법은 API를 가져올 수 없음 (p. 227)참조)

사용자 파일 스토리지 예

앱 콘텐츠 전송 예

커넥터 예

푸시 알림 아니요(해결 방법은 푸시 자격 증명을 가져올 수 없음 (p. 228) 참조)

메시징 및 분석(푸시 알림) 아니요(해결 방법은 푸시 자격 증명을 가져올 수 없음 (p. 228) 참조)

내보내지 못하는 프로젝트 구성 요소

다음 항목은 Mobile Hub 가져오기/내보내기 기능에서 지원되지 않습니다.

• 사용자 정의 정책

Mobile Hub 기능을 활성화하면 AWS 서비스 집합이 배포됩니다. 또한 Mobile Hub가 기본 액세스 역할 및정책을 이러한 객체에 연결합니다. 이후 프로젝트를 가져올 때는 기본 역할 및 정책이 적용됩니다.

원본 프로젝트에서 데이터 테이블에 대한 액세스를 읽기 전용으로 설정하는 등 이러한 기본 역할과 정책을수정하거나 추가할 수 있습니다. 하지만 프로젝트 구성 파일을 내보낼 때는 이렇게 수정되거나 추가된 사용자 정의 정책은 프로젝트 내보내기에 포함되지 않습니다. 가져온 프로젝트에서 사용자 정의 정책을 활성화하려면 가져온 사람이 수동으로 사용자 정의 정책을 구성해야 합니다. 프로젝트 내보내기 파일 외에도정책 JSON과 단계별 지침을 가져오는 사람에게 제공하는 것이 좋습니다. 이러한 지침에는 AWS 콘솔 또는 AWS CLI를 사용하여 사용자 정의를 구성하는 방법에 대해 자세하게 설명되어 있어야 합니다.

• 레거시 클라우드 로직

레거시 클라우드 로직 기능을 사용하는 프로젝트에는 내보내기 및 가져오기가 지원되지 않습니다. 이러한유형의 프로젝트는 Lambda 함수를 직접 호출하기 때문입니다. 현재 버전의 클라우드 로직은 Lambda 함수 핸들러에 연결된 Amazon API Gateway API에 대한 RESTful 호출을 사용합니다.

233

Page 237: AWS Mobile Hub 개발자 안내서 - 개발자 안내서 · 2020-02-07 · iOS - Swift 1.iOS를 플랫폼으로 선택하고 다음을 선택합니다. 2.Download Cloud Config(클라우드

AWS Mobile Hub 개발자 안내서 개발자 안내서프로젝트 내보내기 및 가져오기

Mobile Hub 프로젝트 내보내기 형식

iOS 및 Android용 AWS SDK를 찾고 있으십니까? 이들 SDK와 그 문서는 AWS Amplify에 일부로 제공됩니다.

이 페이지의 콘텐츠는 AWS Mobile Hub 또는 awsmobile CLI를 사용해 구성된 앱에만 적용됩니다. v2.8.0이전 버전의 AWS Mobile SDK를 사용하고 있는 기존 앱의 경우, AWS Amplify 및 최신 SDK를 사용하도록앱을 마이그레이션하는 것이 좋습니다.

AWS Mobile Hub은 프로젝트의 구성을 포함하여 YAML 파일을 내보낼 수 있게 해줍니다. YAML 파일 자체를 가져오거나, 프로젝트를 가져오는 동안 배포되는 여타 프로젝트 구성 요소에서 .zip 파일에 이를 포함시킬 수 있습니다. 이 단원에서는 YAML과 Mobile Hub 프로젝트 내보내기 .zip 파일의 구조를 설명합니다.Mobile Hub 가져오기/내보내기 기능에 대한 자세한 내용은 AWS Mobile Hub 프로젝트 내보내기 및 가져오기 (p. 230)를 참조하십시오.

주제• 프로젝트 내보내기 .zip 파일의 구조 (p. 234)• 프로젝트 내보내기 .yml 파일의 구조 (p. 234)

프로젝트 내보내기 .zip 파일의 구조Export (file)(내보내기 (파일))을 선택하면 Mobile Hub가 프로젝트에 대해 이름이 지정된 .zip 파일을 생성합니다.

기본 파일 구조

또한 Mobile Hub는 .zip 루트에서 mobile-hub-project.yml 프로젝트 구성 파일을 생성합니다. 이 위치의 유효한 mobile-hub-project.yml 파일은 Mobile Hub 프로젝트를 성공적으로 가져오는 데 필요합니다.

파일 구조 예제

.zip 파일과 내보낸 프로젝트의 파일 구조는 SAML 연동 및 클라우드 로직 API 핸들러가 모두 배포되도록구성되어 있으며 다음과 같습니다.

• /your-project-name.zip

• mobile-hub-project.yml

• saml.xml

• lambda API handler functions

• user data stored files

• hosted files

프로젝트 내보내기 .zip 파일의 파일들을 폴더에 정렬할 수 있습니다. 아카이브 내의 상대 경로는 경로를 나타내는 프로젝트 정의 YAML 키 값에 반영되어야 합니다.

Note

이전 단원에서 설명한 것 외에 프로젝트 구성 .zip 파일에 존재하는 모든 파일 또는 폴더는 무시할수 있습니다. 그렇지 않으면 가져오기 시 문제를 야기할 수 있습니다.

프로젝트 내보내기 .yml 파일의 구조간략하게 말하면, Mobile Hub 프로젝트 내보내기 .yml 파일의 기본 구조는 다음과 같습니다.

features:

234

Page 238: AWS Mobile Hub 개발자 안내서 - 개발자 안내서 · 2020-02-07 · iOS - Swift 1.iOS를 플랫폼으로 선택하고 다음을 선택합니다. 2.Download Cloud Config(클라우드

AWS Mobile Hub 개발자 안내서 개발자 안내서프로젝트 내보내기 및 가져오기

FEATURE-TYPE: !com.amazonaws.mobilehub.v0.:FEATURE-TYPE components: FEATURE-NAME: !com.amazonaws.mobilehub.v0.FEATURE-TYPE attributes: ATTRIBUTE-NAME: !com.amazonaws.mobilehub.v0.ATTRIBUTE-VALUE OTHER-FEATURE-PROPERTY-TYPES: OTHER-FEATURE-PROPERTY-VALUES . . .

다음 YAML은 다수의 Mobile Hub 기능이 활성화된 상태에서 프로젝트에서 내보낸 mobile-hub-project.yml의 샘플입니다. 원래 프로젝트의 구성 요소에 대해 가져오기 및 업로드가 가능하도록 프로젝트 정의가 수동으로 업데이트되었습니다. 이러한 구성 요소로는 원래 프로젝트의 사용자 파일 스토리지 버킷에 저장된 파일, 호스팅 및 스트리밍 버킷에서 호스팅되는 파일, Lambda 함수의 API 핸들러 코드 등이 있습니다.

--- !com.amazonaws.mobilehub.v0.Projectfeatures: cloudlogic: !com.amazonaws.mobilehub.v0.CloudLogic components: api-name: !com.amazonaws.mobilehub.v0.API attributes: name: api-name requires-signin: true sdk-generation-stage-name: Development paths: /items: !com.amazonaws.mobilehub.v0.Function codeFilename: uploads/lambda-archive.zip description: "Handler for calls to resource path : /items" enableCORS: true handler: lambda.handler memorySize: "128" name: handler-name runtime: nodejs6.10 timeout: "3" "/items/{proxy+}": !com.amazonaws.mobilehub.v0.Function codeFilename: uploads/lambda-archive.zip description: "Handler for calls to resource path : /items/{proxy+}" enableCORS: true handler: lambda.handler memorySize: "128" name: handler-name runtime: nodejs6.10 timeout: "3" content-delivery: !com.amazonaws.mobilehub.v0.ContentDelivery attributes: enabled: true visibility: public-global components: release: !com.amazonaws.mobilehub.v0.Bucket {} database: !com.amazonaws.mobilehub.v0.Database components: database-nosql: !com.amazonaws.mobilehub.v0.NoSQLDatabase tables: - !com.amazonaws.mobilehub.v0.NoSQLTable attributes: id: S hashKeyName: id hashKeyType: S rangeKeyName: "" rangeKeyType: "" tableName: ___DYNAMIC_PREFIX___-bbq-order tablePrivacy: public - !com.amazonaws.mobilehub.v0.NoSQLTable attributes: id: S

235

Page 239: AWS Mobile Hub 개발자 안내서 - 개발자 안내서 · 2020-02-07 · iOS - Swift 1.iOS를 플랫폼으로 선택하고 다음을 선택합니다. 2.Download Cloud Config(클라우드

AWS Mobile Hub 개발자 안내서 개발자 안내서프로젝트 내보내기 및 가져오기

hashKeyName: id hashKeyType: S rangeKeyName: "" rangeKeyType: "" tableName: ___DYNAMIC_PREFIX___-bbq_restaurants tablePrivacy: public - !com.amazonaws.mobilehub.v0.NoSQLTable attributes: id: S restaurant_id: S hashKeyName: restaurant_id hashKeyType: S rangeKeyName: id rangeKeyType: S tableName: ___DYNAMIC_PREFIX___-bbq_menu_item tablePrivacy: public sign-in: !com.amazonaws.mobilehub.v0.SignIn attributes: enabled: true optional-sign-in: false components: sign-in-user-pools: !com.amazonaws.mobilehub.v0.UserPoolsIdentityProvider attributes: alias-attributes: - email - phone_number mfa-configuration: ON name: userpool password-policy: !com.amazonaws.mobilehub.ConvertibleMap min-length: "8" require-lower-case: true require-numbers: true require-symbols: true require-upper-case: true user-files: !com.amazonaws.mobilehub.v0.UserFiles attributes: enabled: true user-profiles: !com.amazonaws.mobilehub.v0.UserSettings attributes: enabled: truename: myProjectregion: us-east-1uploads: - !com.amazonaws.mobilehub.v0.Upload fileName: stored-file targetS3Bucket: user-file.png - !com.amazonaws.mobilehub.v0.Upload fileName: hosted-file targetS3Bucket: hosting.html - !com.amazonaws.mobilehub.v0.Upload fileName: api-handler-file.zip targetS3Bucket: deployments

수동으로 내보낸 프로젝트 구성 요소

iOS 및 Android용 AWS SDK를 찾고 있으십니까? 이들 SDK와 그 문서는 AWS Amplify에 일부로 제공됩니다.

이 페이지의 콘텐츠는 AWS Mobile Hub 또는 awsmobile CLI를 사용해 구성된 앱에만 적용됩니다. v2.8.0이전 버전의 AWS Mobile SDK를 사용하고 있는 기존 앱의 경우, AWS Amplify 및 최신 SDK를 사용하도록앱을 마이그레이션하는 것이 좋습니다.

236

Page 240: AWS Mobile Hub 개발자 안내서 - 개발자 안내서 · 2020-02-07 · iOS - Swift 1.iOS를 플랫폼으로 선택하고 다음을 선택합니다. 2.Download Cloud Config(클라우드

AWS Mobile Hub 개발자 안내서 개발자 안내서프로젝트 내보내기 및 가져오기

이 단원에서는 내보낸 프로젝트 정의에 프로젝트 구성 요소를 수동으로 추가하는 방법에 대해 설명합니다.

주제• 사용자 파일 스토리지 콘텐츠 가져오기 (p. 237)• 호스팅 및 스트리밍 콘텐츠 가져오기 (p. 237)• SAML 연합된 사용자 로그인 가져오기 (p. 238)• 클라우드 로직 API를 위한 API 핸들러 가져오기 (p. 238)• 교차 원본 리소스 공유(CORS) 구성 가져오기 (p. 241)

사용자 파일 스토리지 콘텐츠 가져오기

사용자 파일 스토리지를 활성화하는 프로젝트를 내보낼 때 Amazon S3 버킷에 저장된 파일은 내보낸 프로젝트 정의에 포함되지 않습니다. 가져온 프로젝트의 새 버킷에 이러한 파일들을 업로드하도록 프로젝트 정의를수동으로 구성할 수 있습니다.

사용자 파일 스토리지 버킷에 저장된 프로젝트 파일의 가져오기 및 업로드를 구성하려면

1. 내보낸 프로젝트 .zip 파일의 압축을 풉니다.2. 가져오기 동안 업로드하고 싶은 각 파일을 압축되지 않은 파일 폴더로 복사하여 붙여 넣습니다.3. 내보낸 프로젝트 정의에 파일 경로를 추가합니다.

a. 에디터에서 내보내기 한 mobile-hub-project.yml 파일을 엽니다.b. 파일이 아직 없을 경우, 루트 수준에서 uploads: 노드를 생성합니다.c. 업로드할 각 파일에 대해 uploads:에서 다음과 같이 세 개의 항목을 추가합니다.

i. - !com.amazonaws.mobilehub.v0.Upload 네임스페이스ii. 프로젝트 정의 .zip 파일 내에 파일에 대한 경로 값을 가지고 있는 fileName: 키입니다.iii. targetS3Bucket: 값을 가진 user-files 키입니다.

--- !com.amazonaws.mobilehub.v0.Projectfeatures: sign-in: !com.amazonaws.mobilehub.v0.SignIn {} user-files: !com.amazonaws.mobilehub.v0.UserFiles attributes: enabled: true user-profiles: !com.amazonaws.mobilehub.v0.UserSettings attributes: enabled: truename: userfilesregion: us-east-1uploads: - !com.amazonaws.mobilehub.v0.Upload fileName: {example1.png} targetS3Bucket: user-files - !com.amazonaws.mobilehub.v0.Upload fileName: {example2.xml} targetS3Bucket: user-files. . .

4. 압축되지 않은 프로젝트 정의 파일 내의 파일들을 다시 압축합니다(경로 오류를 야기하기 때문에 이러한파일을 포함하고 있는 폴더는 제외).

호스팅 및 스트리밍 콘텐츠 가져오기

호스팅 및 스트리밍을 지원하는 프로젝트를 내보내기 할 때 Amazon S3 버킷에 저장된 파일들이 내보낸 프로젝트 정의에 포함되지 않습니다. 가져온 프로젝트의 새 버킷에 이러한 파일들을 업로드하도록 프로젝트 정의를 수동으로 구성할 수 있습니다.

237

Page 241: AWS Mobile Hub 개발자 안내서 - 개발자 안내서 · 2020-02-07 · iOS - Swift 1.iOS를 플랫폼으로 선택하고 다음을 선택합니다. 2.Download Cloud Config(클라우드

AWS Mobile Hub 개발자 안내서 개발자 안내서프로젝트 내보내기 및 가져오기

호스팅 및 스트리밍 버킷에 저장된 프로젝트 파일의 가져오기 및 업로드를 구성하려면

1. 내보낸 프로젝트 .zip 파일의 압축을 풉니다.2. 가져오기 동안 업로드하고 싶은 각 파일을 압축되지 않은 파일 폴더로 복사하여 붙여 넣습니다.3. 내보낸 프로젝트 정의에 파일 경로를 추가합니다.

a. 에디터에서 내보내기 한 mobile-hub-project.yml 파일을 엽니다.b. 파일이 아직 없을 경우, 루트 수준에서 uploads: 노드를 생성합니다.c. 업로드할 각 파일에 대해 uploads:에서 다음과 같이 세 개의 항목을 추가합니다.

i. - !com.amazonaws.mobilehub.v0.Upload 네임스페이스ii. 프로젝트 정의 .zip 파일 내에 파일에 대한 경로 값을 가지고 있는 fileName: 키입니다.iii. targetS3Bucket: 값을 가진 hosting 키입니다.

--- !com.amazonaws.mobilehub.v0.Projectfeatures: content-delivery: !com.amazonaws.mobilehub.v0.ContentDelivery attributes: enabled: true visibility: public-global components: release: !com.amazonaws.mobilehub.v0.Bucket {}

. . .

uploads: - !com.amazonaws.mobilehub.v0.Upload fileName: {example1.html} targetS3Bucket: hosting - !com.amazonaws.mobilehub.v0.Upload fileName: {example2.js} targetS3Bucket: hosting. . .

4. 압축되지 않은 프로젝트 정의 파일 내의 파일들을 다시 압축합니다(경로 오류를 야기하기 때문에 이러한파일을 포함하고 있는 폴더는 제외).

SAML 연합된 사용자 로그인 가져오기

Mobile Hub 사용자 로그인 기능에 대해 SAML 연동을 구성하려면 연동하려는 자격 증명 공급자의 SAMLXML 구성(saml.xml)을 제공해야 합니다. SAML XML 구성은 Mobile Hub에서 내보낸 .zip 파일에 포함되지 않습니다.

가져오기를 할 때 원래 프로젝트의 SAML 연동을 배포하도록 내보낸 프로젝트를 구성하려면

1. 내보낸 프로젝트 .zip 파일의 압축을 풉니다.2. 자격 증명 공급자의 saml.xml 파일을 압축되지 않은 .zip 파일의 루트 폴더에 복사합니다.3. 압축되지 않은 프로젝트 정의 파일 내의 파일들을 다시 압축합니다(경로 오류를 야기하기 때문에 이러한

파일을 포함하고 있는 폴더는 제외).

클라우드 로직 API를 위한 API 핸들러 가져오기

Mobile Hub 클라우드 로직 기능은 RESTful API 표면(API 게이트웨이)을 서버리스 API 핸들러 함수(Lambda)에 페어링합니다. 는 클라우드 로직이 구성하는 API 및 핸들러 객체의 정의에 대해 내보내기 및 가져오기를지원하지만, API 핸들러 함수 코는 내보내기가 되지 않습니다.

Mobile Hub는 다음 조건이 충족될 때 프로젝트 가져오기의 일환으로 API 핸들러 함수 코드를 배포하도록 프로젝트 내보내기 .zip 파일을 수동으로 구성할 수 있도록 해줍니다.

238

Page 242: AWS Mobile Hub 개발자 안내서 - 개발자 안내서 · 2020-02-07 · iOS - Swift 1.iOS를 플랫폼으로 선택하고 다음을 선택합니다. 2.Download Cloud Config(클라우드

AWS Mobile Hub 개발자 안내서 개발자 안내서프로젝트 내보내기 및 가져오기

• API 핸들러는 오직 DynamoDB 테이블만 액세스합니다. 같은 기타 AWS 서비스를 액세스하는 API 핸들러에 대한 가져오기는 현재 지원되지 않습니다.

• Lambda 환경 변수를 사용하여 이러한 DynamoDB 테이블을 참조할 수 있도록 핸들러 코드가 포함되어 있습니다.

Mobile Hub는 API 핸들러 코드를 가져오기 할 때 환경 변수를 사용하여 가져오기에서 생성된 새로운 테이블로 데이터 작업을 매핑합니다. 프로젝트의 API 핸들러 함수 코드에 정의된 상수 이름과 일치하도록 프로젝트의 정의 YAML에서 환경 변수의 키 이름을 정의할 수 있습니다. 다음 예제는 환경 변수와 일치하는 함수 상수를 보여줍니다.

const YOUR-FUNCTION-CONSTANT-NAME = process.env.KEY-NAME-DEFINED-IN-YAML;";

// exampleconst MENU_TABLE_NAME = process.env.MENU_TABLE_NAME;

이러한 참고 사항을 따르는 단계들은 프로젝트 정의 YAML에서 환경 변수를 정의하는 방법을 설명합니다.

Note

Mobile Hub가 생성하는 MOBILE_HUB_DYNAMIC_PREFIX 프로젝트 식별자 접두사를 사용하는것도 하나의 대안입니다. Mobile Hub는 가져온 프로젝트에서 고유의 식별자가 되도록 값을 구성합니다. 함수 코드의 해당 접두사에 유효한 테이블 이름을 추가하면 가져온 프로젝트의 테이블에대해 유효한 식별자가 구성됩니다. 다음 예제는 환경 변수와 일치하는 함수 상수를 보여줍니다.

const YOUR-FUNCTION-CONSTANT-NAME = process.env.MOBILE_HUB_DYNAMIC_PREFIX + "-YOUR-TABLE-NAME";

// exampleconst MENU_TABLE_NAME = process.env.MOBILE_HUB_DYNAMIC_PREFIX + "-bbq-menu";

이 방법의 경우, 프로젝트 정의 YAML을 추가로 수동 구성할 필요가 없습니다.

AWS Mobile React 샘플 앱은 환경 변수를 사용하여 API 및 핸들러를 통해 데이터 테이블에 액세스하는 종합예제를 제공합니다. 가져오려는 코드를 가진 각 API 핸들러에 대해 다음 단계를 수행합니다. 샘플 앱에서의예제는 줄로 표시됩니다.

내보낸 클라우드 로직 API에서 |LAM| 핸들러 함수의 가져오기를 활성화하려면

1. 내보낸 프로젝트 .zip 파일의 압축을 풉니다.2. Lambda 함수를 압축되지 않은 파일에 복사합니다.

a. Amazon S3 콘솔로 이동하여 Mobile Hub 프로젝트 이름을 검색합니다.b. -deployments-를 포함하는 이름을 가진 버킷을 선택한 다음, uploads 폴더를 선택합니다.c. 다음 단계에서 사용할 폴더에서 Lambda 함수 파일의 이름을 복사 및 저장합니다.d. 폴더의 Lambda 함수 파일을 압축 해제하여 내보낸 프로젝트 파일에 복사합니다.

3. 내보낸 프로젝트 정의에 파일 경로를 추가합니다.a. 에디터에서 내보내기 한 mobile-hub-project.yml 파일을 엽니다.b. 파일이 아직 없을 경우, 루트 수준에서 uploads: 노드를 생성합니다.c. 업로드할 각 파일에 대해 uploads:에서 다음과 같이 세 개의 항목을 추가합니다.

i. - !com.amazonaws.mobilehub.v0.Upload 네임스페이스ii. 프로젝트 정의 .zip 파일 내에 파일에 대한 경로 값을 가지고 있는 fileName: 키입니다.iii. deployments 값을 가진 targetS3Bucket: 키입니다.

d. 각 클라우드 로직의 . . . paths: items 노드에 아직 없을 경우, 해당 핸들러에서 Lambda 함수 코드 파일의 경로 값을 사용하여 codeFilename: 키를 생성합니다.239

Page 243: AWS Mobile Hub 개발자 안내서 - 개발자 안내서 · 2020-02-07 · iOS - Swift 1.iOS를 플랫폼으로 선택하고 다음을 선택합니다. 2.Download Cloud Config(클라우드

AWS Mobile Hub 개발자 안내서 개발자 안내서프로젝트 내보내기 및 가져오기

Note

이 경우 경로는 클라우드 로직에 프로비저닝된 -deployments-Amazon S3 버킷 Mobile Hub의 루트와 관련이 있습니다. 일반적으로 Mobile Hub는 이러한 파일을 /uploads 폴더에 둡니다.codeFilename이 지정되어 있지 않으면 Mobile Hub는 수신한 요청을 에코잉하는 기본 핸들러를 배포합니다.

e. 내보낸 프로젝트 정의에 환경 변수를 추가합니다.

DynamoDB 테이블과 상호 작용하는 핸들러를 설명하는 각 클라우드 로직 . . . paths: items 노드에서 __DYNAMIC_PREFIX__ 문자열이 포함된 환경 변수 이름과 테이블 이름을 연결하여 구성한 하위 멤버에 environment: 노드를 추가합니다. API 핸들러 함수 코드의 연결 변수에 변수 이름을 매핑해야 합니다.

--- !com.amazonaws.mobilehub.v0.Projectfeatures: cloudlogic: !com.amazonaws.mobilehub.v0.CloudLogic components: api-name: !com.amazonaws.mobilehub.v0.API attributes: name: api-name requires-signin: true sdk-generation-stage-name: Development paths: /items: !com.amazonaws.mobilehub.v0.Function codeFilename: {uploads/lambda-archive.zip} description: "Handler for calls to resource path : /items" enableCORS: true handler: lambda.handler memorySize: "128" name: handler-name runtime: nodejs6.10 timeout: "3" environment: {MENU_TABLE_NAME}: ___DYNAMIC_PREFIX___{-bbq_menu_item} {ORDERS_TABLE_NAME}: ___DYNAMIC_PREFIX___{-bbq_orders} {RESTAURANTS_TABLE_NAME}: ___DYNAMIC_PREFIX___-{bbq_restaurants} "/items/{proxy+}": !com.amazonaws.mobilehub.v0.Function codeFilename: {uploads/lambda-archive.zip} description: "Handler for calls to resource path : /items/{proxy+}" enableCORS: true handler: lambda.handler memorySize: "128" name: handler-name runtime: nodejs6.10 timeout: "3" environment: {MENU_TABLE_NAME}: ___DYNAMIC_PREFIX___{-bbq_menu_item} {ORDERS_TABLE_NAME}: ___DYNAMIC_PREFIX___{-bbq_orders} {RESTAURANTS_TABLE_NAME}: ___DYNAMIC_PREFIX___-{bbq_restaurants}. . .

uploads: - !com.amazonaws.mobilehub.v0.Upload fileName: {lambda-archive.zip} targetS3Bucket: deployments - !com.amazonaws.mobilehub.v0.Upload fileName: {lambda.jar} targetS3Bucket: deployments. . .

240

Page 244: AWS Mobile Hub 개발자 안내서 - 개발자 안내서 · 2020-02-07 · iOS - Swift 1.iOS를 플랫폼으로 선택하고 다음을 선택합니다. 2.Download Cloud Config(클라우드

AWS Mobile Hub 개발자 안내서 개발자 안내서Amazon CloudFront 보안

4. .yml 파일을 저장하고 압축되지 않은 프로젝트 정의 이름 내의 파일을 다시 압축합니다(경로 오류를 야기하기 때문에 이러한 파일을 포함하고 있는 폴더는 제외).

5. Mobile Hub 콘솔을 통해 가져오기를 함으로써 수정된 프로젝트 내보내기 정의를 테스트합니다. 콘솔을 통해 환경 변수를 확인할 수 있습니다.

Note

기본적으로 Mobile Hub NoSQL 데이터베이스 기능은 Lambda 함수에 대해 읽기 및 쓰기 권한을 부여할 수 있도록 테이블의 권한을 구성합니다. 테이블의 권한을 변경하기 위해 필요한 사용자 지정정책 구성은 프로젝트의 내보내기에 포함되지 않습니다. 사용자 지정 정책을 토대로 하는 프로젝트의 importer에는 프로젝트를 가져왔을 때 정책을 재생성할 수 있도록 충분한 정보가 필요합니다. 이러한 경우에는 정책 JSON과 연결 방법 및 위치에 대한 단계별 지침(콘솔 또는 )을 모두 제공하는 것이 좋습니다. 이러한 단계에 대한 자세한 내용은 Amazon DynamoDB에서의 인증 및 액세스 제어를참조하십시오.

교차 원본 리소스 공유(CORS) 구성 가져오기

기본적으로 AWS 보안 인프라는 브라우저가 API 게이트웨이 API를 호출하지 못하도록 합니다. API의 각 경로에 대해 CORS를 구성하면 웹을 통해 API 호출이 가능합니다. CORS 구성은 프로젝트 내보내기에 포함되지 않습니다. 다음 단계들은 프로젝트 내보내기 파일에 CORS 구성 가져오기를 수동으로 포함시킬 수 있는방법을 설명합니다.

|ABP| API 경로에 대한 CORS 구성을 포함하려면

1. 내보낸 프로젝트 정의 .zip 파일의 압축을 해제합니다.2. 에디터에서 배보내기 한 mobile-hub-project.yml 파일을 엽니다.3. 다음 조각에 표시된 대로, 각 API 경로에 대해 enableCORS 아래에 true 값을 가진 ... paths: "/

items/. . .": !com.amazonaws.mobilehub.v0.Function라는 키를 추가합니다.

--- !com.amazonaws.mobilehub.v0.Project features: cloudlogic: !com.amazonaws.mobilehub.v0.CloudLogic components: ReactSample: !com.amazonaws.mobilehub.v0.API attributes: name: ReactSample requires-signin: false paths: "/items/{proxy+}": !com.amazonaws.mobilehub.v0.Function name: FirstHandler handler: lambda.handler enableCORS: true runtime: nodejs6.10 . . .

4. 압축되지 않은 프로젝트 정의 파일 내의 파일들을 다시 압축합니다(경로 오류를 야기하기 때문에 이러한파일을 포함하고 있는 폴더는 제외).

Mobile Hub 사용자에 대한 Amazon CloudFront 보안 고려 사항

iOS 및 Android용 AWS SDK를 찾고 있으십니까? 이들 SDK와 그 문서는 AWS Amplify에 일부로 제공됩니다.

241

Page 245: AWS Mobile Hub 개발자 안내서 - 개발자 안내서 · 2020-02-07 · iOS - Swift 1.iOS를 플랫폼으로 선택하고 다음을 선택합니다. 2.Download Cloud Config(클라우드

AWS Mobile Hub 개발자 안내서 개발자 안내서Amazon CloudFront 보안

이 페이지의 콘텐츠는 AWS Mobile Hub 또는 awsmobile CLI를 사용해 구성된 앱에만 적용됩니다. v2.8.0이전 버전의 AWS Mobile SDK를 사용하고 있는 기존 앱의 경우, AWS Amplify 및 최신 SDK를 사용하도록앱을 마이그레이션하는 것이 좋습니다.

AWS Mobile Hub 호스팅 및 스트리밍 (p. 198) 기능을 활성화할 경우 계정에 Amazon CloudFront 배포판이생성됩니다. 이 배포는 Amazon Edge 서버의 글로벌 네트워크를 통해 연결된 Amazon S3 버킷 내에 저장한웹 자산을 캐싱합니다. 이를 통해 고객은 웹 자산에 신속하게 로컬로 액세스할 수 있습니다.

이 주제에서는 배포에 사용할 수 있는 주요 CloudFront 보안 관련 기능에 대해 설명합니다. 원본 버킷에 관한동일한 유형의 정보는 s3-security를 참조하십시오.

액세스 관리호스팅 및 스트리밍을 사용하면 배포의 자산을 공개적으로 사용할 수 있습니다. 이는 인터넷 기반 리소스에대한 일반적인 보안 정책이지만 그렇지 않은 경우 자산에 대한 액세스 제한을 고려해야 합니다. 보안을 위한최상의 방법은 "최소 권한" 모델을 따르고 리소스에 대한 액세스를 최대한 제한하는 것입니다. 배포 정책 또는 ACL(액세스 제어 목록) 등의 리소스 기반 정책을 수정하여 일부 사용자 또는 사용자 그룹에만 액세스 권한을 부여할 수 있습니다.

버킷 및 데이터베이스 테이블 등의 호스팅 및 스트리밍 웹 앱과 연결된 AWS 리소스에 대한 액세스를 보호하려면 인증된 사용자로만 액세스를 제한하는 것이 좋습니다. 로그인 필수 옵션과 함께 사용자 로그인 (p. 204) 기능을 활성화하여 Mobile Hub 프로젝트에 이 제한을 추가할 수 있습니다.

자세한 내용은 Amazon CloudFront 개발자 안내서의 CloudFront에 대한 인증 및 액세스 제어를 참조하십시오.

HTTPS 프로토콜 요구CloudFront는 HTTPS 프로토콜 사용을 지원하여 배포와의 통신을 암호화합니다. 적극 권장되는 이 방법은사용자와 서비스를 보호하기 위한 것입니다. CloudFront를 사용하면 고객과 배포 종단점 사이의 HTTPS와자산이 시작되는 원본 버킷과 배포 캐시 사이의 CloudFront를 요구할 수 있습니다. HTTPS에 대한 HTTP 트래픽의 글로벌 리디렉션, 사용자 지정 도메인에 대한 HTTPS 사용 및 기타 옵션도 지원됩니다.

자세한 내용은 Amazon CloudFront 개발자 안내서의 CloudFront와 함께 HTTPS 사용 단원을 참조하십시오.

프라이빗 콘텐츠 보안 유지CloudFront는 배포 캐시에서 프라이빗 콘텐츠를 보호하기 위한 여러 메서드를 지원합니다. 여기에는 인증되고 권한이 있는 사용자에 대한 액세스를 제한하도록 서명된 쿠키 및 서명된 URL 사용이 포함됩니다.

모범 사례는 사용자와 배포 종단점 사이의 연결과 배포와 콘텐츠 Amazon S3 원본 버킷 사이의 연결에서 이와 같은 기술을 사용하는 것입니다.

자세한 내용은 Amazon CloudFront 개발자 안내서의 CloudFront를 통한 프라이빗 콘텐츠 제공을 참조하십시오.

배포 액세스 로깅배포 로깅은 앱 사용자에 대해 자세히 알아보고 조직의 감사 요구 사항을 충족하며 CloudFront 비용을 이해하는 데 도움이 됩니다. 각 액세스 로그 기록은 있는 경우 요청자, 배포 이름, 요청 시간, 요청 작업, 응답 상태, 오류 코드 등의 단일 액세스 요청에 대한 세부 정보를 제공합니다. 로그는 버킷에 저장할 수 있습니다. 비용 절감을 위해 더 이상 필요하지 않은 이전 버전을 삭제하거나 버전 관리를 일시 중지할 수 있습니다.

자세한 내용은 Amazon CloudFront 개발자 안내서의 CloudFront용 액세스 로그를 참조하십시오.

242

Page 246: AWS Mobile Hub 개발자 안내서 - 개발자 안내서 · 2020-02-07 · iOS - Swift 1.iOS를 플랫폼으로 선택하고 다음을 선택합니다. 2.Download Cloud Config(클라우드

AWS Mobile Hub 개발자 안내서 개발자 안내서Amazon S3 보안

Mobile Hub 사용자에 대한 Amazon S3 보안 고려 사항

iOS 및 Android용 AWS SDK를 찾고 있으십니까? 이들 SDK와 그 문서는 AWS Amplify에 일부로 제공됩니다.

이 페이지의 콘텐츠는 AWS Mobile Hub 또는 awsmobile CLI를 사용해 구성된 앱에만 적용됩니다. v2.8.0이전 버전의 AWS Mobile SDK를 사용하고 있는 기존 앱의 경우, AWS Amplify 및 최신 SDK를 사용하도록앱을 마이그레이션하는 것이 좋습니다.

Mobile Hub 사용자 파일 스토리지 또는 호스팅 및 스트리밍 기능을 활성화하면 계정에 Amazon S3 버킷이생성됩니다. 이 단원에서는 이 버킷에서 사용할 수 있는 주요 보안 관련 기능에 대해 설명합니다. 호스팅 및스트리밍은 생성된 버킷에 저장되어 있는 애셋을 캐시에 저장하도록 배포판을 구성합니다. 배포판에 관한 동일한 유형의 정보는 cloudfront-security를 참조하십시오.

액세스 관리기본적으로 Amazon S3 버킷 및 관련 객체에 대한 액세스는 비공개이기 때문에 리소스 소유자만 리소스에포함된 버킷이나 애셋에 액세스할 수 있습니다. 버킷 관리자는 버킷 정책이나 사용자나 사용자 그룹에 액세스 권한을 부여하는 액세스 제어 목록(ACL) 같은 리소스 기반 정책을 연결하여 설계에 적합한 액세스 권한을부여할 수 있습니다.

AWS Mobile Hub 호스팅 및 스트리밍 (p. 198) 기능을 통해 프로비저닝된 Amazon S3 구성은 모든 사용자에게 액세스를 허용하는 버킷 정책 설정의 예입니다. 이러한 액세스 정책은 이 기능을 통해 웹 앱을 공개적으로 호스팅한다는 측면에서 바람직합니다. 앱 설계 기준을 충족할 경우, 인증된 사용자만 버킷 및 데이터베이스 같은 앱의 AWS 리소스에 액세스할 수 있도록 개발자가 사용자 로그인 (p. 204) 기능을 추가하는 것이좋습니다.

자세한 내용은 Amazon S3 개발자 안내서의 Amazon S3 리소스에 대한 액세스 권한 관리를 참조하십시오.

객체 수명 주기 관리객체 수명 주기 관리를 이용하여 Amazon S3이 특정 기준에 따라 버킷의 파일(Amazon S3에서는 객체로도지칭)을 처리하도록 할 수 있습니다. 예를 들어 특정 시간 이후에 모바일 앱 사용자가 버킷에 파일을 업로드했기 때문에 해당 파일을 영구적으로 삭제하거나 이를 으로 이동하고 싶을 수 있습니다. 여타 모바일 앱 사용자가 액세스할 수 있는 파일에서 데이터 양을 줄이기 위해 이런 작업을 원할 수도 있습니다. 관리자나 모바일앱 사용자에게 더 이상 필요하지 않다고 판단되는 파일을 삭제하거나 보관하여 비용을 절감하고 싶을 수도있습니다.

자세한 내용은 Amazon S3 개발자 안내서의 객체 수명 주기 관리를 참조하십시오.

객체 암호화객체 암호화는 파일의 데이터가 버킷에서 교환되는 동안은 물론이고 버킷에 상주하는 동안 데이터에 대한 보호를 강화할 수 있도록 해줍니다. Amazon S3을 사용하여 파일을 암호화하거나 파일 자체를 암호화할 수 있습니다. AWS Key Management Service(AWS KMS)또는 자체 키를 통해 관리되는 키인 Amazon S3 관리형암호화 키를 통해 파일을 암호화할 수 있습니다.

자세한 내용은 Amazon S3 개발자 안내서의 암호화를 사용하여 데이터 보호를 참조하십시오.

객체 버전 관리객체 버전 관리는 의도치 않은 모바일 앱 사용자 작업 및 모바일 앱 실패 이후에 파일의 데이터를 보다 손쉽게 복구할 수 있도록 도와줍니다. 버전 관리를 통해 버킷에서 동일 파일에 대해 여러 개의 상태를 저장할 수있습니다. 관련 파일 이름과 버전 ID에 따라 각 버전을 고유하게 액세스할 수 있습니다. 비용 절감을 위해 더이상 필요하지 않은 이전 버전을 삭제 또는 보관하거나 버전 관리를 일시 중지할 수 있습니다.

243

Page 247: AWS Mobile Hub 개발자 안내서 - 개발자 안내서 · 2020-02-07 · iOS - Swift 1.iOS를 플랫폼으로 선택하고 다음을 선택합니다. 2.Download Cloud Config(클라우드

AWS Mobile Hub 개발자 안내서 개발자 안내서Amazon S3 보안

자세한 내용은 Amazon S3 개발자 안내서의 버전 관리 사용을 참조하십시오.

버킷 로깅버킷 로깅은 앱 사용자에 대한 자세한 내용을 확인하고, 조직의 감사 요건을 충족하며, Amazon S3 비용을 이해하는 데 도움이 됩니다. 각 액세스 로그 레코드는 한 액세스 요청에 대한 세부 정보(요청자, 버킷 이름, 요청시간, 요청 작업, 응답 상태, 오류 코드 등)를 제공합니다. 같은 버킷이나 다른 버킷에 로그를 저장할 수 있습니다. 비용 절감을 위해 더 이상 필요하지 않은 이전 버전을 삭제하거나 버전 관리를 일시 중지할 수 있습니다.

자세한 내용은 Amazon S3 사용 설명서의 버킷 로깅 관리를 참조하십시오.

244