NDC 마지막 날, GBI 센터에서 열린 강연은 바로 에이스톰의 백승민 개발자가 진행하는 '캐릭터 한 달에 하나씩 업데이트하기 : '최강의 군단' 스킬 개발 툴 포스트 모템과 차기작 '건파이트 맨션' 툴 프리뷰' 였다.

백승민 개발자는 과거 네오플에서 '던전앤파이터'와 '사이퍼즈' 등의 개발에 참여했으며, 현재는 에이스톰에서 '최강의군단' 개발 이후 신작 '건파이트맨션'를 담당하고 있다. 특히 '최강의군단'에서는 한 달에 캐릭터 하나 이상을 업데이트 하는 엄청난 개발 속도 중심에 있었던 핵심 개발자다.

이번 강연은 게임 속 캐릭터에게 주어지는 다양한 스킬들을 어떻게 더 효율적이고 개성있으며 능동적으로 개발 할 수 있는지에 대해서 다루었다. 특히 이런 스킬들을 만들기 위해 직접 만들었던 개발 툴 2가지를 비교 분석하며 개발 방식에 따라 장단점을 비교해 보여주기도 했다.

그가 말하는 개발 툴의 왕도, 한 번 전체 내용을 들어보자.

▲ 에이스톰 백승민 개발자





요즘 게임들은 모두 스킬이 필요하다. 많은 장르에서 스킬을 개발하게 되고, 물론 장르에 따라 필요로 하는 요소나 들어갈 수 있는 기능 등이 다르긴 하지만, 심지어 퍼즐 게임이라 하더라도 스킬이란 것이 필요한 시대다.


이런 다양한 스킬들을 어떻게 개발할까는 프로그래머의 과제다. 스킬 기획을 제한하지 않으면서, 빠르게 개발하는 것. 이를 위한 3가지 방식을 준비했고 각각을 비교해보려고 한다. 예시로 간단한 반격 스킬을 3가지 방법으로 만드는 과정을 설명하겠다.

먼저 간단히 스킬의 모식도를 만들 수 있겠다. 이 스킬의 과정을 이루는 노드들은 각각의 과정에서 사용하고, 변수를 파악해 다음 과정으로 넘어가고, 효과를 적용한다. 이 전체를 '스테이트 머신'이라고 하고, 캐릭터의 다양한 스테이트가 변화하는 과정이라고 해보자. 이 구조는 기본적으로 유지 된다. 그리고 이 스테이트 머신 안에 예시로 든 반격기 스킬이 하나의 스테이트로 들어가는데, 다시 그 반격기 스킬의 과정을 이루는 것들을 '서브 스테이트' 라고 지칭해보자.



■ 하드코딩

하드코딩은 간단하다. 스킬의 모든 로직을 직접 코딩으로 구현하는 것이다. 이럴 경우 기획자가 먼저 구상하고, 이를 프로그래머에게 설명해서 프로그래머가 구현하게 된다. 전체 스테이트 머신과 하위의 서브 스테이트까지 모두 코드로 직접 구현한다.


이 방식의 장점은 역시 저렴함이다. 시스템이나 툴을 구축하는 비용 없이 바로 코드로 만들어지기 때문에, 빠른 프로젝트나 프로토타입에 적합하다. 또 구현하는데 제한되는 기획의 한계가 없다. 하지만 그만큼 기능 수정을 할 때마다 코드를 직접 수정해야 하고, 잦은 수정으로 코드 안정성이 떨어지게 된다. 또 수정 하고나서 다시 컴파일하여 구현하고 확인하는 시간이 길어 비효율적이고, 콘텐츠 양이 늘어나면 곧 코드의 양이 정비례 해 늘어나기 때문에 유지보수 비용이 늘어난다.

결국 하드코딩으로 만들게 되면 시스템을 구축할 시간이 없어지기 때문에 계속 하드코딩을 하게 되는 굴레에 빠지게 된다. 그래서 개발 툴을 도입할 생각이라면 초창기부터 결정해야 한다.


