Amazon Web Services 한국 블로그

AWS 기반 게임 개발자를 위한 안내서 – 3부. 게임 개발 및 운영을 위한 유용한 AWS 서비스

전 세계에 대규모 게임 사용자를 위한 빠르고 민첩한 게임 서비스 개발을 위해 클라우드 활용은 필수가 되었습니다. 세계 최대 게임 회사의 90%가 AWS 기반 게임 서비스를 제공하고 있으며, 국내 게임 매출 상위 15개사 모두 AWS를 사용하고 있습니다. AWS 기반 게임 개발자들이 경험하는 서비스 제공 이슈를 해결 할 수 있는 모범 사례를 총 4회의 걸쳐 여러분께 공유해 드리고자 합니다.

오늘은 1부. 게임 서비스 분산 서비스 거부 (DDoS) 공격 패턴 및 대응 방법2부. 게임 출시 전 반드시 챙겨야 할 것들에 이어 게임 개발 및 운영에 유용한 서비스를 정리해 보겠습니다.

단순히 개발자가 모든 것을 만들 수 있다고 생각한다면, AWS에서는 아마 Amazon EC2 만 있으면 될 것입니다. 여기에 추가로 파일 저장을 위한 Amazon S3 그리고 기타 몇 가지 네트워크 서비스만 있다면 개발한 게임을 충분히 엔드 유저에게 서비스를 할 수 있습니다. 그리고 실제로 모든 것을 EC2 기반으로 개발하고 운영 중인 회사들도 있습니다.

하지만 이러한 방식의 접근을 한다면 수 많은 기능들을 개발할 많은 개발자와 시간이 당연히 필요할 것이고, 개발한 애플리케이션/서비스에 장애가 발생했을 때 원인을 찾고 고치고 다시 패치하기 까지 긴 시간이 소요될 것입니다. 당연히 서비스가 중단된 시간에 발생하는 금전적인 손실은 시간 단위로 올라갑니다.

이러한 리스크를 조금이라도 줄이고 더 빠르게 신규 컨텐츠들을 개발하여 유저들이 원하는 서비스를 더욱 오랫동안 제공할 수 있을 것입니다. 이 글에서는 AWS 의 어떤 서비스들을 활용하면 더 많은 유저들이 동시에 즐길 수 있는 게임을 더 빠르게 개발할 수 있는지에 관한 정보를 제공합니다.

1. 데이터베이스

우선은 데이터베이스입니다. 게임에서 가장 중요한 역할을 담당하고 있는 것 중 하나가 아닐까 생각됩니다. DB 없는 게임이란건 콘솔 게임을 제외하고 최근에는 정말 찾아보기 어렵습니다. AWS 에서 데이터베이스를 운영한다고 했을 때 옵션은 크게 두 가지가 있습니다.

    • [옵션1] Amazon EC2 에 직접 엔진을 설치해서 운영할 것인가
    • [옵션2] AWS 에서 제공하는 관리형 RDBMS, NoSQL 을 사용할 것인가

 

[옵션 1]의 경우는 회사에 데이터베이스만 전담할 경험 있는 DBA 가 여럿 존재하고, 아주 세밀한 튜닝을 원할 경우에 선택할 수 있습니다. 그게 아니라면 [옵션 2]와 같이 AWS 의 관리형 서비스(Amazon RDS, Amazon DynamoDB, Amazon DocumentDB 등)들을 사용하는 것이 일반적입니다. 기본적으로 어떤 데이터베이스 엔진이 내가 개발하는 게임에 적합할지는 다음 링크에서 확인할 수 있습니다. (게임을 위한 최적의 AWS DB 서비스 선정 퀘스트 깨기)

즉, 저장하려는 데이터의 용도에 맞는 DB 를 선택하여야만 효율적인 개발과 운영이 가능합니다. 또한 여기에서 게임 내 상점 데이터, 결제, 월드 기반 MMORPG의 게임 DB 로 고려하고 있는 RDBMS 가 MySQL, MariaDB, PostgreSQL 라고 한다면 Amazon Aurora 사용을 적극적으로 고려해보시기 바랍니다. 일반적으로 Aurora 는 표준 MySQL보다 5배 많은 처리량과 PostgreSQL 보다 3배 많은 처리량을 제공하며, 이 둘과 완벽하게 호환됩니다. 추가로 99.99% 가 넘는 가용성을 제공하도록 설계되었습니다.

Aurora 를 통해 게임을 개발하신다면 몇가지 Aurora 의 특성에 대해 미리 알아봐야 하지만, 개발하시는 게임의 DB 가 Aurora 로 바뀌는 것 외에 개발 과정에서 크게 달라질 것은 없습니다. 보다 자세한 내용은 다음 링크에서 확인해볼 수 있습니다 : Amazon Aurora로 게임 데이터베이스 레벨 업!

2. 네트워크

두 번째로 드리고 싶은 이야기는 네트워크에 관한 것입니다. 모든 게임 유저들은 더 빠른 네트워크를 원하며, IT 업계에 종사하지 않더라도 ‘핑 튄다’ 라는 말을 할 정도로 네트워크 성능에 민감합니다. 더불어, 게임을 만드는 기획자나 개발자 역시 더 빠른 네트워크를 활용해서 더 많은 국가의 다양한 유저들이 동일한 게임을 즐기길 원합니다.

아무리 네트워크 속도가 빨라졌어도 여전히 ISP(Internet Service Provider) 가 제공하는 퍼블릭 인터넷은 불안정한 경우가 많습니다. 따라서 더 빠르고 안정적인 네트워크를 통한 게임 운영을 위해 고려하셔야 할 것은바로 AWS Global Backbone 입니다. 보다 자세한 내용은 다음 링크에서 확인해보실 수 있습니다 : AWS Global Infrastructure

이러한 AWS 의 Backbone 네트워크를 활용하여 글로벌 서비스를 도와드리는 대표적인 서비스는 Amazon CloudFrontAWS Global Accelerator 가 있습니다. CloudFront 를 비롯한 그 외의 AWS 네트워킹 옵션은 다음 링크에 소개되어 있습니다. (더 높은 초당 패킷 처리 수와 더 낮은 지연 시간을 달성하기 위한 AWS 네트워킹 옵션)

이 중에 Global Accelerator 는 최근에 소개된 서비스로 이를 활용한다면 TCP/UDP 기반 게임들의 트래픽 성능을 개선할 수 있습니다. 게임 유형에 따라 별도의 Proxy 구축 없이도 최근 모바일 게임의 대세인 글로벌 원-빌드를 구축하여 안정적인 게임 운영이 가능해집니다: Improve Your Application’s Availability and Performance with AWS Global Accelerator

3. 게임 외의 추가 기능 구현

앞부분에서는 조금 성능적인 면에 집중했던 내용이었다면 지금부터는 AWS에서 제공하는 서비스를 활용하여 개발자의 부담을 줄이는 내용에 관해서 다루어 보겠습니다.

우선 회원가입과 로그인하면 떠오르는 솔루션은 OAuth2, SAML2, OpenID 등이 있을 것 같습니다. 이것을 활용하여 별도의 서버와 클라이언트 모두를 개발하는 것은 또 다른 워크로드를 필요로 합니다. 많은 게임들에서 공통적으로 사용되는 이와 같은 기능들은 이미 AWS 에서 서비스 형태로 제공하고 있습니다.

회원 가입이나 로그인 기능과 관련하여 Amazon Cognito 를 활용한다면 인증 부분의 개발을 최소화 할 수 있습니다. Cognito 는 표준 기반 자격 증명 공급자이며 손쉽게 게임, 앱과의 통합이 가능합니다. 좀 더 자세한 내용은 다음 링크에서 확인해보실 수 있습니다. ( Amazon Cognito로 10분만에 인증 서비스 만들기)

또 한가지 다룰 내용은 ‘달걀을 한 바구니에 담지 말라’ 는 것입니다. 개발을 하다보면 초기 설계 과정에서는 없던 기획자들의 요청이 추가되기도 하고 대표님의 취향을 반영한 추가적인 기능 구현이 필요해질 때가 있습니다. 이러한 요청들이 개발 도중에 추가되면 하나의 서버가 나중에는 너무 많은 일을 처리해야 하는 위험한 상황이 심심치 않게 발생할 수 있습니다.

이런 상황에서 고려해볼 수 있는 서비스는 AWS Lambda, Amazon SQS 등이 있습니다. Serverless 나 MSA (MicroService Architecture), 그리고 느슨하게 결합된 아키텍처 등에 활용할 수 있는 서비스들은 굉장히 다양하지만 가장 대표적인 두 가지 서비스만 소개를 드리겠습니다.

개발 과정에서 추가된 새로운 기능, 독립된 서버를 운영하기에는 너무 단순한 로직 그리고 인게임 로그 처리 등에는 Lambda 를 활용할 수 있습니다. 이렇게 할 경우 단순히 개발자는 본인이 작성한 코드를 원하는 상황에서만 실행하는 것이 가능하게 됩니다. 다음 실습을 통해 Lambda 를 활용한 서버리스 환경 구축에 조금 익숙해질 수 있습니다: 서버리스 기반 좀비 퇴치 앱 개발

