게임 개발 동아리에서 다양한 경력의 친구들과 일하기

Posted on June 28, 2016 by 주형
Tags: 게임개발

각자 자기 파트만 작업하기 vs 공유하면서 작업하기

게임 개발 동아리에서 프로그래밍을 하면서 다양한 개발 수준의 친구들과 함께 일했습니다. 프로그래밍을 처음 시작하여 필요한 유니티 기능만 공부한 뒤 게임을 만드는 친구도 있습니다. 프로그래밍 덕후 친구들도 있습니다. 이 친구들은 언어나 툴의 세부 기능까지도 공부하고 써보는 걸 좋아하죠(저도 이 부류에 속합니다.)

이런 다양한 사람들과 함께 일할 때 가장 간단한 일 분배 방식은 기능별로 분리하는 겁니다. 팀원 A는 전투 시스템을 구현합니다. 팀원 B는 UI를 구현합니다. 팀원 C는 애니메이션이나 이펙트를 집어 넣습니다. 이렇게 나누면 각자 충돌하지 않고 자신의 영역 안에서 제일 편한 방식으로 게임을 개발할 수 있죠.

하지만 저는 위 방식보다 각자 구조의 틀만 구현한 뒤 서로 파트를 바꾸어서 구현하는 방식을 선호합니다. 친구 A가 전투 시스템의 기초를 구현했다면 그 뒤 B가 구현안 UI 구조에서 UI를 몇개 추가하는 작업을 해보고, B 역시 UI구현의 기초를 잡아둔 뒤 애니메이션이나 이펙트 작업을 하는 방식이죠.

이렇게 작업을 공유하는 방식을 쓰면 기능별 개발 속도는 줄어듭니다. 각자 다른 사람이 이해할 수 있게 코드를 짜야하고, 서로 구현한 것을 공유하면서 시간이 들어가게 되죠. 상대방이 짠 코드를 잘못 이해하고 구현하면 버그가 나오기도 쉽습니다.

하지만 프로젝트의 중후반에 가면 큰 장점이 생깁니다. 후반에 전투시스템쪽 기획이 추가되어서 전투쪽에만 일이 넘쳐도 쉽게 여러 프로그래머를 투입할 수 있습니다. 또한 버그가 발생해도 다른 프로그래머가 고칠 수 있죠. UI쪽 프로그래머가 갑작스럽게 해외여행을 갈 수도 있고, 군대로 사라져버릴 수도 있습니다. 그 사이에 UI코드에서 치명적인 버그가 발생해도 프로젝트의 진행이 막히지 않습니다. 다른 프로그래머도 그 코드를 알고 있거든요. 프로젝트의 관리의 측면에서 훨씬 안정적인 운영이 가능해집니다.

어떻게 공유할까

프로그래머가 서로의 작업물을 공유하는 건 어렵습니다. 어떤 친구는 컴포넌트에 for문 if문만을 사용하는 것 만으로 게임을 만들 수도 있습니다. 어떤 친구는 LINQ나 event 를 빠삭하게 알고 잘 사용할 수도 있죠. 세련된 디자인 패턴을 사용할 수도 있습니다. 이렇게 섞여있는 경우(흔하게 발생했습니다.) 프로그래밍 지식이 적은 친구는 고급 문법들에 대해서 프로젝트가 끝날 때까지 이해 하기 힘듭니다. 그 개념들을 전부 공부해서 돌아올 때 쯤이면 프로젝트 기한이 끝나있겠죠.

이 문제를 해결하는 데엔 여러가지 방법이 있겠지만 저는 낮은 수준의 프로그래밍 경력에 맞추는 걸 선호합니다. LINQ 대신 for/if를 사용합니다. 멋진 클래스 구조 대신에 코드를 중복시킵니다. plain class object 대신 Monobehaviour를 사용합니다. 새로운 기술, 멋진 기술을 쓰고싶어하는 프로그래머에게는 안타깝지만 팀의 안정성을 위해서 선택했습니다.

대신 조금 더 어려운 기술을 쓰고싶어하는 프로그래머들이 있다면, 기술 세션을 열어서 문제를 해결했습니다. 데스위시 프로젝트를 진행할 때 5명의 프로그래머들이 있었고 기술 수준이 매우 다양했습니다. 서로의 수준을 맞추기 위한 하나의 방안으로 5분에서 30분 정도 되는 발표세션을 가졌습니다. 다른 팀의 프로그래머분들도 참여해서 2달 동안 20회 넘는 발표가 있었습니다. 프로그래밍이 덜 익숙한 친구가 잘 모르는 문법에 대해서 발표했습니다. 좀 더 많이 알고 있는 프로그래머가 발표를 통해 지식을 공유하고 프로젝트에 적용하기도 했습니다.

결론

데스위시때 지금 이 생각을 가지고 서로의 코드를 최대한 공유하기 위해 노력했습니다. 결과는 상상처럼 완벽하진 않았습니다. 공유하려는 노력을 많이 해도 역시 다른 사람의 코드를 읽는 건 어려운 일이었습니다. 프로그래밍 작업물의 공유에는 관리 비용이 꽤 많이 발생하는데 프로젝트 마지막 2주에는 시간이 부족해 포기한 부분이 많습니다. 하지만 코드 공유 덕분에 프로젝트를 진행하면서 버그들이 빨리 발견되었고, 플젝 초반부터 끝까지 큰 막힘 없이 게임이 구현되었다고 생각합니다.

프로젝트를 어떻게 진행할 지는 팀마다 상황마다 다릅니다. 저처럼 팀의 안정성을 중요시 하는 분이라면 프로그래머들의 코드 공유는 고려해볼만합니다.