하드코딩으로 개발할 때에는, 이런 스킬 간에 중복되는 부분, 코드를 최대한 줄이는게 관건이다. 모든 코드 안에서 공통적으로 들어가는 부분이 있기 마련이고, 이걸 공통 디렉토리로 빼내서 활용해야 한다. 그렇다면 이후에도 적은 작업으로 새 스킬을 추가하고 유지보수를 할 수 있다.


■ '최강의군단' 스킬 개발 툴 포스트모템


'최강의군단'을 개발하던 중에, 중간중간 엄청난 속도로 업데이트를 하던 때가 있었다. 2014년 말에서 2015년 중순까지 10여종이 넘는 캐릭터에 대한 추가와 수정, 뿐만 아니라 32종의 사이드킥을 추가한 때였다. 당시 인벤의 한 기사에서는 '말도 안되는 속도의 업데이트' 라고 표현할 정도였으니. 뿐만 아니라 한 캐릭터의 스킬 볼륨이 모두 굉장히 큰 편이다. 거기다 당시 개발팀에는 5~7명의 기획자가 있고 프로그래머는 한 명 뿐이었으니, 만약 하드코딩으로 만들었다면 과로사했을거다.


그래서 이런 개발 속도를 맞추기 위해서 개발툴을 만들어서 기획자들에게 제공했다. 기획자들이 직접 툴을 활용해 스킬을 만들고, 중간중간 기능 추가를 요청하면 개발자가 유지 보수를 했다. 언리얼3 툴 중에 하나에 영감을 받아서 비슷한 노드 구조에 그래픽 구현을 추가해 만들었다.

4가지 노드를 기본으로 했는데, 액션 노드, 스위치 노드, 변수 노드, 이벤트 노드였다. 변수 노드는 스위치 노드가 각각의 다음 노드로 이어지기 위한 조건을 제공했고, 이벤트 노드는 액션 노드가 작동할 때 함께 작동해 스킬을 발동시켰다.


그래서 이렇게 개발 툴을 도입한 성과는 다음과 같다.

프로그래머 입장에서는 하드코딩으로 작업할 때보다 훨씬 작업량이 줄어서, 야근이나 업데이트 시기의 밤샘이 많이 줄어들었다. 항상 업데이트 등에서는 개발의 가장 마지막 단에 있을수록 그 영향을 많이 받는데, 이 상황에서 탈출하자 그런 부담이 많이 줄었다. 또 기계적인 코딩보다는 유기적인, 생각하는 코딩을 하게 됐다,.


기획자 입장에서는 무엇보다 자신이 원하는 만큼, 제한 없이 스킬을 구현할 수 있다는 것이 큰 장점이었다. 보통은 기획자의 기획을 프로그래머가 이해하는데 커뮤니케이션이 필수적이고, 이게 문제가 없이 이뤄질 수가 없다. 물론 그 대신 기획자 스스로의 업무량이 다소 늘어나게 되는데, 재밌게도 대부분의 기획자는 업무가 조금 늘어나더라도 자신이 자유롭게 원하는대로 구현하는 쪽을 선호했다. 또 구현과 피드백을 통해 수정하는 사이클이 매우 빨랐다.

단점으로는, 아무래도 초반에는 기능이 너무 적고 보완하는 시간이 필요하기 때문에 시스템 구축에 시간과 비용이 든다. 또 툴 숙련도에 따라서 기획자들의 개발력에 차이가 있게 되고, 자신의 아이디어를 얼마나 구현하는 정도의 차이가 크다. 숙련자가 퇴사하게 되면 타격이 큰 편이고, 툴 관리 룰을 정립해서 기획자들 끼리 공유하는게 필요하다.


