Amazon Web Services 한국 블로그

실시간 전략 시뮬레이션이나 대전 형식 게임을 위한 세션 기반 게임 아키텍처 알아보기

오늘은 비동기 웹 기반 게임 서버 아키텍처 패턴에 이어 세션 기반 게임의 기본적인 아키텍처에 대해 소개해 드립니다. 세션 기반 게임(Session-based Game)은 실시간성 게임 중 대부분을 차지하고 있는 게임 장르의 형태입니다. 일반적으로 방 기반(Room-based), 매치 기반(Match-based)으로 동작하는 게임들의 형태로 세션 기반 게임에서 하나의 게임은 시작과 끝이 정해져 있고, 그 안에서 플레이어들이 상호 작용을 하는 방식으로 구현됩니다. 세션 기반 게임의 대표적인 장르로는 FPS, 대전 격투 게임, 전략 시뮬레이션(RTS) 가 있습니다.

이런 종류의 게임들에서는 하나의 매치(Single Match)에 참여한 플레이어들이 실시간 상호작용을 하게 되며, 실시간성을 위해 게임의 상태(State)를 서버의 해당 게임 세션 내에서 관리하게 됩니다. 이렇게 게임 세션이 상태를 갖는 Stateful 한 형태로 구성되기 때문에 세션 기반 게임은 다음과 같은 특징들을 지니게 됩니다.

  1. 서버가 클라이언트들에 대해 영구적 연결(Persistent Connection)을 유지하게 됩니다. 이에 따라 TCP 나 Reliable UDP, WebSocket 과 같은 프로토콜이 많이 사용됩니다.
  2. 연결을 유지하는 구조로 구성이 되다 보니 인프라의 스케일링이 쉽지 않습니다.
  3. 게임 세션 간에는 서로 독립적으로 구성되어야 하며 세션 간에 상태 공유는 일반적으로 일어나지 않습니다.
  4. 각 매치를 중계해주기 위한 매치메이커(Matchmaker)와 실제 게임을 플레이하는 데디 게임 서버(Dedicated Game Server)가 분리될 수 있습니다.

위와 같은 요구사항으로 인해 실시간성 세션 기반 게임 서버는 웹 서버 기반의 아키텍처와 다른 형태로 구성이 되게 됩니다. 이번 블로그에서는 AWS를 이용해서 세션 기반 게임 서비스 아키텍처를 구성하는 방안에 대해 다뤄보도록 하겠습니다. 이 블로그에서는 많은 고객분들이 참고하시는 세션 기반 게임의 기본적인 아키텍처를 가이드하며, 특히 게임 워크로드의 경우 구현에 따라 아키텍처 구성이 달라질 수 있음을 미리 말씀드립니다.

AWS 기반의 세션 기반 게임 아키텍처 모범 사례

첫 번째로는 AWS의 다양한 서비스들을 이용해 직접 세션 기반 게임을 위한 아키텍처를 구성하시는 방식입니다. 이 방식은 AWS의 인프라 기반에서 여러 서비스를 연동하며 높은 유연성을 게임 서비스에 제공합니다.

매치메이커 계층

많은 세션 기반 게임 서비스는 매치메이커를 통해 게임의 매치를 생성합니다. 위의 아키텍처는 HTTP 기반의 매치메이커를 중심으로 UDP 기반의 데디 게임 서버들을 매핑하여 게임 클라이언트들이 게임 세션에 진입하게끔 구성합니다.
이때, 웹 기반 매치메이커를 구성하신다면 Amazon CloudFront 를 통해 전 세계에서 동적 API 요청을 가속할 수 있습니다. Amazon CloudFront 는 단순히 CDN 역할을 할 뿐 아니라, 동적 API에 대해서도 TCP Handshake 최적화 및 Round Trip Time 최적화를 통해 HTTP 응답 시간을 개선합니다.
Amazon CloudFront는 웹 기반의 트래픽 처리를 위한 서비스이기 때문에, 매치메이커가 웹 기반으로 구성될 수 없다면 서버에 직접 연결하거나 AWS Global Accelerator를 사용해서 트래픽을 가속해보실 수 있습니다.
실제 게임 클라이언트들이 접속할 게임 서버로의 연결은 AWS Global Accelerator를 이용하며, 이를 통해 전 세계 사용자들을 위해 TCP 또는 UDP 기반 트래픽을 가속합니다. AWS Global Accelerator는 TCP/UDP 트래픽에 대해 최대 60%까지 성능을 가속해주어 플레이어 경험을 향상시킬 수 있습니다.

게임 서버 계층

