유저들의 모든 행동을 추적할 수 있도록 로그를 남기는 한국 게임사와 달리 중국 게임사들은 로그 정보에 대해 소홀하다. 하루에 수 기가바이트가 쌓이는 로그를 저장할 여력도 없으며, 이를 다시 확인하는 작업도 사실상 불가능하다. 결제오류로 환불을 받기 어려운 이유 중 하나다.
<탑 오브 탱커>(중국명 마스터탱커2) 서비스를 앞둔 넥슨은 이 사실을 알고 난감해졌다. 개발사에서는 유저 로그를 게임서버에만 저장하고 있었다. 운영툴에서 써야 할 API를 받더라도 로그 조회가 사실상 불가능한 것이다. 엎친 데 덮친 격으로 중국에서 사용한 API는 구조가 달라 운영툴에서 사용할 수 없었다. 넥슨은 이난관을 어떻게 극복했을까? 넥슨에서 운영툴을 개발한 문소은, 송화영 개발자가 그 노하우를 공개했다. /디스이즈게임 송예원 기자
■ 넥슨이 가진 통합 운영툴이란?
캐시로 아이템을 샀는데 인벤토리에 들어오지 않았다는 유저의 문의를 받았다. 개발사는 해당 유저 이용현황 로그를 조회하고, 사실이 확인되면 아이템을 넣어준다. 개발자가 할 수 있는 일을 프로그래밍을 모르는 운영자는 어떻게 진행할 수 있을까? 이런 과정을 위한 '운영툴' 덕분이다.
'아이템 드랍률 2배', '경험치 2배'와 같은 온타임 이벤트나 커뮤니티 등에서 특정유저를 대상으로 대량 아이템을 지급하는 것도 마찬가지다. 개발자가 직접 한다면 인력 리소스 낭비는 물론 사고 발생 위험도 높아지기 때문에 대다수 게임사에서 별도의 운영툴을 만들어 관리한다. 국내에서 가장 많은 게임을 서비스하고 있는 넥슨도 마찬가지다.
온라인게임의 경우 개발 기간도 길뿐더러 라이프 사이클이 길기 때문에 게임별 운영툴을 개발하는 것이 일반적이다. 그러나 개발기간이나 라이프사이클이 짧은 모바일게임의 경우 개별 운영툴 개발은 사실상 무리다. 게임 퀄리티 향상에 집중해야 할 개발자가 운영툴 개발에 투입되는 것 자체가 낭비가 되기 때문이다.
넥슨은 개발사의 부담을 덜기 위해 자체 모바일 통합 운영툴을 개발했다. 개발사에서 현황조회, 로그 조회, 데이터 수정, 이벤트, 대량처리 등의 통일된 인터페이스의 API를 제공만 하면 넥슨은 운영툴을 통해 가입 유저를 관리하고, 이들의 권한을 관리하고, 이력 로그에 따라 CS를 처리하거나 대량 처리가 필요한 이벤트를 진행하는 방식이다.
수많은 게임사 API를 운영툴 서버가 보내면 과부하가 일어나기 마련이다. 다시 말해 특정 게임에서 대량 이벤트라도 진행하게 되면 다른 게임에 영향을 미칠 수도 있다. 넥슨은 게이트웨이 서버를 따로 두어 게임과 운영툴간의 결합을 느슨하게 만들어 그 영향을 감소시켰다.
■ 로그 파일이 없다? 중국 게임의 문제
<탑 오브 탱커> 서비스가 확정됐을 당시 넥슨은 기존 방식의 운영툴을 사용할 수 있을 거라고 예상했다. <탑 오브 탱커> 역시 퍼블리셔를 통해 원활하게 운영하고 있었기 때문에 API만 받으면 된다고 생각했기 때문이다.
그러나 예상은 빗나갔다. 우선 중국 퍼블리셔가 사용하고 있는 API의 구조가 달라 넥슨 통합 운영툴에서 활용할 수 없었다. 더 큰 문제는 중국에서는 유저간 로그 기록을 중요시하지 않아 API에 로그 파일이 존재하지 않는다는 점이었다. 심지어 로그 파일은 게임 서버에 존재하는 구조였다. 별도로 로그 파일을 들여다 보려면 게임 서버에 영향을 미칠 수 있는 상황이었다.
결국 넥슨은 중국 게임 서비스를 위한 별도의 운영툴을 개발하기로 결정했다.
■ ‘해결법은 추가 서버구축’ 로그파일 활용을 위한 해결법
먼저 로그 문제부터 해결해야 했다. 첫 번째 아이디어는 별도의 미들웨어 서버 구축이었다. 게임 서버와 게이트웨어 서버가 직접 만나지 않고 미들웨어 서버를 통해 로그파일을 접근하는 방식이다. 그러나 성능 이슈가 발생했다. 유저가 많아지고 활동이 활발해지는 만큼 로그는 대량으로 쌓였고, 미들웨어 서버가 게임서버에 부화를 주는 위험이 있었다.
그래서 별도의 로그파일 서버를 추가했다. 게임서버에서 로그파일을 바로 읽는 방식이 아니라 아예 로그파일을 일괄로 다운로드 받아 따로 저장할 수 있는 서버를 만들었다. 문제는 용량이었다. 스토리지 용량이 쌓이면 로그파일 서버를 계속 늘려야만 했다. 저장 안정성도 염려됐다. 넥슨은 AWS S3를 마련해 로그 파일을 따로 저장했다.
■ API 호환성 문제 해결법
API 호환 문제는 보다 복잡했다. 중국 퍼블리셔 운영툴의 Restful API는 형식이 달라 넥슨의 운영툴에 붙일 수 없었다. 론칭을 앞두고 있어 다시 개발하는 것은 무리였다. Pasing도 마찬가지였다. 아이템 정보도 문제였다. 중국에서는 아이템 코드로만 정보를 주고 받고 있었다. 운영자의 원활한 운영을 위해서는 아이템 명이 노출하는 방식이 필요했다. 더구나 이벤트에 필요한 대량 처리기능도 없었다.
중국의 Pasing은 여러 건의 데이터를 페이지 단위로 제공한다. 처음 한 번 호출하면 페이지 건수가 나오고, 한 페이지만 데이터가 보이는 방식이다. 운영팀에서는 원하는 개수만큼 한 페이지에서 볼 수 있도록 페이지 구분없이 전체 내용이 보이는 것을 바랐다. 따라서 넥슨 개발팀은 미들웨어 서버를 활용해 API Call을 통해 전체 페이지 건수를 가져오고, 전체 페이지 건수만큼 API Call을 하도록 만들었다.
아이템 목록 등의 메타 데이터는 파일 형태로 아이템 정보가 올 때마다 파징(Parsing) 후 데이터를 매팽하여 운영툴로 전달했다. 대량 처리의 경우 개발사와 운영자가 원하는 최대건수로 직접 파일 업로드하는 방식으로 협의했다. 이렇게 원활하게 <탑 오브 탱커>의 운영툴을 만들었고, 이는 후에 다른 중국게임을 서비스하는데도 활용할 수 있었다.
■ “문서화는 필수” 중국 게임 운영툴 구축의 TIP
물론 중국 운영툴 구축이 원활했던 것만은 아니다. 촉박한 일정 속에서 파트너사의 도움을 받았음에도 불구하고 문화적, 환경적 차이가 있어 어려움을 겪어야만 했다.
중국의 게임사는 담당자가 세분화돼 있다. 덕분에 담당자는 많지만 총괄자가 없는 경우가 많다. 심지어 담당자 교체도 빈번하다. 시스템 전체 구조를 파악하는 것부터 시간을 많이 소요될 수 밖에 없다. 문소은 개발자는 "제일 먼저 구조를 파악하고 이를 꼭 문서화로 남겨두라"고 조언했다.
앞서 언급했듯 중국은 로그 조회에 대한 니즈가 없다. 그는 "로그 조회 기능이 포함됐는지, 그리고 향후 가능한지 미리 협의하는 것이 좋다"고 말했다.