▲ 김필중 솔루션 아키텍트

[인벤게임컨퍼런스(IGC) 발표자 소개] 김필중 솔루션 아키텍트는 2007년부터 모바일 애플리케이션과 웹 서비스 분야에서 개발과 아케텍팅 업무를 수행했다. 일본의 한 게임 회사에서 개발과 현지화 작업 경험이 있으며, 현재 아마존 웹 서비시즈 코리아에서 게임 업계 고객에게 효과적이고 효율적인 아키텍쳐 구성 전략에 조언한다.

모바일 게임에는 사용자 인증, 컨텐츠 제공, 데이터 저장 및 분석은 물론 모네타이제이션을 위한 다양한 기능들의 개발이 요구된다. 하지만, 소규모 게임사, 개발팀에게는 어려운 일이고 게임 개발만 해도 모자란 시간에 부담 된다.

이에, 김필중 솔루션 아키텍트는 AWS에서 제공하는 다양한 서비스를 해답으로 제시한다. 이미, 아마존의 기술은 대형 게임사에서도 편하게 이용하고 있기도 하다. IGC 2017 마지막 날. 모바일 게임 개발자들이 고민을 안고 찾은 가운데, 김필중 솔루션 아키텍트가 무대에 올라 답을 제시했다.


■ 강연주제: AWS를 활용한 모바일 백엔드 개발

김필중 솔루션 아키텍트는 자세한 소개에 앞서, AWS를 활용해 싱글 게임을 멀티 게임으로 바꾼 ‘Survival Shooter’를 예시로 보여주었다. ‘Survival Shooter’는 유니티 개발자라면 에셋 스토어에서 무료로 다운로드 받을 수 있는 일반적인 슈팅 게임이다. 김필중 솔루션 아키텍트가 직접 개선한 ‘Survival Shooter’에서는 소셜 로그인과 포스팅, 에셋 다운로드(DLC), 디바이스 상태 공유, 버그 리포팅, 선물, 리워드, 가차, 인게임 이벤트 및 데이터 분석이 구현된 모습을 확인할 수 있었다. 김필중 솔루션 아키텍트는 이와 같은 개선을 AWS를 이용해 손쉽게 구현했다고 덧붙였다.

이후, 다양한 백엔드 서비스 중 하나인 kibanaathena를 소개했다. 키바나는 다양한 데이터가 얼마나 모였는지 대시 보드로 보여주는 서비스다. 몇 명의 유저가 어떤 무기를 많이 사용했는지, 또 그 무기로 얼마나 적을 맞췄는지 실시간으로 분석해 그래픽으로 보여주었다. 만일, 데이터 분석 전문가가 있다면 아테나를 사용해 SQL를 직접 분석할 수도 있었다.

▲ 대시 보드로 손쉽게 데이터를 확인하는Amazon kibana

▲ 데이터를 직접 확인할 수 있는 Amazon athena

본격적으로 소개한 AWS Mobile SDK는 모든 서비스에서 공통의 인증 메커니즘을 제공한다고 밝혔다. 플레이어가 갑자기 터널로 들어가거나 엘리베이터에 탔을 때, 간헐적으로 발생하는 네트워크 연결은 자동으로 처리한다. 기본적으로 Android, iOS, Fire OS, Unity, JavaScript를 지원하며 모바일 OS에 따라 최적화된 SDK를 지원한다. 또한, 필요한 서비스만 선택해 사용할 수 있어 메모리 사용 최적화가 가능하며 최신 플랫폼 향상에 따라 지속해서 업데이트를 지원한다.

김필중 솔루션 아키텍트가 소개한 Amazon Cognito(이하 코그니토)는 사용자 인증과 앱 데이터를 안전하게 오프라인에서 사용할 수 있게 하고, 단말기 간에 동기화 상태를 유지한다. 데모로 시연한 ‘Survival Shooter’에서는 페이스북 로그인과 캐릭터가 죽은 위치를 기억해 재시작 시 해당 위치에서 시작하도록 할 때 코그니토를 사용했다고 밝혔다.

코그니토를 더 자세히 살펴보면, 크로스 디바이스 및 크로스 플랫폼 동기화를 가능케 한다. 만약 내 핸드폰에서 게임을 즐기다 잠시 친구의 핸드폰에서 해당 게임을 로그인할 때, 연속해서 즐길 수 있도록 동기화를 지원한다. 다음으로 플레이어가 페이스북, 구글, 트위터, 카카오 등 다양한 수단으로 인증할 수 있게끔 지원하며 관리를 단순하게 만들어준다. 만약 새로운 로그인 수단이 나왔을 때엔 업데이트가 가능하며, 독자적으로 회원을 관리했다면 연동하는 것도 가능하다. 이를 위해 백엔드를 고쳐야 하는 일은 없다. 보안에서도 우수해 모바일 장치에서 모든 AWS 서비스에 안전하게 접근할 수 있다. 또한, 코그니토는 아마존의 다양한 서비스를 연동할 수 있게끔 지원한다.

