5. Flavor 기능을 이용해 서버 기능 분리하기

많은 경우 게임 서비스를 구성하기 위해서 다양한 역할의 서버가 존재햐야될 수 있습니다. 예를 들어, 로비 서버, 게임 서버, 채팅 서버처럼 말입니다. 이들을 각각 다른 프로젝트로 만들 수도 있지만, 이는 코드 관리에서 상당히 불리합니다.

iFun Engine 에서는 소스 코드를 공유하되, 이런 역할별 구분을 “서버 flavor” 로 지원하고 있습니다. 각 Flavor 는 독자적으로 설정파일인 MANIFEST.json 을 갖게 되고, 패키징할 때도 별도의 패키지로 묶이게 됩니다. (게임 서버 패키징하기 를 참고하세요.)

hello_world-source/CMakeLists.txt 안에 flavor 를 지정해 봅시다. 다음과 같은 내용을 추가합니다.

# 아래 줄을 추가합니다.
set(APP_FLAVORS lobby game)

...

# 아래 내용은 원래 들어있는 내용입니다. 윗 줄은 이 include 이전에 나와야됩니다
set(CMAKE_MODULE_PATH "/usr/share/funapi/cmake")
include(Funapi)

이제 새로 build 를 해봅니다.

$ make

$ ls *local *launcher
hello_world-launcher*  hello_world-local*  hello_world.game-launcher*  hello_world.game-local*  hello_world.lobby-launcher*  hello_world.lobby-local*

$ ls ../../hello_world-source/src/MANIFEST.*
../../hello_world-source/src/MANIFEST.game.json  ../../hello_world-source/src/MANIFEST.json  ../../hello_world-source/src/MANIFEST.lobby.json

기존에는 hello_world-localhello-world-launch 만이 있었으나 이제 flavor 별로 파일이 생성된 것을 알 수 있습니다. 또한 기존 MANIFEST.json 을 복사해서 각 flavor 별로 MANIFEST.json 이 생성된 것도 보실 수 있을 겁니다.

참고

게임 서버 내에서는 FLAGS_app_flavor 라는 구글 플래그로 flavor 종류를 확인하실 수 있습니다. 이를 통해 flavor 별로 특정 패킷 핸들러를 등록하거나 특정 방식으로 동작하게 하는 일을 할 수 있습니다. Flavor 에 대한 자세한 설명은 레퍼런스 문서의 Flavor 항목 을 참고해주세요.