Amazon Web Services 한국 블로그

AWS MobileHub로 안드로이드 앱 시작하기

이번 글에서는 어떻게 AWS 모바일 허브를 통해 빠르게 안드로이드앱을 만들 수 있는지 과정을 설명드리고자 합니다. 이를 통해 손쉽게 AWS 서비스를 연동하여 여러분의 iOS용 앱의 주요 기능과 통합 할 수 있게 될 것입니다.

문서 목차

  1. AWS MobileHub 소개 및 시작하기
  2. AWS MobileHub로 iOS 앱 시작하기
  3. AWS MobileHub로 안드로이드 앱 시작하기

이 글을 처음 읽으시는 분들은 앞의 두 가지 글을 미리 읽어 봐 주시면 이해하시는 데 도움이 되실 것입니다. AWS Mobile Hub 프로젝트를 생성하고, 마법사를 통해 AWS 서비스를 선택하는 부분은 기본적으로 동일합니다.

1. 안드로이드용 소스 패키지 생성

iOS 앱 시작하기 글에서 처럼 유저 사인인(User Sign-in)만 선택해서 안드로이드 용 앱 소스 패키지를 생성해 보겠습니다.

  • User Sign-in : Not Required.

유저 사인-인만 선택하고 나머지는 선택하지 않습니다. 이렇게 설정을 하게 되면, 유저 로그인시 다른 서비스(페이스북 등)를 통한 로그인은 하지 않게 되고 Cognito의 Unauthenticated identities를 이용해서 로그인하게 됩니다. 즉 특별한 로그인 인증 없이 앱기능을 실행하게 됩니다.

여기서 사용한 개발 도구는 안드로이드 스튜디오(AndroidStudio), 시뮬레이터는 제니모우션(Genymotion)을 세팅해서 사용했습니다. 안드로이드 소스 패키징은 기본적으로 그레이들(Gradle)을 사용해서 빌드가 되기 때문에 안드로이드스튜디오에서 사용하기 쉽습니다.

먼저 앱 실행을 해보도록 하겠습니다. 만약 안드로이드 스튜디오에 제니모우션 플러그인이 설치되어 있으면, 스튜디오 맨 상단 우측의 제니모우션 아이콘을 클릭해서, 원하는 디바이스를 우선 런치하도록 합니다.


[그림 1] 안드로이드스튜디오에서 제니모우션 실행

시뮬레이터가 뜬 이후에, 안드로이드 스튜디오 상단의 실행 버튼을 눌러 실행중인 애뮬레이터에 패키지를 배포합니다.


[그림 2] 에뮬레이터에 앱 실행

앞서 iOS와 동일한 화면 결과가 나옵니다. 설정에서 유저사인인만 선택했기 때문에, 그림 3와 같이 그에 해당하는 메뉴만이 리스트에 나오게 됩니다.


[그림 3] 유저사인인 화면

기능을 실행해보면, 게스트 계정으로 로그인을 해서 특별한 인증 없이 유저 아이덴터티 값을 가져오게 됩니다. 프로젝트가 생성되면서, 설정에서 선택된 기능에 해당하는 서비스가 자동으로 생성됩니다. 예를 들어 여기서 Cognito의 서비스가 생성되고, POOL_ID값도 자동으로 생성되는데, 소스 패키지에 이 값이 기본으로 포함되어 있습니다.


[그림 4] 안드로이드 소스 패키지 생성

이후에 빌드 단계에서 안드로이드를 선택해서 소스를 다운로드 하시기 바랍니다. 적절한 곳에 소스를 푼 후에 본인의 개발 도구에 프로젝트를 가져오기 하시기 바랍니다.

이제 생성된 소스의 구조를 살펴보도록 하겠습니다.


[그림 5] 프로젝트 구조

AWS 서비스와 관련된 클래스들은 amazonaws.mobile 패키지에 위치합니다. 설정 단계에서 서비스가 추가될 때마다 xxxManager가 추가됩니다.

데모 앱의 화면과 관련된 클래스들은 mysampleapp 패키지 안에 위치합니다. 역시 설정 단계에서 서비스가 추가될 때마다 데모용 화면이 추가되면서 클래스가 늘어나게 됩니다.

AWS 서비스와 관련해서 가장 기본적인 파일은 AWSConfiguration과 AWSMobileClient 입니다. 그림 5에서 보듯이 AWSConfiguration는 AWS 서비스 리소스의 아이덴터티를 포함하고 있습니다.

또한 AWSMobileClient는 앱의 부트스트랩을 담당합니다. 각종 서비스의 매니징 클래스를 생성하는 일을 담당하는 것입니다. 여기서는 IndentityManager만 입니다. 서비스가 추가되면 이 또한 늘어나게 됩니다.

2. 안드로이드용 데모 앱 실행하기

먼저 데모 앱 실행을 해보도록 하겠습니다. 만약 안드로이드스튜디오에 제니모우션 플러그인이 설치되어 있으면, 스튜디오 맨 상단 우측의 제니모우션 아이콘을 클릭해서, 원하는 디바이스를 먼저 런치하도록 합니다.


