서버 크래시, 타임 아웃, 랙(Lag) 현상 등 게임을 하다 보면 종종 에러 창이나 플레이에 곤란을 겪는 현상을 경험한다. 보통 우리는 이런 현상을 한마디로 '서버 문제'라고 말하는데 이런 문제는 왜 생기는 걸까? 어떻게 해결해야 할까?
배현직 넷텐션 기술최고책임자(CTO)가 지스타 2021 컨퍼런스를 통해 '더 안정적이고 빠른 게임 서버 개발 방법'에 대해 강연했다. 이번 강연은 ▲게임 서버 아키텍처에는 어떤 종류가 있는지 ▲게임 서비스를 오픈했을 때 서버에서 발생할 수 있는 문제 ▲서버 개발자들이 겪는 어려움은 무엇이 있는지 설명했다.
그리고 서버 문제로 어려움을 겪고 있을 게임사, 서버 개발자에게 도움을 줄 '프라우드넷 2'에 대해 소개했다. 또한 게임 서버 관리에 전문 지식이 없는 참관객을 위해 쉬운 비유를 더했다. 참고로 프라우드넷은 게임서버 '엔진'이라는 말을 만들 정도로 많은 게임에서 사용 중이다.
대표적으로 <마비노기 영웅전> 등의 PC 온라인게임을 비롯해 <세븐나이츠> 등의 모바일게임, 그리고 캡콤의 <스트리트파이터 5>에도 사용될 정도로 개발자들에게는 서버의 성능을 끌어올리는 필수적인 엔진으로 자리잡고 있을 정도. 넷텐션은 2017년 펄어비스에 인수되어 자회사가 되었다.
게임 서버 아키텍처는 크게 정해져 있진 않으나, 게임 장르나 유형별로 유사한 형태를 보인다. 가령 싱글 플레이 기반 RPG는 클라이언트가 로드 밸런서를 공유해 게임 서버 클러스터로 연결되고, 인메모리 캐시 클러스터와 데이터베이스에 정보가 구별되어 저장된다.
이보다 복잡한 MMORPG 장르는 다수의 존 서버가 추가로 구성된다. 인 게임 서버와 유사한 존1, 존2 서버가 배치되는 셈이다. 여기에 인 앱 결제, 로그인 통합 시스템 등 다른 시스템이 구성되면 서버 구조는 더욱 복잡해진다.
먼저 가장 치명적이지만, 빠르게 인지할 수 있는 문제는 '서버 크래시' 현상이다.
이를 방지하기 위해 게임사는 서버를 미리 테스트한다. 서버 테스트 커버리지는 ▲유닛 테스트 ▲사내 테스트 ▲봇 테스트 ▲소프트 런칭 네 가지 정도로 나뉜다.
아무리 철저한 테스트 과정을 거치더라도 서비스 시작 이후 발생하는 오류를 완벽히 방지하기는 힘들다. 가령 봇 테스트의 경우, AI는 사람과 다르다. 사람이 입력한 대로만 한다. 창의적인 시도를 하기 힘들다.
그렇기에 별도로 구성된 QA팀이 각종 창의적인 행위를 해 보고, 이를 봇 테스트 시나리오로 구축하기도 한다. 하지만 게임 론칭 후 QA팀에서 생각했던 영역을 넘어서는 행동이 금세 나타난다.
또한 클라이언트 문제와 달리 서버 문제는 각 서버에 할당된 클라이언트에 모두 영향을 미치며, 발생을 확인하기 힘들다. 디버거를 사용하기도 어렵다. 디버거를 붙이면 서버에 할당된 클라이언트는 일시 정지된다. 당장 문제가 생기는 것은 아니지만, 서버 프로그램을 고쳐 새로 적용한다면 모든 클라이언트를 재시작해야 한다.
수평 확장도 문제가 발생한다. 론칭한 게임들은 보통 수평 확장 방식을 통해 서버를 늘려나간다. 집으로 비유하면 단층 집에 층수를 쌓아가는 식이다. 그만큼 단일 서버보다 복잡해지고, 버그를 찾아내야 할 범위도 넓어진다. 수평 확장을 위한 설계를 고려하더라도, 이 설계가 역으로 과부하를 일으키기도 한다. 일종의 오버 엔지니어링이다.
가령 십자로 연결된 사슬을 생각해 보자. 사슬이 단단히 연결되어 있더라도, 가운데 연결된 사슬이 풀리면 나머지 사슬도 네 갈래로 풀려난다. 서버도 같다. 클러스터 하나의 문제가 전체로 퍼진다. 이는 '단일 실패 지점'이라 불린다.
따라서 단순함과 완벽함 사이에서 절충점을 잘 찾아야 한다.
이에 배현직 CTO는 서버 팀과의 의견 교환 중요성을 강조했다. 또한 앞서서 언급한 문제를 해결하는 데 도움을 줄 수 있는 툴 '프라우드넷 2'도 소개했다.
먼저 의견 교환의 중요성이다. 적절한 커뮤니케이션을 통해 서버 구조를 최대한 단순화하고, 설계에 대한 이유를 물어 불필요한 부분을 서버 팀이 자각하게 도와주는 것이 좋다. 콘텐츠의 상세한 내용과 세부적인 요구 조건으로 서버 팀이 무리하게 복잡한 서버 구조를 설계하지 않도록 할 수도 있다.
마지막으로, 넷텐션이 새롭게 개발한 서버 엔진 '프라우드넷 2'를 소개했다. 배현직 CTO는 수 년 동안 수백 개의 게임 서버 회사에 프라우드넷을 납품한 노하우를 바탕으로 프라우드넷 2를 개발했음을 밝혔다.
게임 서버 회사에 서버 프로그램을 납품하면서 알게 된 문제점은 서버 엔진을 잘 짜더라도, 콘텐츠를 새로이 추가했을 때 발생하는 문제 해결에 어려움을 겪는다는 것이다. 프라우드넷 2는 이런 문제를 해결하기 위해 만들어졌다. 원인을 빠르게 해결하고 조치할 수 있도록 돕는다.
가령 디버그 트레이서는 서버에서 디버깅을 해야하는 곳을 알 수 있도록 돕는다. 특정 지점이 실행될 때마다 로그를 남겨 당시 어떤 일이 있었는지 디버거 수준으로 상세히 알 수 있다. 즉, 서버를 멈추지 않고도 문제점을 찾을 수 있도록 돕는다는 것이 배현직 CTO의 설명이다.
서버 메모리 듀얼을 통해 메모리 내용을 상세히 표기해 주기도 한다. 최적화를 통해 라이브 서비스에 영향을 주지 않는 선에서 실시간으로 문제점을 찾을 수 있도록 했다. 성능 분석 기능을 통해 서버 프로그램내에서 어떤 부분이 처리 성능을 차지하는지 분석할 수도 있다. 크래시 리포트 기능도 포함되어 있어, 서버가 크래시나면 자동으로 서버를 재시작하며 어떤 부분에서 문제가 발생했는지 찾을 수 있도록 한다.
핫 리로드 기능도 포함되어 있다. 배현직 CTO는 이를 이용하면 동시 접속자를 유지한 상태에서 서버를 수정할 수 있다고 밝혔다. 또한 자동화 기능으로 전체 코딩의 약 80%을 자동화할 수 있도록 함으로써 실수에 민감한 서버 개발자들에게 도움을 줄 수 있다고 설명했다.
프라우드넷 2의 정식 출시일은 2021년 말에서 2022년 초로 예정되어 있다. 현재 베타 버전을 신청할 수 있으며, 정식 출시일까지는 무료로 제공될 예정이다. 배현직 CTO는 "수평 확장 서버 설계, 복잡한 서버 콘텐츠를 개발하더라도 발생한 문제를 해결할 수 있는 것"이 목표라고 밝혔다.