아마존 개발자 인증 ID는 기존의 사용자들의 DB를 그대로 사용할 수 있다. 기존 시스템, Java, Python, Ruby 등의 서버 측 SDK를 사용해 ‘GetOpenIdTokenForDeveloperIdentity()’를 구현할 수 있다. 또한, 코그니토는 고유한 Cognito ID를 사용해 로그인 시스템 간의 매핑을 관리한다.

다음으로 제공하는 Amazon Cognito Sync는 서비스보다는 기능에 가깝다. 오프라인에서 클라이언트 SDK는 Local SQLite 데이터 저장소를 관리해 네트워크를 연결할 수 없는 경우에도 게임이 작동되게끔 하는데, 데이터를 읽고 쓰는 메소드는 Local SQLite DB만 상호 작용하기 때문에 속도 면에서도 우수하다. 동기화는 지능적으로 이루어져, sync 메소드는 로컬 버전 데이터를 클라우드 동기화한다. 저장소와 비교해 델타를 밀어 올려 새로운 변경 사항을 가져온다. 충돌은 유연하게 해결하는데, sync 메소드는 변경 사항을 먼저 읽은 다음 로컬 변경 사항을 클라우드 동기화 저장소에 기록한다. 기본적으로 코그니토는 마지막 쓰기가 성공했다고 가정, 개발자는 프로그래밍 방식으로 자체적인 충돌 해결을 재정의하고 구현할 수 있다.

김필중 솔루션 아키텍트는 “코그니토는 가능한 한 쉽고 직관적으로 만들어졌다”라며, 이어서 “그래야 개발자들이 잘 사용할 수 있기 때문이다. 실제로 굉장히 쉽게 배울 수 있다”라고 소개했다.

게임사 입장에서는 플레이어가 발생시킨 데이터를 수집하고 정리하는 것이 중요하다. 그래야 다음 업데이트나 패치의 방향성을 잡을 수 있기 때문이다. 이를 쉽게 해결해주는 것이 Amazon DynamoDB(다이나모)라고 김필중 솔루션 아키텍트는 소개한다.

다이나모는 메인 DB로 활용되어 사용자 프로필과 슈팅 정보 등을 수집하는 데 쓰인다. 다이나모를 간략히 소개하면 완전 관리형 NoSQL이다. 중요한 특징으로는 어떤 워크로드에도 맞게 확장한다는 점이다. 레이턴시가 항상 일정해 10ms 이하의 신속하고 일관성 있는 환경을 제공한다. 그 때문에 특정 작업의 시간이 얼마나 될지 예측할 수 있다.

일반적으로 DB는 데이터를 만들고 테이블을 넣는다. 하지만 다이나모는 테이블이 기본이다. 만일 유저가 가입하게 되면, 정보는 테이블 안 속성에 들어가게 된다. 속성의 개수가 다르다는 걸 확인할 수 있다. 다이나모의 장점으로, 모든 아이템이나 새로운 아이템이 전혀 다른 속성을 갖더라도 괜찮다. 필수적인 것은 파티션 키다. 파티션 키는 데이터 분산 처리의 기준이 된다. 정렬 키는 필수 요소는 아니다. 1:N 모델에 쓰이며 Rich query 환경을 제공한다.

다이나모를 활용해 최대의 처리량을 얻기 위해서는 파티션 키에 고윳값이 많이 있는 테이블을 만들고, 값이 가능한 한 임의로 매우 균일하게 요청되도록 하는 것이 좋다. 아이템 크기는 작게 유지, 메타데이터는 다이나모에, 큰 blobs는 S3에 저장하기를 김필중 솔루션 아키텍트는 권한다. 또, 매우 높은 규모를 위해 해시 키와 함께 테이블을 사용하고, time series 데이터 저장을 위해 일, 주, 월 등의 단위로 테이블을 사용하면 좋다. 나아가, 중복 제거를 위해 조건 업데이트를 사용하고, 모델을 위해 hash-range 테이블과 GSI를 사용한다. 마지막으로, Hot keys와 Hot partitions는 피해야 한다.



게임에서 인증 후처리나 선물(보상) 후처리 등에 쓰이는 로직의 경우엔 AWS Lambda(이하 람다)를 김필중 솔루션 아키텍트는 추천한다. 람다는 이벤트에 대한 응답으로 작성한 코드를 실행하는 컴퓨팅 서비스다. 웹 사이트를 빗대 설명하면, 기본에는 코드를 실행시키기 위해 동기화 환경을 구축해야 했다. 웹서버 설치와 서버 운영 등 번거로운 일들이 많았는데, 람다는 코드만 올리면 알아서 되게끔 지원한다. 이를 통해 데이터 기반의 검사나 분석 및 알림에 쓸 수 있고 자동으로 확장하는 백엔드 서비스 또한 가능하다.