매치메이커 및 게임 서버들은 Amazon EC2, Amazon ECS, Amazon EKS 등 다양한 AWS 컴퓨팅 서비스들을 활용할 수 있습니다. 각 컴퓨팅 요소들은 AWS의 글로벌 네트워크 위에 구성된 여러 리전에 배포되어 실제 플레이어 가까운 위치에서 게임 서비스를 제공할 수 있습니다. AWS의 컴퓨팅 옵션들은 워크로드의 특색에 따른 다양한 유형들을 제공하고 있으며, 실제 게임 구현 및 요구사항에 따라 Amazon CloudWatch를 통해 인스턴스 지표들을 모니터링해보면서 최적의 인스턴스 타입을 찾으실 수 있습니다. AWS의 컴퓨팅 서비스들은 기본적으로 온디맨드 가격 정책에 기반하여 사용한 만큼 비용이 청구되는 구조이지만, 예약 인스턴스(Reserved Instance) 또는 Savings Plan을 통해 더욱 저렴하게 구성하실 수도 있습니다. 이에 따라 비즈니스 요구사항에 알맞은 가격 정책의 채택을 통해 비용 효율적인 서버 구성을 하실 수 있습니다.

데이터베이스 계층

데디 서버에서 게임 세션의 결과 업데이트는 직접 데이터베이스에 기록할 수도 있지만, Amazon SQS와 같은 큐 서비스를 사용할 수도 있습니다. Amazon SQS는 확장성과 내구성이 뛰어난 메시지 큐를 제공하며 이를 통해 트랜잭션을 비동기 방식으로 데이터베이스에 기록하도록 설계하실 수 있습니다. Amazon SQS를 사용할 때에는 큐에서 메시지를 읽어서 데이터베이스에 기록할 수 있도록 별도의 Consumer 로직을 수행할 수 있는 컴퓨팅 레이어를 구성하셔야 합니다.
데이터베이스 계층에서는 I/O 바운드 없이 높은 수준의 트랜잭션을 처리하기 위한 Amazon Aurora를 사용하실 수 있습니다. Amazon Aurora 는 클라우드 네이티브한 환경에서 3개의 가용 영역에 6개의 공유 스토리지 노드에 데이터를 복제합니다. 전통적인 관계형 데이터베이스에 비해서 I/O를 효율적으로 사용하여 Sysbench 테스트 결과 기준으로 MySQL 대비 최대 5배, PostgreSQL 대비 최대 3배의 성능을 제공할 수 있습니다. Amazon ElastiCache는 Redis 또는 Memcached와 호환되는 관리형 캐시 데이터베이스로 데이터베이스 앞단에서 자주 사용되는 읽기 요청에 대해 ms 단위의 응답 시간으로 데이터를 제공하는 목적으로 활용됩니다.

서버리스 매치메이커

위의 아키텍처에서 매치메이커에서는 다음과 같이 AWS Lambda를 활용한 서버리스 아키텍처 구성을 하실 수도 있습니다.

Stateless 한 매치메이킹 구성이 가능할 경우 위와 같이 Amazon API GatewayAWS Lambda, Amazon DynamoDB를 활용해보실 수 있습니다. 매치메이커 계층을 서버리스로 구현하시면 인프라에 대한 관리 비용을 최소화하시면서 게임 로직 개발에 집중하실 수 있습니다. 또한 실제 게임에 대한 매치 요청이 발생할 때만 리소스가 구동되기 때문에 비용 효율적으로 인프라를 구성하실 수 있습니다.

Amazon GameLift를 이용한 세션 기반 게임 아키텍처

두 번째로 관리형 게임 서버 호스팅 서비스인 Amazon GameLift를 기반으로 아키텍처를 설계하실 수 있습니다. 이 방식은 Amazon GameLift를 이용해서 간단하고 비용 효율적으로 대규모 글로벌 호스팅을 하실 수 있는 방식입니다.

매치메이커 계층

이 아키텍처는 Amazon API Gateway와 AWS Lambda 기반의 서버리스 매치메이킹을 구현합니다. Amazon GameLift를 사용하신다면 관리형 매치메이킹 서비스인 FlexMatch를 활용하실 수 있으며, 이를 위해 서버리스 스택을 적극적으로 활용하실 수 있게 됩니다.
서버리스 매치메이커는 Amazon DynamoDB에 플레이어 데이터 및 매치 관련 데이터를 적재합니다. Amazon DynamoDB는 규모에 상관없이 ms 단위의 성능을 제공하는 관리형 NoSQL 데이터베이스로 높은 수준의 성능이 요구되는 게임 워크로드에 유용하게 사용됩니다.

게임 서버 계층

서버리스 매치메이커는 Amazon GameLift에 게임 세션 생성 요청을 보내고 이를 추적합니다. Amazon GameLift는 관리형 게임 서버 호스팅 서비스로 사용자가 생성한 게임 서버 빌드를 기반으로 플릿을 구성하고 GameLift API를 통해 게임 세션들을 관리하기 위한 Control Plane을 제공합니다. 이를 통해 사용자는 쉽게 세션 기반 게임 서버를 배포하고 확장 가능한 게임 서버 아키텍처를 구성하실 수 있습니다. 또한 Amazon GameLift에서는 ActiveGameSessions, CurrentPlayerSessions, AvailableGameSessions와 같은 게임 서버를 위한 지표들뿐 아니라 CPU Utilization, Network I/O와 같은 인프라 운영 지표까지도 기본적으로 제공합니다. 또한 게임 서버에서 발생하는 로그를 기본적으로 조회할 수 있도록 제공하기 때문에 운영에 있어서 많은 이점을 제공하고 있습니다.

Amazon GameLift의 관리형 매치메이킹 서비스인 FlexMatch 기능을 사용하면 Amazon GameLift는 매치 성공에 대한 이벤트를 Amazon CloudWatch Events 또는 Amazon SNS로 트리거하실 수 있습니다. 관리형 매치메이킹의 이점을 누리시면서 매치 완료에 대해 즉각적인 이벤트를 받아 게임 로직을 처리하실 수 있게 됩니다.
Amazon GameLift 의 Queue 기능을 이용하시면 여러 개의 플릿을 Queue의 목적지로 설정하여 최적화된 플레이어 경험을 제공할 수 있도록 게임 세션을 배치하실 수 있습니다. 또한, Amazon GameLift Queue에는 FleetIQ라는 알고리즘이 포함되어 있으며, 알고리즘을 통해 사용자는 스팟 인스턴스 중단 비율을 고려하여 플레이어의 세션을 배치할 수 있게 됩니다. 그리고 이 기능 덕분에 Amazon GameLift에서는 스팟 인스턴스의 활용도를 극대화할 수 있게 됩니다.

데이터베이스 계층

앞서 아키텍처 예시와 마찬가지로 Amazon GameLift의 플릿 내에 위치한 게임 세션에서는 데이터에 대한 처리를 Amazon SQS로 전송하실 수 있습니다. 이를 통해 데이터베이스 트랜잭션을 내구성 있는 메시지 큐에서 비동기 방식으로 데이터베이스에 업데이트하도록 구현하실 수가 있게 됩니다. 게임 서버 형태에 따라 Amazon DynamoDB와 같이 분산 환경에서 강력한 NoSQL 데이터베이스 또는 Amazon Aurora와 같은 클라우드에 최적화된 형태의 관계형 데이터베이스를 통해 Database I/O를 처리하실 수가 있습니다.

Amazon GameLift 기반의 아키텍처 구성 Tip

Amazon GameLift는 위의 아키텍처에서 말씀드린 Custom Server 이외에도 Realtime Server, FleetIQ 라는 독자적인 기능들을 추가로 제공합니다. GameLift가 제공하는 많은 이점을 동일하게 제공하지만, 다음과 같은 차이점이 있습니다.
Realtime Server는 경량화된 스크립트 기반의 게임 서버 배포를 지원하는데 특화되어 있습니다. 복잡한 게임 시뮬레이션보다는 경량화된 게임 서버를 만드는 데 초점을 맞추며 게임 서버 로직은 이벤트 방식으로 제어됩니다. 관련해서 자세한 사항은 다음 링크를 참고해보시기를 바랍니다.
FleetIQ는 Amazon GameLift의 기능들을 직접 호스팅하는 EC2 서버 위에서 작업하여 FleetIQ 알고리즘 기반으로 스팟 인스턴스의 사용을 최적화하는 기능입니다. 이를 통해 게임 서비스를 유연하게 호스팅하면서도 FleetIQ 알고리즘을 통해 스팟 중단 비율을 낮추어 비용 효율적으로 게임 서버를 호스팅하실 수 있습니다. 관련해서 자세한 사항은 다음 링크를 참고해보시기를 바랍니다.
게임 성격에 알맞은 서비스 기능을 활용하시면 Amazon GameLift는 여러분의 워크로드 개발, 운영 및 비용 관점의 효율화를 도와드릴 수 있습니다.

참고를 위한 샘플

Amazon GameLift 기반의 아키텍처 구성 및 코드 샘플이 필요하시다면 다음 공식 샘플 및 워크샵 자료들을 권고드립니다. 한국 게임 팀에서 직접 만든 샘플들로 최신 버전 유지를 위해 지속적으로 업데이트하고 있습니다.

마치며

이번 글에서는 일반적인 세션 기반 게임에 대한 모범 아키텍처를 알아보았습니다. 앞서 말씀드린 것처럼 상세한 구성은 실제 게임 구현 및 요구사항에 따라 조금씩 달라집니다. 하지만 본 블로그 기반으로 많은 게임의 사용 사례를 커버할 수 있기 때문에, 이 블로그가 여러분의 게임 서비스 구축에 있어서 첫 발걸음이 될 수 있기를 희망합니다.
보다 자세한 사항이 궁금하다면 AWS Game Master Online의 이전 세션을 참고해보시기를 권장해 드립니다. 또한 AWS에서는 고객 맞춤형 아키텍처 설계를 지원해드리고 있습니다. 추가적인 문의 사항이 있으시다면 언제든지 aws-gaming-korea@amazon.com으로 문의 부탁드립니다.

– 박진성, AWS 게임 솔루션즈 아키텍트

연재 목록

  1. 캐주얼 혹은 모바일 게임을 위한 비동기 웹기반 게임 아키텍처 알아보기
  2. 실시간 전략 시뮬레이션이나 대전 형식 게임을 위한 세션 기반 게임 아키텍처 알아보기
  3. 대규모 다중 사용자 온라인 게임(MMOG) 및 멀티리전 게임 아키텍처 패턴 살펴보기