게임 개발이란 굉장히 소모적인 작업이다. 일단 게임 어플리케이션을 만들어야 하고, 또 그 위에 컨텐츠까지 생산해내야 하기 때문이다.
일반적인 응용 어플리케이션 개발은 프로그램을 만들어서 사용자들이 컨텐츠를 생산해내는데 도움을 주는 것이 목적인 반면, 게임과 같은 엔터테인먼트 관련 개발은 프로그램은 물론 컨텐츠 생산까지 개발자가 다 하고 사용자는 오로지 그것들을 소비하기만 하기 때문이다.1
게임을 만드는 일에서 프로그래머가 해야 하는 일은 크게 두가지로 분류할 수 있다.
우선 첫번째로 외부 고객, 즉 유저들을 상대로 하는 부분들을 제작하는 일이다. 보통 바깥에서 보면 개발의 전부라고 생각할 수 있는 부분이다. 예를 들면 프로그램의 UI 작성, 내부 로직 작성 등이다.
그리고 앞서 이야기했던 게임 제작의 특성상 두번째 일이 추가된다. 즉, 내부의 고객(기획파트와 그 외 파트들)을 상대로 하는 부분들을 만드는 일이다. 예를 들면 새 캐릭터를 추가하는 캐릭터 에디터, 맵을 만드는 맵 에디터, 퀘스트를 작성하는 퀘스트 에디터, 몬스터를 추가하는 몹 에디터 등이 있을 것이다.
이러한 내부 고객용 프로그램의 경우 비 프로그래머가 사용하는 프로그램이긴 하지만, 굉장히 특정한 소수의 사람들만 사용하기 때문에 불특정 다수가 사용하는 게임처럼 자동 업데이트를 공들여 만드는 것은 약간 비효율적이다. 하지만 그렇다고 매 변경시마다 바이너리를 수동으로 배포하는 방식은 문제가 많다.
- 소스 변경시 개발자가 빌드해서 새 바이너리를 만든다.
- 이 바이너리를 사용자들이 접근할 수 있는 공간에 업로드 한다.
- 바이너리가 변경되었음을 사용자들에게 알린다.
- 사용자들은 새 바이너리가 릴리즈 된 것을 확인하고 다시 다운로드를 한다.
보다시피 이런 일련의 과정은 자동화가 되어 있지 않아서 위 과정 중 한 군데에서만 문제가 발생해도 제대로 작동하지 않는다. 그리고 바이너리의 버전 관리가 되지 않으므로 문제가 발생하면 원인을 파악하기 어렵다.
원활하고 신속한 게임 개발을 위해서는 내부툴들의 자동 업데이트 기능이 필수적이다. 하지만 앞서 이야기했듯이 이 자동 업데이트 기능은 게임 어플리케이션의 그것과는 달리 특정 소수의 인원만 사용하므로 게임 패처처럼 잘 만들 필요는 없다.
따라서 이 포스트의 초점은 쓸만한 자동 업데이트 기능을 간단하게 구현하는 것에 있다.
자동 업데이트 구현
이 방법의 핵심은 기존에 사용중인 SCM 을 활용하는 것이다.
이 포스트에서는 Subversion 을 사용한다.
우선 내부툴들의 바이너리를 올릴 소스 리파지터리 내의 디렉토리를 선택한다. 이왕이면 툴 소스를 컴파일 시 Release 버전 바이너리가 생성되는 디렉토리가 좋다. 그러면 개발자가 소스 변경 후 릴리즈 버전으로 빌드하면 파일 변경을 SVN 이 자동으로 감지하기 때문이다. 따라서 소스를 커밋할 때 바이너리도 잊지 않고 커밋하게 해준다.

위와 같은 폴더 구조를 만들고 proj/bin/tool 폴더는 기획 파트원들도 접근할 수 있게 권한을 주도록 한다. 섭버전의 경우 Path-Based Authorization 이 가능하기 때문에 소스 디렉토리는 보호할 수 있다.
그리고 아래와 같은 배치파일을 proj/bin/tool 폴더에 만들어 주도록 한다.
update.bat
@echo off TortoiseProc /command:update /path:"%~dp0" /closeonend:1 start %~n1
그리고 아래와 같은 내용으로 각 툴들과 같은 이름의 배치파일들을 생성해 준다. 파일 이름만 다르고 내용들은 전부 동일하다.
map_editor.bat, quest_editor.bat, …
@echo off call update.bat %0
그러면 아래와 같은 파일 구성이 된다.

map_editor.bat 와 quest_editor.bat 는 둘 다 동일한 내용의 배치 파일이다. 그리고 새 툴이 추가되면 기존의 *_editor.bat 를 복사해서 파일 이름만 새 툴 이름으로 변경해주면 된다.
그리고 위 파일들을 전부 섭버전에 커밋한다.
위 과정이 다 끝나면 툴을 사용하는 모든 사용자들의 컴퓨터에 TortoiseSVN 을 설치하고 proj/bin/tool 경로를 체크아웃 한다.
그리고 앞으로는 맵 에디터를 실행할 때, map_editor.exe 를 실행하지 말고 map_editor.bat 를 실행해서 툴을 실행하도록 한다. 쉽게는 툴 바로가기를 map_editor.bat 로 바꾸면 된다.
그러면 모든 과정이 끝나게 된다.
앞으로 변경된 바이너리를 프로그래머가 섭버전에 커밋하게 되면 그 이후에 툴을 map_editor.bat 등으로 실행하는 사용자들은 자동으로 TortoiseSVN 을 실행해서 바이너리를 업데이트 하고 나서 실행하게 된다.
따라서 앞으로 툴 수정시 개발자가 할 일은
- 소스 변경시 빌드를 해서 소스와 바이너리를 같이 커밋한다.
로 한가지 단계로 줄어들게 된다.

우리 개발툴이 달라졌어요!
적용해보시고 개선해야 할 점이나 피드백이 있으시면 리플 달아주시면 감사하겠습니다.
- 그래서 현실 세계에서는 UCC 나 MOD 같은 개념들이 등장하고 있다. [↩]

This work, unless otherwise expressly stated, is licensed under a Creative Commons Attribution-Noncommercial-Share Alike 2.0 Korea License.
관련된 포스트들
Tags: Game, Programming, Subversion


4 comments
Comments feed for this article
Trackback link: http://j.strane.net/wp/archives/219/trackback