다른 한가지는 서버나 서비스간에 손실 없이 다른 리소스들에 영향을 최소화하며 모든 데이터 볼륨을 전송할 수 있는 서비스인 SQS 입니다. 100 vs 100 배틀로얄 장르의 게임 등과 같이 서버 간에 많은 양의 메시지를 처리해야할 경우 서버들 사이에 SQS 를 위치함으로 훨씬 안정적인 커뮤니케이션을 가능케 할수 있습니다. 좀 더 자세한 내용은 다음 링크에서 확인하실 수 있습니다 : 대규모 글로벌 게임 서버 운영을 위한 최대 90% 저렴한 EC2 스팟 인스턴스 활용기

4. 모니터링과 운영

마지막으로 게임을 출시한 뒤 유저 피드백을 받기 전에 보다 빠르게 장애 상황을 인지하고 대처할 수 있도록 도와주는 모니터링에 대한 내용입니다. 아마 이 글을 읽으시는 거의 대부분의 분들은 AWS 에서의 모니터링은 Amazon CloudWatch 를 통해 할 수 있다는 사실을 이미 잘 알고 계실 것 같습니다. CloudWatch 에서는 운영 중인 모든 리소스에 대한 메트릭을 제공하고 있고, 추가적으로 로그 탐색이나 분석과 같은 기능도 제공하고 있습니다.

한가지 소개해드리고 싶은 기능은 CloudWatch 이상 탐지 기능입니다. 운영 중인 환경의 메트릭들에 대해 이상 탐지를 활성화 한다면 CloudWatch 가 자체통계와 ML 알고리즘을 적용하여 정상 범위를 결정하여 미처 신경 쓰지 못한 비정상적인 상황을 사전에 방지할 수 있습니다. 아래의 예제는 이상 탐지 알고리즘이 메트릭의 계절성 및 추세 변화를 설명하고 있는 것입니다.
다수의 인스턴스를 활용하여 게임 서비스를 운영할 경우 각 인스턴스들을 관리하는 효율적인 방안에 대해서 고민을 하게 됩니다. 많은 사람들이 고민을 하는 영역인 만큼 다양한 IT 운영 자동화 도구들이 존재하는데, 그 중 AWS Systems Manager 를 통하여 여러 AWS 서비스의 운영 데이터를 중앙집중화하고 AWS 리소스 전체에서 작업을 자동화할 수 있습니다. 세션 관리자를 통하여 SSH 키를 관리하거나, 배스천 호스트를 사용할 필요 없이 Windows 와 Linux EC2 인스턴스에 IAM 을 사용하여 직접 접근 조정을 할 수도 있습니다.

패치 관리자를 통하여 대규모 인스턴스에서 자동으로 운영 체제 및 소프트웨어 패치를 선택 및 배포하도록 지원합니다. 파라미터 스토어를 사용하여 서비스 구성 데이터를 중앙 관리하고 KMS 로 암호화를 IAM 으로는 접근 제어를 할 수 있습니다. 그 외에 여러 운영에 도움이 되는 기능들을 제공하여 운영 업무의 가려운 부분을 많이 해소해주기에 그동안 운영 자동화에서 불편함이 있었다면 AWS Systems Manager 가 좋은 해결책이 될 수 있습니다.

추가적인 모니터링 서비스로는 서버나 DB 와 같은 리소스가 아닌 실제 애플리케이션에 대해 모니터할 수 있는 AWS X-Ray 서비스를 활용할 수 있습니다. 이를 통해 실제 게임이나 애플리케이션에서 발생하는 성능 문제나 오류의 근본 원인을 식별하고 올바르게 수정되었는지 파악하는데 있어 도움을 받을 수 있습니다.

5. 마치며

지금까지 게임 개발과 운영에 도움이 되는 서비스들 중 몇 가지만 간단하게 살펴봤습니다. 오늘 언급한 데이터베이스, 네트워크, 모니터링 외에도 AWS 에서는 컴퓨트, 스토리지, 분석, AI/ML, 개발자 도구와 같은 거의 대부분의 분야에서 관리형 서비스를 제공하고 있습니다. 이러한 서비스들을 사용하면 게임 개발과 운영의 많은 부담을 AWS 로 덜 수 있고, 재밌는 게임을 만드는 것에 더 집중할 수 있게 됩니다.

또한, 한국 AWS 에서는 게임 개발과 운영에 도움이 되는 서비스들을 충분히 테스트해보실 수 있도록 게임사를 대상으로 테스트 비용을 지원드리고 있습니다. 구체적인 지원 금액 및 절차, 기타 궁금하신 내용이나 기술 지원에 대해서는 aws-gaming-korea@amazon.com 로 문의주시기 바랍니다.

– 안효빈, AWS 게임 솔루션즈 아키텍트