brunch

You can make anything
by writing

C.S.Lewis

by 이기곤 Apr 21. 2019

0x01. 게임 서버 프레임워크 기능 명세 1

게임 명세 다루기

지난 글에서는 게임 서버 프레임워크를 만들게 된 계기와, Rust를 언어로 사용하는 이유에 대해 설명했다. 이번에는 모바일 게임 서버에서 쓰는 공통적인 기능들을 나열하고 명세로 정리하는 작업을 하려 한다.

앞 글에서 이야기했지만 두서가 없고 당장 생각나는 것들 것만 정리했기 때문에 먼저 설명했다고 해서 우선순위가 높은 건 아니다.


1. 메시지 통신 기능


서버 프레임워크라면 당연히 클라이언트와 메시지를 주고받는 기능이 필요하다. 메시지 타입은 편의성 또는 성능을 고려해야 하므로 2가지를 지원할 계획이다.


A.     HTTP + JSON (Restful API)

B.     TCP + Flatbuffers


FlatBuffers 라이브러리는 여러 데이터들을 바이너리 데이터로 직렬화를 할 때 사용한다. 아직 사용해보지 않았지만, 여러 테스트 결과에서 Protobuf보다 나은 성능을 보여주어 이번에 써보려 한다.

[그림 2] FlatBuffers vs Protobuf 비교(출처: https://github.com/google/flatbuffers/issues/4372)


2.  인증 및 계정 관리 기능


모바일 게임은 자체적으로 회원 가입을 받는 경우가 거의 없다. 안드로이드의 경우 구글 플레이게임과 페이스북 계정을 사용할 수 있게 하고, iOS 같은 경우는 페이스북만 지원하는 경우도 있다.

각 플랫폼들은 고유한 ID를 제공하기 때문에 플랫폼 이름과 ID를 조합하면 고유한 ID를 보장할 수 있을 것이다. 프레임워크에서는 이 ID를 기반으로 자신 또는 다른 사람의 게임 데이터에 접근할 수 있어야 할 것이다.


3.  게임 로직 관리 기능


사용자가 게임에 접속한 다음 인증까지 끝내면, 자신이 원하는 컨텐츠를 즐길 것이다. 이 때 프레임워크는 컨텐츠에 맞는 게임 로직을 효율적으로 실행할 수 있는 인터페이스를 제공해야 한다.

로직 관리 기능은 멀티스레드 프로그래밍을 가장 잘 활용해야 할 것이다. 아직 어떤 방향으로 할지는 감이 잘 오지 않지만, Rust가 제공하는 오너쉽(Ownership) 아키텍처 때문에 제약을 받는 건 아닌지 걱정이 된다.


4.  케릭터와 아이템 정의 기능


케릭터와 아이템은 게임의 컨텐츠를 만드는 데 가장 중요한 요소들이다. 프레임워크에서 두 요소를 미리 정의할 수는 없겠지만, 프레임워크에서 쉽게 사용할 수 있게 정의하는 건 가능할 것이다.


5.  랜덤 박스 관련 기능


모바일 게임에서 발생하는 대부분의 수익은 랜덤 박스다. 도박이 아닌가 싶을 정도로 낮은 확률로 아이템을 제공하는 경우도 많다. 그래서 아이템 드랍을 결정하는 랜덤 함수, 그리고 드랍 테이블을 만드는 기능을 제공하면 좋을 것이다.


6.  재화 관리 기능


모바일 게임은 꽤 많은 종류의 재화를 사용한다. 랜덤 박스처럼 확률이 정해진 아이템을 사는 데 쓸 재화도 있는가 하면, 확정적으로 무언가를 얻을 수 있는 재화도 있다. 그리고 컨텐츠를 소비하는 데 필요한 재화도 여러 종류가 있다. 이에 대해서는 재화 관련 기능을 만들 때 살펴볼 것이다.


7.  우편함과 캠페인(이벤트) 관리 기능


우편함은 재화나 아이템을 받기 위해 사용하는 공간이다. 운영 팀에서 사용할 수 있는 API로 특정 아이템이나 재화를 모든 사용자, 또는 특정 사용자에게 줄 수 있다면 편리할 것이다.

캠페인은 2주 정도의 짧은 기간동안 진행하는 이벤트라 보면 된다. 보통은 특정 캠페인이 진행 중일 때만 사용할 수 있는 특별한 아이템이나 재화가 있고, 그에 따른 보상도 있다. 때로는 이 보상이 한정적이기도 하다. 캠페인은 짧은 주기로 시행하는 곳도 있고, 특별한 날(설, 크리스마스, 할로윈 등)에만 진행하는 케이스도 있을 것이다.


8.  리더보드 기능


캠페인, 또는 결투장을 진행할 때는 반드시 등수를 매겨야 한다. 등수를 매기는 방법은 동점자를 처리하는 방법에 따라 나뉠 수 있지만 게임을 진행하는 데 큰 영향은 없는 것 같다.


9. 결제 관리 기능


6번의 재화 관리 기능과 밀접하게 연관된 기능이다. 게임에서 발생하는 모든 결제 내역을 관리하고 검증하는 기능이 필요하다. 또한 환불에 대한 처리(아이템 회수)도 지원할 수 있어야 한다.


10. 업적 관리 기능


업적이란 사용자가 무언가를 달성했을 때, 그 내용을 알려주는 시스템이다. 월드 오브 워크래프트에서 업적을 처음 도입했을 때는 업적을 달성했다는 것 말고는 별다른 보상이 없었지만, 오늘날에는 업적의 난이도에 따라 적절한 보상을 주는 추세다.

모바일 게임에서는 초기화되지 않는 업적 외에도 일일, 주간, 월간 등 기간 별로 초기화되는 형태의 업적도 존재한다. 보통 이러한 형태의 업적을 “일일 퀘스트” 라 부르기도 한다.


다음 글에서 다룰 것들


이번 글에서는 게임 컨텐츠와 관련된 기능들만 다뤘으므로 다음 글에서는 시스템과 관련된 기능들을 간단히 살펴볼 것이다.


게임 컨텐츠들을 안정적으로 제공하려면 일관성을 제공하는 시스템 관련 기능들이 반드시 필요하다. 예를 들면 디버깅 및 운영을 위한 프로파일링 기능, 수평적으로 확장하는 데 필요한 기능이나 해시 함수, 시간 제어, 기획 데이터(csv, JSON) 지원, 다국어 지원 등 해야 할 게 산더미같이 있을 것이다.


브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari