7. 게임 서버 패키징하기

게임 서버를 빌드하고 바이너리를 배포하는 것은 상당히 중요한 일입니다. 그러나, 그 과정에서 실수도 많이 일어납니다. 대부분의 실수는 파일을 빠트리거나, 어떤 것이 복사가 안되거나 하는 문제입니다. 따라서 서버를 배포하기 위해서는 패키지로 묶어서 배포하는 것이 바람직하고 이를 사람이 하는 것이 아니라 프로그램이 자동으로 하게 하는 것이 좋습니다.

아이펀 엔진은 이를 위해 서버 패키지를 자동으로 생성하고 버전을 부여하는 기능을 제공합니다.

7.1. 아이펀 엔진을 이용하여 서버 패키지 생성하기

아이펀 엔진의 서버는 빌드 디렉터리에서 make package 를 실행하면 자동으로 패키지로 묶어줍니다.

그리고 패키지 포맷도 Ubuntu 를 위한 .deb 파일 형태, Centos 를 위한 .rpm 형태, 그리고 Linux 의 일반적인 .tgz 형태 를 지원합니다. 원하는 패키징 형태를 hello_world-source/CMakeLists.txt 에 지정합니다. 우리는 Ubuntu 를 쓰고 있기 때문에 다음처럼 지정하겠습니다.

# Generate a distribution package in tgz?
set(WANT_TGZ_PACKAGE false)

# Generate a distribution package in Debian DEB?
set(WANT_DEB_PACKAGE true)

# Generate a distribution package in Redhat RPM?
set(WANT_RPM_PACKAGE false)

이제 make package 명령을 실행해 봅시다. 그러면 .deb 파일이 생성된 것을 알 수 있을 겁니다.

$ make package
Leveraging ccache. CCACHE=/usr/bin/ccache, CCACHE_DIR=, CCACHE_TEMPDIR=.
/tmp/hello_world-source/etc/upstart/default/hello_world.lobby not found. Skipping.
/tmp/hello_world-source/etc/upstart/init/hello_world.lobby.conf not found. Skipping.
/tmp/hello_world-source/etc/upstart/default/hello_world.game not found. Skipping.
/tmp/hello_world-source/etc/upstart/init/hello_world.game.conf not found. Skipping.
-- Configuring done
-- Generating done
-- Build files have been written to: /tmp/hello_world-build/debug
[ 16%] Built target internal_create_launchers
[ 25%] Built target internal_import_manifest_dirs
[ 33%] Built target internal_import_resource_dirs
[100%] Built target hello_world
Run CPack packaging tool...
CPack: Create package using DEB
CPack: Install projects
CPack: - Run preinstall target for: hello_world
CPack: - Install project: hello_world
CPack: -   Install component: game
CPack: -   Install component: lobby
CPack: Create package
CPackDeb: - Generating dependency list
CPackDeb: - Generating dependency list
CPack: - package: /tmp/hello_world-build/debug/hello-world_0.0.1_install-game.deb generated.
CPack: - package: /tmp/hello_world-build/debug/hello-world_0.0.1_install-lobby.deb generated.

$ ls *deb
hello-world_0.0.1_install.deb

만일 Flavor 를 지정하지 않았다면 .deb 확장자를 갖는 패키지 파일 하나만 생성되고, Flavor 를 지정한 경우는 Flavor 수만큼 파일을 생성합니다.

이제 이 파일들을 서버로 옮겨서 Ubuntudpkg 명령으로 게임 서버를 설치할 수 있습니다.

7.2. 게임 서버 패키지의 버전과 빌드번호

앞의 챕터에서 생성된 .deb 파일들은 버전 번호가 0.0.1 로 지정되어있습니다. 이 버전 번호가 어디서 나온 건지 궁금하실 수 있겠네요. 이 번호는 hello_world-source/VERSION 이라는 파일에 기재된 것을 사용합니다. 만일 0.0.2 로 고치고 다시 패키지를 만든다면 0.0.2 버전의 파일이 나올 겁니다.

버전은 보통 게임이 큰 업데이트를 겪을 때 올라가는 숫자입니다. 그렇기 때문에 여러분이 직접 판단하시고 VERSION 파일을 갱신해서 올려야됩니다. 그러나 또 한편으로는 매번 빌드를 할 때마다 빌드 번호를 붙이는 것이 편리합니다. 아이펀 엔진은 SVN 이나 GIT 으로 체크 아웃된 경우 SVN 리비전 번호나 GIT 커밋 ID 를 버전 뒤에 빌드 번호로 붙여줄 수 있습니다.

hello_world-source/CMakeLists.txt 에 다음 변수를 선택해서 true 로 수정하면 됩니다.

# Source managed by git can append a build number from git commit id.
set(PACKAGE_WITH_BUILD_NUMBER_FROM_GIT false)

# Source managed by svn can append a build number from svn info.
set(PACKAGE_WITH_BUILD_NUMBER_FROM_SVN false)

중요

위 내용은 SVN 이나 GIT 으로 체크아웃된 경우만 동작합니다.

만일 소스 디렉터리에 커밋되지 않은 내용이 있다면, 아이펀 엔진은 버전 스트링에 ~dirty 라는 문자열을 추가로 붙여줍니다. 예를 들면 0.0.1-1234~dirty 와 같은 형식으로 지정됩니다.