때문에 이런 스킬 개발 툴을 도입하려면 개발자가 직접 사용하면서 보완하는 시간이 필요하다. 이런저런 기능이 많이 필요한데, 미리 갖춰놓아야 한다. 또 기획자들에게 양질의 디버깅 툴을 제공해야 한다. 기획자가 의도하지 않은 실수를 기획자가 알아차리기 힘든데, 이를 빠르게 찾아내고 수정할 수 있는 툴이 있다면 효율적으로 개발하고 동시에 문제를 줄일 수 있다.

사람이 실수하는 부분은 의외로 비슷한데, 모르고 지나가는게 많다. 이를테면 무한 루프를 만들어버리거나 네트워크 패킷을 폭발시키는 경우는 알아차리기 힘들지만 매우 치명적인 문제다. 시스템적으로 알아차리고 경고해주어야 하고, 또 기능 자동화로 동시에 타이핑 등 실수가 생기는 부분을 줄여나가야 한다.


■ '건파이트맨션' 사용 스킬 개발 툴

현재 '건파이트맨션'은 언리얼4를 이용해 개발하고 있는 중이며, 아직 이 스킬 개발 툴은 현업에 적용하기 전 개발자만 시험적으로 사용하고 있는 중이다.


먼저 '건파이트맨션'에 '최강의군단'에서 사용한 스킬 개발 툴을 가져오지 않고 독자적인 스킬 툴을 구축하는 이유는, 먼저 엔진이 다르기 때문이다. 사용하는 코드 형태가 조금 달라서, 별도의 툴을 만들어야 했다.

언리얼4에는 블루프린트라는 스크립트가 있다. 간단히 설명하자면 코딩을 그래픽화 하는 것인데, 블루프린트는 코딩 툴이기 때문에 기본적으로 하드코딩과 비슷한 전체 구조를 가진다. 스킬 전체에 통용되는 공통 코드와 스킬 별 하위 코드 구조를 유지하면서.


문제는 그것이다. 블루프린트를 얼마나 넓게 적용할 것인가 하는 부분인데, 일반 하드코딩과 블루프린트의 차이에서 기인한다. 먼저 블루프린트는 컴파일 없이 결과물의 구현과 확인이 가능하고, 코드 자체의 안정성이 높아진다. 그러나 블루프린트는 구성이 늘어날 수록 기하급수적으로 복잡해지고, 때문에 일정 부분으로 나눠서 C++ 코딩과 병행했다.


'최강의군단'에 사용한 것과 블루프린트 기능을 비교해보자면, 일단 블루프린트는 함수 기반이기 때문에 하드코딩과 동일한 확장성과 자유도를 지닌다. 반면 '최강의군단'에 사용한 툴은 필요한 기능이 생길 때마다 별도로 구현해서 추가해줘야만 했다. 그렇지만 그만큼 블루프린트 쪽이 더 조작 난이도가 높다.

현재 회사 내에서 블루프린트 툴을 사용하는 사람이 한명 있는데, 바로 우리 대표님이다. 하지만 대표님은 프로그래머 출신이라서 일반적인 표본으로 참고하긴 어렵지 않을까 싶다.


■ 정리 - 좋은 툴 하나, 열 개발자 안부럽다


최종적으로 정리하자면, 기획자에게 적합한 개발 툴을 제공하는게 프로젝트가 클수록 유리하다. 개발자는 야근이 줄어들고, 기획자는 자신이 원하는 대로 만들 수 있고. 하지만 툴은 기본적으로 요구되는 성능이 많다. 자유도는 높아야 하고, 쓰기는 쉬워야 되고, 비용은 적게 들어야 하고, 이게 다 될 수가 없다. 결국 주어진 상황에 맞춰서 최선의 답을 찾는거다.

언리얼4 블루프린트가 시사하는 것은 이제 타이핑이 없어도 간단한 코딩은 가능하다는 것이다. 다른 엔진으로도 확대될 것이고, 기획자들도 프로그래밍 지식을 가지고 있는게 좋다.