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-local
과 hello-world-launch
만이 있었으나 이제
Flavor 별로 파일이 생성된 것을 알 수 있습니다.
또한 MANIFEST.json
역시 Flavor 별로 생성된 것을 볼 수 있는데, 이것은 기존에 있던
MANIFEST.json
을 각각의 Flavor 로 복사한 것입니다.
팁
게임 서버 내에서는 FLAGS_app_flavor
라는 gflag 변수로 Flavor 종류를 가져올 수 있습니다.
이를 통해 Flavor 마다 다른 메시지 핸들러를 등록하거나 Flavor 마다 다르게 동작하는 코드를 작성할 수 있습니다.
Flavor 에 대한 자세한 설명은 레퍼런스 문서의 Flavor 항목 을 참고해주세요.