람다를 사용 시 예상치 못한 에러가 발생하더라도 처리가 가능하다. 또한, CloudWatch를 통한 대시 보드로 다양한 지표를 제공한다. 호출, 에러, 사용량 등을 한눈에 볼 수 있다. 람다를 잘 활용하는 방법으로 김필중 솔루션 아키텍트는 아래의 사이트를 추천했다.

chlice / Severless Framework / SPARTA / APEX / Zappa

게임사는 독립적으로 구성된 서버를 활용해야 할 때, Amazon API Gateway를 사용할 수 있다. 이 기능은 APIs를 정의할 수 있도록 제공한다. 이를 통해 복수 버전과 환경으로 배포를 관리한다. 네트워크 트래픽 관리는 백엔드 보호를 위한 DDoS 방어, 요청 Throttling 기능이 있다. AWS 인증 시스템 통합도 지원한다. 클라우드 리소스에 대한 접근 권한을 부여하기 위한 IAM을 활용했다.

또한, Amazon API Gateway는 API 응답을 저장하기 위한 관리형 캐시, CloudFront를 통한 응답속도 개선, iOS, Android, Javascript 및 Java를 위한 SDK 생선, API 정의를 위한 Swagger 지원, 요청과 응답에 대한 데이터 변형과 API mocking을 지원한다.

데이터 분석은 게임사에 굉장히 중요한 작업이다. 아마존은 이 서비스 또한 지원하여, 게임사는 AWS 분석 서비스를 활용할 수 있다. 데이터 분석은 기기에서 발생하는 데이터를 수집하고, 보통의 KPI를 분석한다. 그리고 리텐션과 유저 행동을 분석한다.


김필중 솔루션 아키텍트가 작은 모바일 개발사를 위해 추천한 분석 서비스는 Amazon Mobile Analytics다. 이 서비스는 규모와 상관없이 앱 사용 데이터를 쉽게 수집하고 가시화한다. 그리고 수집한 데이터를 이해하기 쉽게 제공한다. 특징은 역시 빠르다는 것이다. 해당 서비스는 의미 있는 지표에 집중한다. 다음은 확장성과 Free Tier라는 점이다. 매일 수백만 사용자로부터 생성되는 수억 개의 이벤트를 수용할 수 있는 확장성을 갖고 있다. 그리고 데이터를 직접 소유한다는 점이다. 수집된 데이터는 공유되지 않으며, 재사용되지 않는다.






다음으로 소개한 Amazon Athena(이하 아테나)는 김필중 솔루션 아키텍트가 특히 추천한 서비스다. 아테나는 Amazon S3에 적재된 데이터를 표준 SQL(Standard SQL)을 사용해 쉽게 분석할 수 있는 대화형 쿼리 서비스(Interactive Query Service)다.

아테나의 특징으로는, Serverless인 관계로 게임사는 인프라를 구축할 필요가 없다. 이로 인해 서버 구매 비용, 유지 비용을 절약할 수 있다. 오픈 표준과 포맷들을 기반으로 동작하며 성능에 맞춰 튜닝돼 쿼리는 병렬로 처리한다. 쿼리 당 과금은 스캔 된 TB 당 $5로, 효율적이다. 이 비용은 압축 및 파티션을 통해 절약할 수 있다.

모바일 게임에서 유저 유지를 위해 중요한 선물, 보상 수령은 Amazon SQSAmazon SNS를 사용해 해결할 수 있다. Amazon SQS의 SQS는 Simple Queue Service의 약자로, 빠르고 안정적이며 확장 가능한 완전 관리형 큐 서비스를 제공한다. 구성 요소 간에 메시지를 보내고, 저장하고, 수신할 수 있다.

다음으로 Amazon SNS(Simple Notification Service)는 여러 플랫폼에 푸시 알림을 보내고 전 세계 모바일 사용자에게 도달시킬 수 있는 서비스다. 이 역시 빠르고 안정적이며 확장 가능하다. 완전 관리형 Pub-Sub 서비스이며 메시지 알림이 구독자에게 푸시된다. 메시지 Fan-out을 위해 토픽이 사용된다.

▲ 플레이어들을 특징별로 그룹화해 전략적으로 활용할 수 있다




AWS mobile SDK는 모바일 게임에 필요한 다양한 백엔드 서비스를 제공한다는 것을 알 수 있었다. 복잡할 수 있는 백엔드 개발을 간단하게 구현시켜 주고, 사용자가 많아져도 항상 예측 가능한 성능을 보여준다. AWS답게 언제나 사용한 만큼만, 저렴한 비용으로 이용할 수 있고 인프라나 서비스 환경 구성에 대한 부담을 덜고 게임 로직에 집중시켜 준다. 즉, 운영 부담 최소화로 수익의 극대화를 이끈다.

▲ 모바일 게임을 지원하는 아마존의 다양한 백엔드 서비스