ㅁ게임의 엔진변경
사실 이 게임은 게임 일을 시작하기 전부터 플레이 하고 있었습니다. 그 시대에는 오픈 베타를 하면서 매일 두 시간 동안만 플레이 할 수 있었는데 플레이 시간을 다 사용한 다음에도 여전히 사람들과 게임 안에서 채팅하고 소셜 액션을 하고 모닥불 주변에 둘러 앉아 음식을 나눠 먹는 경험이 좋아 시간 제한이 끝나도 게임을 끝내고 싶지 않았습니다. 그런데 게임은 퍼시스턴트 월드에 있으면 시간 제한이 적용되어 게임이 종료됐지만 던전 안에 있으면 이 제한을 받지 않았는데 던전을 플레이 하다가 중간에 제한시간이 끝나 억울하게 게임이 종료되는 경험을 하지 않도록 만들기 위함인 것 같습니다.
아는 사람들끼리 던전에 들어가 쭉 플레이 해서 보스룸에 도착한 다음 보스룸을 클리어 하고 보상을 받지 않으면 던전이 종료되지 않아 던전 안에 계속해서 남아있을 수 있었습니다. 사람들과 이야기를 나눌 거면 보스까지 갈 필요도 없었지만 던전 입구와 너무 가까이 있으면 재단에 같은 아이템을 내려놓고 들어온 다른 사람들로부터 방해를 받을 수 있었기 때문에 던전 끝까지 가야 했습니다.
게임 웹사이트의 게시판에 운영자 아이콘을 달고 글을 올리는 개발자 분들이 너무 멋있어 보여서 나도 저 팀에서 일하고 싶다는 생각을 했는데 생각대로 잘 풀리지는 않았습니다. 마지막 아르바이트가 파멸적인 가난과 함께 끝나고 당시에 널리 플레이 되던 다른 MMO 게임을 만들었던 회사의 신작 팀에 지원했는데 그 팀에 가기로 확정하고 채용 건강검진을 받고 돌아오는 길에 던전 안에 모닥불을 피워 놓고 음식을 나눠 먹으며 이야기를 나누던 그 게임 팀에서 연락을 받았습니다. 지하철 개찰구를 나서며 이미 다른 회사에 가기로 확정되었다고 말한 다음 전화를 끊으며 이게 과연 잘 하는 짓인지 한참을 고민해봤는데 이미 벌어진 일을 어떻게 할 수 없었습니다. 그리고 시간이 흘렀습니다.
관심을 끊고 지낸 오랜 세월 사이에 어느 게임이든 그렇듯 그 게임 역시 많은 변화를 겪었고 아직도 서비스가 유지되고 있는데 최근에 한 발표에서 이 게임이 이제 엔진 교체를 공지한 모양입니다. 생각해보니 어느새 이 게임을 유지해 온 여러 환경이 너무 먼 과거에 만들어져 그동안 유지보수 되어 왔다 하더라도 도저히 어쩔 수 없는 근본적인 뭔가는 오랜 세월 이전의 모습을 유지하고 있을 것 같다는 생각이 듭니다.
다른 한편으로는 현대에 그 환경에 기반해 계속해서 서비스를 진행해 나가는데는 여러 가지 문제점이 있었을 테고 이를 해결하는데 한계가 있어 엔진 교체라는 대단한 결정을 하게 됐을 것 같습니다. 하지만 엔진 교체는 그리 만만한 일은 아닐 것 같아 대단한 결정이면서도 다른 한편으로는 걱정도 되는데 오늘은 개발 중인 프로젝트의 개발환경을 완전히 바꾸는 결정을 한 다음에 일어났던 일을 소개하겠습니다.
언리얼 4 이전 시대에는 언리얼 엔진이 가정한 게임 형태와 우리들이 개발하고자 한 게임 형태가 상당히 달라 고생했습니다. 처음부터 언리얼 엔진은 FPS 게임인 ‘언리얼’을 개발하기 위해 구축한 환경이었는데 개발환경 곳곳에서 FPS를 만들기 위한 흔적이 뚜렷하게 눈에 띄었습니다. 그런데 우리들의 요구사항은 당시 언리얼 기준으로는 거대한 레벨(맵)에 당시 FPS 게임에서는 고려하기 쉽지 않은 많은 수의 사람이 한번에 나와야 했고 이들이 FPS 게임에 비해 훨씬 다양한 애니메이션과 이펙트를 표시해야 했으며 중앙 서버에 의해 완전히 동기화 되어야 했고 사람들 각각은 서로 다른 복장과 무기를 들고 있어 이들을 구성하는 에셋은 서로 아주 달랐습니다. 그래서 어떤 팀에서는 엔진을 마개조해 심리스 월드를 지원하도록 수정하기도 하고 또 다른 팀은 엔진의 기능 대부분을 들어내고 거의 그래픽 요소만 남긴 채 나머지 인하우스 개발환경을 직접 구축하는 선택을 하기도 했습니다.
우리들도 한번은 FPS를 고려한 언리얼 2.x 시대에 우리 요구사항을 엔진이 예상한 형태로 바꾸는데 실패하고 엔진 상에서 우리 요구사항에 부합하지 않는 모든 부분을 제거하기로 결정했는데 결과는 그리 성공적이지 않았습니다. 상당 기간 동안 개발이 거의 멈췄고 엔진을 뜯어내는 작업은 종료 시점이나 종료 시점의 모습을 예측할 수도 없었습니다. 지금에 와서 생각해 보면 이는 기술 부족 또는 미들웨어 선택 실패라고 할 수 있을 것 같은데 그 때는 엔진에서 필요 없는 부분들을 들어내고 나면 다시 개발을 진행할 수 있으리라 순진하게 생각했습니다. 이 작업은 결국 실패했고 상당한 기간과 비용을 낭비했으며 팀 전체의 사기에도 영향을 끼쳐 이후 인력이 교체되는데까지 영향을 끼칩니다.
한번은 회사에서 인수한 다른 회사가 성공적으로 MMO 게임을 개발하는데 사용했던 엔진에 기반해 개발을 시작했는데 이번에는 MMO 개발을 염두하고 만든 개발환경이어서 나쁘지 않다고 생각했지만 개발을 진행해 보니 그들이 만든 환경은 3인칭 시점이었고 우리고 만들던 것은 아이소메트릭 시점이었습니다. 이 차이를 그리 깊이 염두해 두지 않고 시작한 개발은 특히 서버 환경에서 여러 문제를 일으켰는데 기획에서 요구한 특별한 연출은 MMO 게임의 기반인 퍼시스턴트 월드와 인스턴스 월드 사이에 구분을 모호하게 만들었고 당시에는 이런 시도 자체가 받아들여지기 어려웠습니다. 또 서버에 의해 제어되는 다양한 던전 메커닉을 제어하는데 어려움을 겪었는데 이런 문제가 쌓이자 기술 부서에서는 서버 환경을 대대적으로 고쳐 우리들의 요구사항을 우리가 스스로 만들 수 있는 환경을 바닥부터 구축해 주기로 합니다.
지난번에는 클라이언트에 의해 개발 전체가 정지되었다면 이번에는 서버에 의해 개발 전체가 정지되었는데 지난번과 다른 점은 이번에는 적어도 결과물이 나오기는 했다는 점입니다. 기존에 다른 회사에서 사용하던 스크립트 기반의 개발환경 대신 데이터 기반의 개발환경이 만들어졌고 이걸로 기초적인 수준의 서버에 의해 제어되는 던전 메커닉을 만들 수는 있었습니다. 하지만 바닥부터 재 구축 된 서버와 인하우스 툴은 만족스럽게 동작하지 않았고 유지보수는 훌륭하지 않았습니다. 팀을 떠난 다음 오랜 시간이 흘러 이야기를 들어 보니 결국 상용 환경으로 기반을 완전히 교체했다고 합니다. 이번에는 잘 되었기를 바랍니다.
또 한번은 이미 런칭한 게임의 모바일 버전을 개발하는데 참여했는데 이번에는 초기 의사결정에 실패했습니다. 런칭한 게임은 언리얼 3 기반으로 개발되었는데 우리들은 언리얼 4 기반으로 개발하기로 합니다. 그런데 개발 목표가 같은 IP에 기반한 같은 장르의 다른 게임인지 아니면 같은 게임을 새 개발환경으로 포팅하는 것인지 리더십 사이에 의견이 갈렸습니다. 처음에는 같은 IP 기반으로 이미 런칭한 게임 대부분의 컨텐츠를 가져오되 같은 시스템을 사용하지 않고 같은 동작을 하도록 우리가 다시 개발하는 일종의 리버스 엔지니어링 같은 절차를 통해 개발하기로 합니다.
이 기반 위에 우리가 생각하는 성장 모델과 경쟁 모델을 얹고 있었는데 이런 결정을 내린 리더십은 끝내 경영진을 설득하는데 실패했고 개발은 모호한 상태로 포팅한 결과물처럼 보이면서도 핵심 시스템은 새로운 플랫폼에 기반하고 있고 또 같은 메커닉을 포팅하는 대신 리버스 엔지니어링에 가깝게 개발해 비용은 많이 드는 기괴한 물건이 튀어나옵니다. 개발을 진행하는 상황에서 이미 라이브 중인 게임에는 새로운 컨텐츠가 추가되고 시스템이 바뀌고 있었는데 우리가 리버스 엔지니어링 비슷한 과정을 통해 개발했던 시스템이 라이브에서는 효과적이지 못한 것으로 판명되어 버려지는 사이에 우리들도 멀쩡히 개발했던 시스템을 폐기해야 했고 여기서 나온 에셋을 어떻게 재활용 해야 할 지 결정하는데 쓸데없이 시간을 낭비해야 했습니다.
직접 겪은 일은 아니지만 언리얼 3에 기반해 개발한 어떤 MMO 게임을 콘솔로 이식한 사례를 들었는데 앞에서 설명했듯 그 시대의 언리얼 엔진은 MMO 게임을 개발하는데 적합하지 않았고 엔진은 완전히 마개조 되어 엔진 제조사에서 제공하는 멀티플랫폼 지원의 도움을 거의 받을 수가 없었습니다. 그래서 사실상 제조사로부터 지원이 끊긴 오래된 엔진을 게임 개발사 스스로가 마개조된 상태 그대로 콘솔 플랫폼을 지원하도록 하는 거의 엔진 개발에 가까운 개발을 수행했습니다. 엄청난 난이도를 결국 돌파해 완성했지만 그 작업을 아무도 다시 하고 싶은 것 같지는 않았다고 합니다.
이런 사례들로부터 어쩌면 제 첫 직장이 되었을 가능성이 아예 없지는 않았던 그 게임의 엔진 변경 발표는 여러 가지 걱정을 하게 만듭니다. 물론 엔진을 바꿀 수밖에 없는 상황을 이해할 수 있습니다. 2023년 여름 현재 자체 엔진에 기반한 개발 환경은 인력 시장에서 큰 단점으로 작용할 수도 있습니다. 경력이 꽤 있지만 인력을 채용하는 우리들 입장에서 같은 경력이라면 우리들이 사용하는 상용 환경을 다뤄본 분들을 선호하게 됩니다. 또 구직하는 입장에서도 외부에 공개된 정보가 거의 없는 인하우스 환경에서 개발하는 팀을 선택하기에는 위험성이 있습니다. 그래서 앞으로 서비스를 계속할 작정이라면 오직 구인만을 위해서라도 엔진을 바꿔야 할 겁니다.
이야기한 사례 중에서 이미 서비스 중인 게임을 리버스 엔지니어링과 비슷한 과정을 통해 개발할 때 우리의 개발 스타일과 서비스 중인 게임의 개발 스타일이 달라 어려움을 겪기도 했습니다. 가령 그분들과 우리는 데이터를 작성하는 스타일이 달랐고 자동화에 요구하는 수준도 달랐습니다. 또 우리가 리버스 엔지니어링을 통해 짐작한 동작은 한동안은 똑같아 보였지만 업데이트가 반복되어 감에 따라 기반부터 완전히 달랐다는 사실이 나중에서야 밝혀지며 이런 상황을 수습하는데 어려움을 겪어야 했습니다.
또 게임의 개발 방향이 ‘포팅’ 또는 ‘초월이식’ 등으로 완전히 확정되지 않은 상태에서 엔진 교체 개발을 시도하면 누군가 욕심을 가진 사람들이 끼어들어 그동안 묵혀 놨던 기능을 꾸역꾸역 교체 과정에 밀어 넣으려고 할 수 있는데 이런 시도를 받아들이거나 그렇지 않거나를 확실히 정하지 않으면 개발은 포팅이 아닌 신작 개발처럼 되어 버립니다. 그러면 원작의 제한을 그대로 이어 받은 상태에서 신작을 개발하는 난이도는 훨씬 높고 눈높이도 이미 오랜 기간 서비스 한 게임에 맞춰져 있는 상태에서 처음부터 완전한 개발 결과를 내야 하는 상황에 처할 수도 있고 또 원작과 철학이 다른 기능을 겉으로는 같은 동작을 하게 만들었다가 철학의 차이를 나중에서야 발견해 심각한 낭비를 겪을 수도 있습니다.
개인적으로 이 계획을 응원하고 또 이 계획이 성공해 지금 위에 적은 이전에 경험한 여러 상황들이 그냥 우리가 못해서 그런 걸로 말할 수 있기를 바라고 있습니다. 또 한편으로는 어쩌면 개찰구에 교통카드를 찍고 나오며 받던 전화를 끊던 그 순간에 다른 결정을 내렸다면 지금은 또 굉장히 다른 경험들을 했을 텐데 그 순간의 결정에 여러 가지 고민을 하게 만든 바로 그 게임이 앞으로도 계속해서 서비스 되었으면 합니다.
결론. 클라이언트든 서버든 개발환경을 통째로 교체하는 건 장난 아니게 위험한 결정입니다. 그런 결정을 내릴 수밖에 없는 상황 속에서 여러 어려움이 예상되지만 훌륭하게 성공해서 업계에 큰 사례로 기록되기를 간절히 바랍니다.