Tencent Cloud Resources

텐센트 클라우드의 다양한 소식과 기술 문서 및 정보를 확인하실 수 있습니다.

 

텐센트 클라우드와 게임 인프라 아키텍처

 

 

 

 

2부 실시간 온라인 게임 인프라 아키텍처 – 상

 

 

1. 개요

 

지난 1부에서, 실시간 온라인 게임 중에서, 지속형 게임과 세션형 게임에 대해서 알아 보았습니다.

 

지속형 게임의 경우, 한 서버 안에서 상점 거래나 채팅, 플레이가 모두 in-game안에서 처리되기 때문에, 서비스 서버가 세부적으로 구분되지 않습니다. 반면에 세션형 게임은 역할별로 서버를 구분하는 경우가 많습니다.

 

2부에서는 세션형 게임을 대상으로, 서버들이 실제로 인프라 관점에서 어떻게 세분화되고 구성되는지 살펴보겠습니다.

 

 

2. 세션형 게임 서버 인프라 아키텍처 구성

 

세션형 게임은 실시간 온라인 게임 중에서 가장 많은 형태의 게임입니다. 세션형 게임에 대해서 좀더 자세히 알아보겠습니다.

 

세션형 게임은 로비라는 가상의 공간에 사용자들이 모이면서부터 시작합니다. 로비는 게임에 참여하기 위해 기다리는 공간입니다. 매칭 시스템을 통해 같이 게임 할 플레이어 그룹이 결정되고, 실제 게임으로 이동하며, 정해진 시간만큼 게임을 플레이 합니다. 플레이를 마치면 플레이어들은 다시 로비로 이동하며, 게임 결과는 랭킹 서버에 업데이트 합니다. 게임의 시작과 끝이 존재하기 때문에 세션형 게임이라고 부릅니다.

 

아래 그림에서, ‘게임 세션’이 어떤 흐름으로 진행되는지 간략히 볼 수 있습니다.

 

 

 

아래 그림은, 세션형 게임을 구성하는 서비스 서버들의 구성도 사례 입니다. 세션형 게임 서버에는 어떤 종류들이 있는지, 또 어떤 아키텍처 요구사항이 있는지 간략하게 살펴보겠습니다.

 

 

 

2.1 로그인 서버

 

 로그인 서버는, 사용자 인증 정보를 입력 받고 인증한 후, 접근권한을 부여하는 역할을 담당합니다. 로그인을 완료한 이후에는 게임 서버 사이에 이동할 경우에도 인증 정보를 계속 유지할 수 있도록, 특별한 값(Token)을 부여하고, 서버측 cache에도 값을 저장 해 둡니다.

 

 사용자 인증 정보(Credential)로는 가장 기본적인 사용자ID와 패스워드가 있고, OTP(One Time Password)나 생체정보(지문 등)를 사용하기도 합니다. 보안을 강화하기 위해 두 가지 이상의 인증 정보를 함께 사용하는 것을 MFA(Multi Factor Authentication) 라고 부릅니다.

 

사용자 인증 정보는 복호화가 불가능한 방법(예: 일방향 해쉬)으로 처리하여 보관해야 하며, 내부 네트워크에 안전하게 보호하고 운영해야 합니다. 

 

너무 복잡한 가입 절차는 사용자 유입을 어렵게 하는 원인이기도 합니다. 대체로 보안을 강화하면 사용자 편의성이 떨어지는 경향이 있습니다. 최근에는 평소 사용하던 소셜 계정을 사용해서 편리하게 로그인할 수 있도록, 소셜 로그인 연동 기능도 많이 사용합니다.

 

 

2.2 게임 서버 Fleet

 

게임 서버 Fleet은 실제 실제 게임 플레이 상황을 처리합니다. 게임 세션을 생성하고, 플레이어들을 세션에 추가 합니다. 플레이어들 사이의 지연시간의 차이를 조정하고, 미리 정해진 알고리즘에 따라 최대한 공정한 게임을 유지할 수 있게 합니다. 게임에 참여한 각각의 플레이어로부터 게임 데이터를 수신하여 개발자가 코딩 한 기준대로 판정하고 검증 합니다. 그 후, 처리 결과를 다른 나머지 플레이어들에게 전달하고, 저장이 필요한 정보는 DB나 저장소에 저장합니다.

 

가장 높은 부하를 처리하기 때문에, 베어메탈 이나 Dedicated Host로 구성하기도 합니다. 위의 세션형 게임의 구성도에서, DS Group 으로 표시한 영역이 바로 Dedicated host로 구성된 게임 서버 Fleet 입니다.

 