[그림 6] 안드로이드스튜디오에서 제니모우션 실행

시뮬레이터가 뜬 이후에, 안드로이드스튜디오 상단의 실행 버튼을 눌러 실행 중인 애뮬레이터에 패키지를 배포합니다.


[그림 7] 에뮬레이터에 앱 실행

앞서 iOS와 동일한 화면 결과가 나옵니다. 그림 8와 같이 설정에서 유저사인인만 선택했기 떄문에, 그에 해당하는 메뉴만이 리스트에 나오게 됩니다.


[그림 8] 유저 사인인 화면

메뉴를 클릭하여 기능을 실행해보면, 게스트 계정으로 로그인을 해서 특별한 인증 없이 유저 아이덴터티 값을 가져오게 됩니다.

프로젝트가 생성되면서, 설정에서 선택된 기능에 해당하는 서비스가 자동으로 생성됩니다. 예를 들어 여기서 Cognito의 서비스가 생성되고, POOL_ID값도 자동으로 생성되는데, 소스 패키지에 이 값이 기본으로 포함되어 있습니다.

3. 안드로이드용 데모 앱에 서비스 추가하기

우리는 현재 모바일에서 로그인 기능을 Amazon Cognito로만 연결한 기능을 테스트해보았습니다. 이제 몇 가지 기능을 추가하고 다시 소스 패키지 모습과 서비스 모습을 살펴보도록 하겠습니다. 프로젝트 이름은 SecondTestApp이라고 하겠습니다.

기본 설정에서는 다음과 같이 구성을 하겠습니다. 먼저 유저 사인인에서 페이스북으로 로그인하도록 설정합니다.


[그림 9] 페이스북 사인인 설정

여기서 페이스북 앱 아이디는 페이스북 앱을 만들어서 생성된 앱 아이디입니다. 참고로 페이스북에 앱을 생성한 후에, 플랫폼 추가를 선택해서 안드로이드의 경우 패키지 네임, 런치 화면 클래스 이름, 키 해쉬 값을 넣어 주어야 합니다. 보다 상세한 내용은 페이스북 개발자 문서를 참고하시기 바랍니다.


[그림 10] 페이스북 안드로이드 세팅

이렇게 생성한 이후에, 소스 패키지를 다운 받아서 실행해 보기 바랍니다. 처음 예제와 마찬가지 방법으로 앱 실행을 하면, 이번에는 페이스북으로 로그인하라는 화면이 나옵니다.


[그림 11] 페이스북 로그인 하기

에뮬레이터에서 키보드 타이핑이 안되는 경우가 있을 수 있습니다. 이 경우 에뮬레이터의 설정에서 키보드 입력의 Physical Keyboard Input을 OFF 로 설정하면 됩니다.


[그림 12] 에뮬레이터 키보드 설정 변경

로그인을 하면 각 기능별로 데모화면을 볼 수 있게 됩니다.


[그림 13] 서비스별 데모화면

유저 데이터 스토리지를 실행하면, 하나의 파일을 볼 수 있습니다. 이 파일은 프로젝트를 생성하면서 자동으로 생성된 S3 버킷에 존재합니다. AWS 콘솔에서 확인을 해보면 파일이 존재하는 것을 알 수 있습니다.


[그림 14] 자동으로 생성된 S3 버킷과 그 파일

각 서비스별로 실행을 해보면 그 상태를 서버에서 확인 할 수 있습니다.

소스코드의 변경을 살펴보겠습니다. 아래 그림을 보면 어떤 파일이 추가되었는지 비교해서 알 수 있습니다.


[그림 15] 변경된 프로젝트 구조

amazonaws.mobile패키지에 서비스 별로 필요한 패키지들이 추가된 것을 볼 수 있습니다. 물론 화면이 추가 되었기 때문에 mysampleapp에도 여러 클래스들이 추가된 것을 알 수 있습니다. 개별 클래스는 안드로이드 프로그래밍에 익숙한 분은 쉽게 파악할 수 있습니다.

지금까지 살펴봤듯이 모바일 허브를 통해 생성된 소스 패키지는 본인의 앱을 개발하는데 있어서 아주 좋은 출발점이 됩니다. 서비스를 생성하고, 그에 맞는 클라이언트 기능을 일일히 SDK를 이용해서 구현하는 것 보다 훨씬 쉽고 빠르게 초기 작업을 진행할 수 있습니다.

또한, AWS 서비스에 대한 비용만 지불하며, AWS Mobile Hub 사용에 대한 추가 요금은 없습니다. 각 AWS 서비스에서 사용한 만큼만 요금을 지불하면 됩니다.

어렵게만 생각한 AWS 모바일 클라이언트의 개발, 이제 손쉽게 시작해 보세요.

본 글은 아마존웹서비스 코리아의 솔루션즈 아키텍트가 국내 고객을 위해 전해 드리는 AWS 활용 기술 팁을 보내드리는 코너로서, 이번 글은 박선용 솔루션즈 아키텍트께서 작성해주셨습니다.