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

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

아이펀 엔진에서는 소스 코드를 공유하면서도 서버의 역할을 구분할 수 있는 《서버 Flavor》 기능을 지원합니다.

Flavor 를 나누게 되면 각 Flavor 별 설정파일인 MANIFEST.json 을 갖게 되고, 패키징할 때도 Flavor 별로 패키지를 생성할 수 있습니다. (게임 서버 패키징하기 를 참고하세요.)

그럼 hello_world-source/CMakeLists.txt 안에 Flavor 를 지정해 봅시다.

다음과 같은 내용을 추가합니다.

# 아래 내용은 이미 포함되어 있으나 주석처리되어 있습니다.
# 찾아서 다음과 같이 수정해 주세요.
set(APP_FLAVORS lobby game)

이제 새로 build 를 해봅니다.

$ make

$ tree -L 1
.
├── CMakeCache.txt
├── CMakeFiles
├── cmake_install.cmake
├── CPackConfig.cmake
├── CPack.DEBIAN
├── CPack.RPM
├── CPackSourceConfig.cmake
├── dumps
├── hello_world.game-launcher
├── hello_world.game-local
├── hello_world-launcher
├── hello_world.lobby-launcher
├── hello_world.lobby-local
├── hello_world-local
├── logs
├── Makefile
├── manifests
├── resources
├── src
├── symbols
└── VERSION.ignoreme

$ tree manifests/
manifests/
├── default
│   └── MANIFEST.json -> /home/jwlee/hello_world/hello_world-source/src/MANIFEST.json
├── game
│   └── MANIFEST.json -> /home/jwlee/hello_world/hello_world-source/src/MANIFEST.game.json
└── lobby
    └── MANIFEST.json -> /home/jwlee/hello_world/hello_world-source/src/MANIFEST.lobby.json

참고

파일 목록을 구조화해서 표현하기 위해 기본 내장되지 않는 tree 명령을 사용했습니다.

여러분은 ls 명령을 사용해서 파일 목록을 확인하시거나, $ sudo apt install tree 명령으로 설치해서 사용하실 수 있습니다.

기존에는 hello_world-localhello-world-launch 만이 있었으나 이제 Flavor 별로 파일이 생성된 것을 알 수 있습니다. 또한 MANIFEST.json 역시 Flavor 별로 생성된 것을 볼 수 있는데, 이것은 기존에 있던 MANIFEST.json 을 각각의 Flavor 로 복사한 것입니다.

게임 서버 내에서는 FLAGS_app_flavor 라는 gflag 변수로 Flavor 종류를 가져올 수 있습니다. 이를 통해 Flavor 마다 다른 메시지 핸들러를 등록하거나 Flavor 마다 다르게 동작하는 코드를 작성할 수 있습니다. Flavor 에 대한 자세한 설명은 레퍼런스 문서의 Flavor 항목 을 참고해주세요.