게임 서버 Fleet은 고성능, 고가용성 시스템을 요구합니다. 높은 성능을 위해 여러 대의 Dedicated Host를 병렬로 배치합니다. 또한, 고가용성을 위해 분산 처리를 하고, 장애 서버를 pool에서 제거하는 방법으로 고가용성 요구사항을 충족합니다.

 

서버 Fleet 전체를 복수로 준비하는 경우도 있습니다. 장애 대비나 또는 글로벌 지역을 커버하기 위해서 복수의 서버팜을 구축할 수도 있습니다.

 

 

2.3 매칭 서버

 

세션형 게임에서는 함께 게임을 수행 할 플레이어들을 매칭하는 작업이 필요합니다. 매칭 서버가 플레이어들의 관계나 조건을 기반으로, 매칭을 처리합니다. 이것을 매치 메이킹(Match making)이라고 부르기도 합니다.

매칭 기준은 플레이어간 능력치나 레벨이 될 수도 있고, 지역적으로 가까운 것이 될 수도 있습니다. 더 재미있는 게임 경험을 제공하려면 매칭 기준을 다양하게 추가할 수 있도록 유연한 구조로 만드는 것이 좋습니다. 매칭이 완료되면, 매칭한 게임 플레이어 정보를 게임 서버에게 넘기고 게임 세션을 시작하게 합니다.

 

 

2.4 상점 서버

 

상점 서버는 플레이어가 아이템을 구매하는 상황들을 처리 합니다. 여기서는 플레이어 사이의 개인간 거래가 아니라, 서버가 개입하고 인증하는, 플레이어와 서버 사이의 거래를 말합니다. 아이템은 유료와 무료 아이템이 있고, 유료 아이템을 구매할 수 있도록 외부 결제 서버(PG:Payment Gateway)와 연동이 필요합니다. 아이템 거래 정보는 트랜잭션의 일관성을 보장해야 하고, 거래 정보의 저장 방법은 영속성과 무결성을 보장해야 합니다. 또한, 거래 정보는 로그 시스템에 안전하게 기록하고 보관해야 합니다.

 

 

2.5 로비 서버

 

로비는 게임에 접속한 사용자들이 가장 먼저 마주하는 가상의 장소입니다. 로비는 게이머들이 서로 모여서 대화하거나 소통하는 공간이기도 하고, 게임 내 다른 서비스들을 이용한 후에 되돌아오는 장소 입니다. 로비 서버는 플레이어들의 잦은 이동 상황을 처리합니다. 게임 안에서의 활동은 모두 로비서버 에서 출발하기 때문에, 중요도가 높은 서버입니다.

 

 

2.6 랭킹 서버

 

랭킹 서버는 플레이어들의 랭킹 정보를 실시간으로 정리하고, 랭킹 정보 조회 요청을 처리합니다. 랭킹 정보는 단순한 전체 유저들의 게임 내 랭킹 정보에서부터, 소셜 그룹 내에서 랭킹 관계나, 일정 기간(일별, 주별, 월별) 랭킹 정보들로 세분화 할 수 있습니다. 제공하려는 랭킹 정보 유형이 많아질 수록 시스템 구조는 복잡해지고 요구하는 성능은 높아집니다.

 

분리 가능한 아키텍처
게임이 특정 서비스에 종속되면, 일부 서버의 장애가 곧 전체 서비스 정지로 이어집니다. 중요도가 낮은 부수적인 서비스는 분리 가능하도록 아키텍처를 구성하는 것이 좋습니다.

예를 들어, 게임에서 가장 기본이 되는 인증서버와, 게임 플레이 서버, 매칭 서버들을 다른 서비스들의 장애로부터 독립적으로 운영 가능하도록, 아키텍처를 분리 구성하는 것이 좋습니다. 상대적으로 덜 중요한 서비스에 장애가 발생하더라도, 게임을 플레이 하기에 문제가 없도록 구성하는 것이 전체 게임 서비스 관점에서 더 좋은 방안입니다. 장애 발생을 100% 예방할 수는 없지만, 장애가 더 이상 전파되지 않는 아키텍처가 견고한 아키텍처 입니다.

 

 

 

수고하셨습니다. 여기까지 세션형 게임의 서비스 서버 종류에는 어떤 것들이 있는지 알아보았습니다.

다음 2부-하편에서는 게임 서비스를 구성하는 인프라 아키텍처에 대해 살펴보겠습니다.

 

 

기술 블로그 내용 중에 궁금한 점이 있다면, 질문하기를 통해 문의 해 주세요.

 

 

 

 

참고링크

    • 이 콘텐츠는 저작권법에 의해 보호받는 저작물로 메가존클라우드에 저작권이 있습니다.
    • 이 콘텐츠는 사전동의 없이 2차 가공 및 영리 목적으로의 이용을 금합니다.