Amazon Web Services 한국 블로그
AWS MobileHub로 iOS 앱 시작하기
지난 AWS re:Invent 행사에서 AWS를 활용하는 모바일 개발자를 위한 모바일 허브(Mobile Hub)라는 새로운 서비스가 소개되었습니다.
이미 기존에 모바일을 위한 AWS 서비스는 많이 존재합니다. 인증 및 데이터 동기화를 위한 Amazon Cognito, 분석을 위한 모바일 분석(Mobile Analytics), 다양한 기기별 테스트를 위한 디바이스 팜(Device Farm), 푸시 서비스(SNS) 등이며, 이를 모바일 개발 환경 별로 AWS 모바일 SDK를 통해 제공하고 있습니다.
그러나, 모바일 SDK를 사용해서 프로그래밍을 하는 것은 기본 구조를 파악하고, 적용하기까지 몇 번의 시행착오를 거쳐서 하나의 시작 애플리케이션을 만들 수 있습니다. 통상 그 시간은 매우 짧지만 보다 편리한 방법을 찾는 것이 개발자의 본능이라고 생각합니다. 이러한 개발자의 편의를 위해 새롭게 발표한 서비스가 바로 AWS 모바일 허브라는 서비스입니다.
문서 목차
이번 글에서는 어떻게 AWS 모바일 허브를 통해 빠르게 iOS 앱을 만들 수 있는지 과정을 설명드리고자 합니다. 이를 통해 손쉽게 AWS 서비스를 연동하여 여러분의 iOS용 앱의 주요 기능과 통합 할 수 있게 될 것입니다.
우선 Mobile Hub 콘솔에 들어가서 프로젝트를 생성하고, 간단한 마법사를 통해 원하는 AWS 서비스를 선택하는 과정을 거치게 됩니다. 처음에 프로젝트 생성하는 과정은 AWS 모바일 허브 시작하기 글을 참고하시기 바랍니다.
1. iOS용 소스 패키지 생성
먼저 생성된 iOS앱 샘플 앱을 생성해 보도록 하겠습니다. 프로젝트 생성 마법사의 마지막 단계에서 “iOS”를 선택하고 “Build Your App”을 하시면 됩니다. 생성되는 소스 코드에 대한 정보는 소스 패키지 다운로드 단계에 존재하는 Discover, Develop를 보면 어떤 소스 코드를 수정해야 하는지 어떤 부분을 추가 개발해야 하는지 상세한 가이드가 제시됩니다.
[그림1] iOS의 샘플 앱 생성하기
한 가지 중요한 점은 샘플 코드에서 수정해야 할 주요 정보는 여러분이 실제로 사용할 AWS 서비스 정보입니다. 클라이언트 소스가 패키지 될 때 사용할 AWS 서비스(Cognito 또는 S3 버킷 등)가 같이 생성됩니다.
경우에 따라 생성된 프로그램에서 서비스에 필요한 정보를 수정하거나 변경할 필요가 있습니다. 예를 들어, 현재 베타 버전인 모바일 허브에서 생성된 서비스는 “us-east-1” 즉 버지니아 지역을 기준으로 생성됩니다. 만약 여러분이 Cognito 등을 기존에 사용하던 Identity Pool 정보라던가, 지역을 변경해서 새로 생성한 서비스로 연결하려면, 해당 ID 값들을 이용해야 합니다.
먼저 iOS의 프로젝트 구조를 살펴보도록 하겠습니다.
[그림2] iOS의 소스 패키지 구조
Demo 폴더에는 예제 실행이 가능한 각 화면들로 구성됩니다. 만약 여러분이 추가적으로 기능을 추가하면 그에 맞추어서 간단한 테스트를 할 수 있는 화면이 이 그룹에 추가됩니다. App 폴더 에는 앱의 가장 기본 파일들, AppDelegate나 Supporting Files가 기록됩니다.
AWS 서비스와 관련된 것은 AmazonAWS 폴더 입니다. 만약, 추가적으로 서비스 변경이 필요하다면 우선적으로 이 부분을 살펴보면 됩니다.
가장 먼저 보아야 할 부분은 AWSConfiguration.h
이며, 그 다음에는 각 서비스 별로 그룹들이 추가됩니다. 통상 각 서비스에 대한 클라이언트 관리 클래스는 XXXManager라는 이름으로 구성됩니다. 여기서는 Identity 그룹에 AWSIdentityManager가 추가되어 있는 것을 볼 수 있습니다. AWSConfiguration.h를 살펴보면 그림3과 같습니다.
[그림 3] AWSConfiguration.h
여기에는 기본적으로 Amazon Cognito에 대한 POOL_ID 정보가 나와 있습니다. 만약 설정 단계에서 S3 스토리지나, 모바일 분석 서비스를 추가적으로 선택하면 Analytics의 앱 아이디나, S3의 버킷 이름이 추가적으로 나타나게 됩니다. 서비스를 추가하는 것은 이후에 살펴보도록 하겠습니다.
2. 데모 애플리케이션 실행하기
Xcode에서 Product에서 Run을 실행해서 데모앱을 실행해보면 아래와 같은 데모앱이 실행됩니다.
[그림 4] 데모 앱 실행화면
“User Sign-in”을 눌러보시면, Amazon Cognito를 통해 게스트(Guest)로 자격 증명을 얻은 것을 보실 수 있습니다. Amazon Congito를 통한 서비스에는 “프로젝트명_MOBILEHUB_번호” 형식으로 서비스가 생성된 것을 확인할 수 있습니다. 그 서비스를 클릭하고 들어가면, 그림 4처럼 앞서 게스트로 로그인해서 Identities의 s숫자가 증가된 모습을 볼 수 있습니다.
[그림 4] Amazon Cognito 서비스 화면
여기서 한 가지 점검할 사항이 있습니다. 만약 컴파일을 했는데, 그림 5처럼 “Illegal Configuration” 에러가 보인다면, 현재 Xcode버전이 7.0 이상인지를 꼭 확인해 보시기 바랍니다.
[그림 5] Xcode 7 미만 버전에서의 에러메시지
3. 데모 앱에 AWS 서비스 추가하기
Amazon Cognito로 Guest 로그인 기능만 있는 것에 몇 가지 기능을 추가하고, 다시 한번 소스 패키지 모습과 서비스 모습을 살펴보도록 하겠습니다. 새 프로젝트 이름은 SecondTestApp이라고 하겠습니다.
새 설정에서는 User sign-in 부분을 페이스북으로 로그인하도록 설정합니다.
[그림 6] 페이스북 로그인 설정
여기서 페이스북 앱 아이디는 페이스북 앱을 만들어서 생성된 앱 아이디입니다. 먼저, 페이스북에 앱을 생성한 후에, “플랫폼 추가”를 선택해서 iOS의 경우 번들 아이디를 넣어 주어야 합니다. 보다 상세한 설정 방법은 페이스북 개발자 문서를 참조하시기 바랍니다.
다음에는 사용자 데이터 스토리지와 모바일 분석, 클라우드 로직을 차례로 설정합니다.
- User Data Storage : Store user data
- App Analytics : Add analytics
- Cloud Logic : Enable Logic
클라우드 로직의 경우에는 [그림 7]과 같이 예시적으로 나와있는 기본 AWS Lambda 함수를 모두 선택합니다.
[그림 7] 클라우드 로직 설정
이렇게 하고 소스 패키지를 생성한 이후에, 다운로드 받아서 Xcode로 열어보시기 바랍니다. Demo 폴더에는 화면이 더 추가되었고, AmazonAWS 그룹에도 서비스 이름이 더 추가된 것을 알수 있습니다.
[그림 8] 기능 추가 소스 패키지 프로젝트 구조
이제 실행을 시키면 먼저 페이스북 로그인 화면이 나타납니다. 여기서 본인의 페이스북 아이디로 로그인을 하면 첫번째 데모 화면이 나타납니다.
[그림 9] 추가된 서비스 데모 앱 화면
만약 유저 데이터 스토리지를 누르면 예제 파일을 다운로드 할 수 있습니다. 여기서 보이는 example-image.png파일은 어디에 존재하는 것일까요? 이것은 프로젝트에서 설정에 스토리지를 추가했기 때문에 자동으로 생성된 S3 버킷에 존재합니다.
[그림 10] S3의 샘플 이미지 다운로드
변경된 AWSConfiguration.h 내용을 살펴보도록 하겠습니다. 모바일 분석와 S3 버킷 이름이 추가된 것을 확인 할 수 있습니다.
[그림 20] 변경된 AWSConfiguration.h
새로 만들어 진 데모 앱 화면에서 다른 기능도 사용해 보시고, 여러분이 가진 AWS 자원으로 직접 연결하셔서 기본 기능을 수행해 보실 수 있습니다.
지금까지 살펴 보신 것과 같이 단일 콘솔을 사용하여 모바일 허브를 사용하면 AWS 서비스에서 구동되는 모바일 앱을 쉽게 개발할 수 있습니다. 샘플 앱을 새로 만들 앱의 기반으로 사용하거나, 코드 스니핏을 잘라내어 여러분의 앱에 삽입하여 서비스를 개발 할 수 있습니다.
또한, AWS 서비스에 대한 비용만 지불하며, AWS Mobile Hub 사용에 대한 추가 요금은 없습니다. 각 AWS 서비스에서 사용한 만큼만 요금을 지불하면 됩니다.
어렵게만 생각한 AWS 모바일 클라이언트의 개발, 이제 손쉽게 시작해 보세요.
본 글은 아마존웹서비스 코리아의 솔루션즈 아키텍트가 국내 고객을 위해 전해 드리는 AWS 활용 기술 팁을 보내드리는 코너로서, 이번 글은 박선용 솔루션즈 아키텍트께서 작성해주셨습니다.