애니팡4 개발이야기
8월부터 다시 시작된 COVID-19 대유행으로 사회적 거리두기가 강화되었습니다.
선데이토즈는 모든 임직원들의 건강을 위해 전면 재택 근무를 시행하고 있습니다.
그에 따라 온라인을 통해 업무 공유나 대화를 하고 있죠. 가끔은 함께 애니팡4 로얄을 즐기며 휴식을 취하기도 한답니다.
그래서 오늘은 애니팡4 실시간 대전 및 채팅 개발에 대해 소개하고자 합니다.
애니팡4의 시작
지금까지의 애니팡 시리즈와 비교했을 때 애니팡4의 가장 큰 차이점은 바로 20명의 유저가 함께 플레이하며 경쟁하는 애니팡 로얄과 게임 내에서 유저들끼리 상호작용할 수 있는 팸 시스템입니다.
최초의 애니팡에서도 점수와 랭킹을 통해 유저들이 서로 경쟁하며 게임을 즐길 수 있었습니다.
단순히 달성 점수만으로 순위를 매기는 간단한 방식이었지만요.
지금은 당시와 비교해서 통신 인프라나 기술, 그리고 게임 기획적으로도 많은 발전이 있었습니다.
PC나 콘솔 환경에서 구동하는 하드 코어 게임 뿐만 아니라 모바일 환경, 캐쥬얼 장르 게임에서도 유저들이 실시간으로 플레이를 주고 받는 게임이 더욱 많아졌습니다. 마치 테트리스 99 처럼요.
단순히 점수로만 경쟁하는 것이 아니라 게임 플레이 자체로 경쟁하는 시대가 된 것이죠.
사례 연구 및 프로토타이핑
이미 모바일 캐쥬얼 게임 시장에도 실시간 베이스 게임은 여럿 서비스 되고 있었습니다.
선데이토즈에서는 페이스북 인스턴트 게임으로 3매치 1:1 실시간 대전을 서비스 하기도 했었고, 게임잼과 사이드 프로젝트 지원 정책을 통해 실시간 베이스 게임들이 몇몇 개발되어 있기도 했습니다. (차후 꼭 소개하도록 하겠습니다.)
하지만 여러 플레이어들이 한꺼번에 모여 3매치로 대전을 하는 사례는 찾을 수 없었죠. 그래서 처음부터 하나씩 만들어 가야 했습니다.
게임을 만드는 데 있어서 가장 중요한 것은 이게 과연 재미있을까? 하고 끊임없이 물어보는 것이죠. 그를 위해선 새로운 아이디어를 제안하고, 구현하고, 경험하고, 피드백하는 과정이 필수적입니다.
때마침 선데이토즈에는 직원 역량 강화를 위해 사내 스터디 지원 정책이 복지로 제공되고 있었습니다.
선데이토즈 사내 스터디 지원 정책은 스터디 결과물을 사내에 공유하는 조건으로 스터디 참여자들을 지원하는 사내 복지 정책입니다. 주제 및 인원에는 제한이 없으며 결과물은 스터디 결과 보고서 혹은 사내 세미나로 전체 공유됩니다.
덕분에 소속 팀을 불문하고 서버/클라이언트 개발자와 기획자들이 모여 3매치 실시간 대전과 채팅에 대한 기획, 구현에 대해 많은 의견을 나누었고, 프로토 타입을 만들어 실제로 플레이 해보면서 게임을 발전시킬 수 있었습니다.
그 결과 지금의 로얄 시스템이 완성된 것이죠.
실시간 서버 구성
모든 서버는 저장 장치 혹은 연산 장치의 한계로 동시 접속자의 수가 제한적입니다. 그래서 모든 유저를 항상 실시간 서버에 연결해 둘 수 없습니다.
실제로 애니팡4에서도 항상 모든 플레이어들을 서버에 수용하고 있진 않습니다. 로얄을 플레이하거나 패밀리 채팅을 하는 등, 실시간 통신이 필요할 때에만 서버에 접속 시켰다가 더 이상 실시간 통신이 필요없어질 때에는 자연스레 연결을 해제하고 있습니다.
하지만 만약 한번에 많은 플레이어가 채팅이나 로얄 플레이에 몰린다면 여전히 서버가 셧다운될 수 있습니다. 그래서 실시간 게임 서버와 채팅 서버를 분리하였습니다.
기능 별로 실시간 서버를 나누어 플레이어들이 하나의 서버에 몰리는 위험을 방지했습니다.
AWS에서는 설정에 따라 서버의 용량을 자동으로 늘려주는 Auto Scaling을 지원합니다. 하지만 만약 플레이어의 수에 따라 실시간 서버의 수가 동적으로 증가한다면 더욱 쾌적하게 서버를 운용할 수 있겠죠.
동일한 환경의 서버를 동적으로 런칭하기 위해서 AWS에 Kubernetes를 적용하여 실시간 서버가 추가로 필요할 때마다 컨테이너 단위로 서버를 생성하게 설정하였습니다.
만약 클라이언트에서 유저가 로얄을 플레이하려고 한다면 먼저 가용한 서버 리스트를 내려줍니다. 만약 한번에 플레이어가 많이 몰려서 서버가 다수 생성되었다면 서버 리스트도 여러 개 내려오겠죠.
그 중 하나를 선택해서 접속하는 것으로 서버의 대기 시간이나 랙 없이 쾌적한 게임을 즐 길 수 있게 되었습니다.
속도 개선
로얄을 플레이하는 중에는 시간을 회복하거나, 상대방을 공격하는 등 유저의 동작에 따라 비정기적으로 소켓을 통해 서버와 통신합니다. 이 데이터들을 통해 서버에서 유저의 시간이 증감하고 그에 따라 랭킹이 결정됩니다.
통신 속도를 개선하기 위해선 데이터의 용량을 줄이고 파싱 시간을 줄여야 합니다.
애니팡4에서는 MessagePack을 사용하여 실시간 통신 데이터를 최적화 하였습니다.
MessagePack을 사용하면 데이터를 더 쉽고 저렴하게 교환할 수 있습니다. 심지어 서로 다른 언어에서도요.
MessagePack을 통해 유니티의 C#과 서버의 JS 사이에서 오가는 데이터를 이진 직렬화하여 용량 및 파싱 비용을 줄였습니다.
애니팡4는 캐쥬얼 퍼즐 게임이기 때문에 다른 하드코어 실시간 게임에 비해 상대적으로 통신량이 많지 않은 편입니다. 그럼에도 데이터 사이즈의 최적화를 통해 쾌적한 게임 경험 뿐만 아니라 유저들의 데이터 사용량도 줄일 수 있었습니다.
맺음말
통신 인프라와 기술의 발전으로 모바일 환경에서의 실시간 게임 플레이는 이미 하나의 흐름이 되었습니다. PC에서 콘솔, 그리고 모바일에서 캐쥬얼 장르에 이르기까지 플레이어들을 하나의 경험으로 이어주는 게임들이 속속 출시되고 있죠.
그리고 적시에 이 흐름에 뛰어들기 위해선 나름의 준비와 경험이 필요합니다.
선데이토즈는 스터디 모임, 사내 세미나, 사이드 프로젝트 지원 등을 통해 다양한 직군이 함께 모여 도전하고 경험을 쌓으며 성장하는 것을 돕고 있습니다.
애니팡4의 실시간 대전과 채팅 역시 이런 지원 속에서 태어난 결과물이죠.
지금도 선데이토즈에서는 많은 선토인들이 새로운 도전을 위해 열심히 달리고 있답니다.
더욱 재미있는 게임을 만들기 위한 모든 선토인들의 노력을 응원합니다!