rejin 아바타

서브컬처 게이머

세상의 모든 아름다운 것들을 위하여

gi9s8rwcfcb41

‘동심원 개발’로 일정 위험을 최소화하며 게임 만들기

00501948 20180803 jpg
꺼지지 않는 불은 누군가의 생명력이 연소되고 있음을 보여준다.
사진: NCSOFT 건물
ⓒ’경향신문’, (링크)

들어가는 글

게임 개발은 즐겁고 환상적인 일이지만, 항상 주위에는 언제 터져나올지 모르는 잠재적인 위험이 도사리고 있다.

어떤 종류의 위험은 계획해놓았던 ‘일정’을 완전히 망가뜨리는데, 쉽게 말하자면 ‘야근’이나 ‘주출’을 하게 만들기도 한다.

일정에 관한 리스크 헷지 프로세스가 제대로 작동하지 않는 조직은 이러한 ‘잠재적인 위험’이 이미 만성화되어있을 수 있다.

한마디로, 일정을 늘릴 수도 없고, 사람을 늘릴 수도 없어, 초과근무 외에는 방법이 없는 빠져나갈 수 없는 상황이다.

혹시 그런 상황을 한 번이라도 마주한 적이 있으신 분이라면 ‘동심원 개발’에 관심을 가져보시는 걸 권한다.


동심원 개발이란?


동심원 개발(concentric development)이란, 기초 메커닉을 먼저 다져놓은 뒤 2, 3차 메커닉을 구현하는 계층적 사고 방법론이다.

다시 말해,

중심(코어)를 먼저 다져놓고, 그 다음에 중심을 지지하는 요소로 확장해나가는 개발을 의미한다.

24년 현재 JAZZ VenturePartners를 공동 창립해 경영하고 있는 존 스피날레(John Spinale)가 2002년 주창한 개념으로, 게임 제작에 대한 건강한 접근 방식을 고민하고 내놓은 나름의 해답 중 하나라고 볼 수 있다.

사실 이 개념이 탄생하기 이전에도 이미 ‘탄탄한 개발력’을 가진 회사에서는 이미 이렇게 개발하고 있었을 것이다. 그러나 이 개념을 용어로 정리하고 설명하고자 시도한 것은 이 시기로 추정된다.

동심원 개발 표지
‘성채 개발’과 유사점이 많다. 가운데의 견고한 성채 요새(기초 매커닉)를 기준으로,
성벽과 기반 시설, 망루 등(2, 3차 매커닉)이 점차 발전해 나간다.
Alexey Astankov, ‘castle evolution’, https://www.artstation.com/artwork/Ao5lX

동심원 개발은 기본적으로 ‘애자일 모델’에 근간을 둔 개념이다.

그래서 폭포수 모델과 애자일 모델 양쪽의 특징을 어느 정도 가지고 있다. 폭포수 모델과 애자일 모델 어느쪽에 가깝냐하면 ‘애자일 철학’에 조금 더 가깝다.

먼저, 폭포수 모델과 동심원 개발을 비교해보자.

폭포수 모델에서는 분석 -> 설계 -> 구현 -> 테스트 순으로 하나의 단계가 끝나면 아예 다음 단계로 시프트(단계의 전환)가 일어난다. 예를 들어, 폭포수 모델에 따라서 자동차를 만든다고 하면 바퀴 -> 차 프레임 -> 유리 -> 핸들 순으로 개발된다.

동심원 개발에서는 완전한 ‘바퀴’를 하나 만들기 전에, ‘굴러갈 수 있는 무언가’를 만드는 식이다. 아직 바퀴라고 부를 수 있는 무언가는 아니지만, 프레임과 연결했을 때 굴러는 간다. 이게 바로 ‘기초 매커닉’이다.

mvp fail 1 min jpg
애자일을 설명하는 가장 대표적인 그림.
단계는 4단계가 아니라 5단계가 필요할 수 있지만, 어느 단계에 머무르든 ‘달릴 수 있다’.

이 기초 매커닉은 기능적으로는 완전하다. (굴러는 간다.) 하지만 그게 전부다. 바퀴로 비유하자면, 타이어가 없어서 지면과의 마찰을 줄일 방법도 없고 브레이크가 없어서 원하는 지점에서 멈추지도 못한다. 여기서 말하는 ‘타이어’와 ‘브레이크’가 바로 2차, 3차 매커닉에 해당한다.

그렇다면 ‘동심원 모델’ = ‘애자일 모델’인가 하면 반드시 그렇다고 볼 수는 없다.

동심원 모델은 애자일의 ‘빠른 반복과 빠른 실패’라는 철학과는 조금 거리가 멀다. 탄탄한 기초를 먼저 쌓는데 집중해야하기 때문에 초반 개발 단계에서는 오히려 개발 속도가 느릴 수 있다.

기초 매커닉


image
한때는 게임이 아니라고 취급받았던 비주얼 노벨도 점차 풍성한 화면 연출에 더불어 진화하고 있다.
ⓒ헤븐 번즈 레드

첫 순서는 ‘기초 매커닉’의 구현이다. 동심원 개발에서는 탄탄한 기초 매커닉을 먼저 구축한 뒤, 2차, 3차 매커닉을 구현한다.

기초 매커닉은 게임 플레이의 근간을 이루는 규칙이다. 플레이어가 자주 상호작용하거나 게임 플레이를 위해 반드시 필요한 기본적인 틀에 해당하는 요소들이다. 게임의 핵심 경험 요소라고 부르기에는 민망하지만, 그 경험 요소를 만들기 위해 선행적으로 필요한 것들이라고 볼 수 있다.

아직 감이 오지 않는다면 3C를 먼저 떠올려보자. 3C란, 게임의 기본적인 경험을 만들어내는 핵심 요소 3가지(캐릭터, 카메라, 컨트롤)을 말한다. 3가지이므로 복수형으로 -s를 붙여 3Cs라고도 부른다.

예를 들어, 비주얼 노벨을 만들기 위해서 필요한 기초 매커닉을 세 개 꼽아보겠다.

  • 캐릭터: 스토리의 주인공들의 2D 포트레이트가 씬에 등장하는 기능이 필요하다.
  • 카메라: 캐릭터, 배경, UI 등 한 눈에 볼 수 있는 2D Dialogue Scene 화면이 필요하다.
  • 컨트롤: 터치했을 때 다음 대사로 넘어갈 수 있는 기능과, 유저 편의성 기능(세이브, 로드 등)이 필요하다.

위 기능들은 기본 중의 기본이지만, 위의 기능이 있어야 더 참신한 기능들(예: 선택지, 화면 연출 등)을 구현할 수 있다.

동심원 개발의 철학은 프로토타입을 제작할 때처럼 이러한 기본 매커닉을 그냥 끼워맞추지 않는다는 점이다. 그 대신 우리는 이러한 기본 매커닉이 완성되고 다듬어질 때까지 충분한 시간을 들여서 작업한다. 즉 완성된 아트, 애니메이션, 음향 효과, 시각 효과를 만들고 이를 좋은 게임 디자인과 코드로 함께 엮어내는 것이다.

– 160p, 리차드 드마샹, ‘재미있는 게임 제작 프로세스’

캐릭터가 등장하는 기능의 경우, 단순히 캐릭터가 ‘뿅’ 등장하고 ‘뿅’ 사라지는 기능을 만드는 거로 끝내서는 안 된다. 캐릭터 등장 전후의 페이드 연출이나, 연출과 함께 붙을 사운드(걸음 소리 등)도 함께 개발해야 한다.캐릭터는 특정 좌표(예: 0,0)에서 생성될 수 있으나, 화면 좌측이나 우측에서 뛰어 들어오듯 생성되거나 반대로 사라질 수 있어야 한다. 캐릭터가 등장할 때의 색상도 알파값(불투명도)이 100 -> 0으로 조정되는 시간이 0.2초인지 1초인지 정해져야 한다.

카메라와 컨트롤의 개발도 마찬가지이다. 베이직에 해당하는 요소들이 디테일하고 탄탄하게 구현될수록, 이후에 개발하는 2차, 3차 개발 요소들이 안정적으로 기존의 토대 위에서 성립할 수 있다.

2차, 3차 매커닉


image 1 edited
189054dd7d71062d4 jpeg

일부 서브컬처 게임에서는 기반 시스템(기초 매커닉)을 탄탄하게 다져놓은 뒤, 이벤트적 성격으로 즐거움을 주는 다양한 시도(2, 3차 매커닉)를 하고 있다.
좌) 블루 아카이브, 우) 에버 소울

기초 매커닉이라는 이름의 요새를 충분히 탄탄하게 만들어 놓았다면, 이제는 그 바탕 위에 멋진 지붕이나 망루를 올릴 때다.

2차, 3차 매커닉은 아직 ‘경험 목표’를 달성하지 못한 기초 매커닉의 취약점을 보완한다.

예를 들어, 기초 매카닉이 ‘굴러가기는 하는 자동차’를 만들었다면, 이제는 ‘냉난방기가 나오는 자동차’로 만들어야 한다.

궁극적인 목표는 당연히 ‘가족 모두가 편안한 여행을 즐길 수 있는 자동차’를 만드는 것이다.

궁극적인 목표를 달성하기에는 3차 매커닉 정도로는 아직 부족할 수 있다.

그렇다. 사실 2차, 3차 매커닉은 속임수다. 우리의 앞에는 끝이 보이지 않는 n차 매커닉이 필요할 수 있다.

하지만 핵심은 간단하다. ‘베이직’을 먼저 안정적인 수준으로 만들고 나서, 그 다음 매커닉을 만드는 것이다.

다음 매커닉으로 무엇을 개발해야할지, 그리고 우선순위는 어떻게 설정해야할지 혼란스러울 수 있다.

앞서 게임 디자인 아이디에이션 단계 또는 프리 프로덕션 단계에서 ‘경험 목표’를 설정했다면 이야기는 간단하다.

경험 목표에 대해 더 알고싶으신 분은 아래의 링크를 읽어보시는 것도 도움이 된다.

(링크)

‘경험 목표’를 달성하기 위한 방향으로 다음 매커닉 개발 우선순위를 결정하면 된다.

처음 목표로 삼았던 게 ‘미소녀 캐릭터를 터치할 때, 가슴을 터치하면 부끄러워하는 애니를 보여주자!’라고 가정하자.

일단 터치 시스템이 잘 동작하면 그 다음은 상호작용 시스템을, 상호작용 시스템이 잘 동작하면 그 다음에는 모션&보이스 시스템이 동작하게 구성해야 한다.

이렇게 단계별로 매커닉을 개발하다보면, 언젠가는 ‘경험 목표를 100% 달성하는 구간’에 다다른다. 이때 비로소 게임이 ‘완전하게 동작하는’ 단계에 다다르게 된다.

(물론 라이브 서비스를 하는 모든 게임은 지속적으로 콘텐츠를 추가해야하고 경험 목표를 100% 달성하는 구간은 오지 않을 수 있다. 하지만 애초에 게임을 처음 개발할 때 꿈꿨던 그 스펙을 만들었다면 그것도 충분히 가치있는 일 아니겠는가?)

동심원 개발과 위험 관리


동심원 개발은 다양한 잠재적 위험이 도사리는 개발 과정에서도 최소한 절반은 성취할 수 있게 도와준다.

그동안 개발해 온 ‘기초 매커닉’과 그 위에 쌓아올린 ‘단계별 매커닉’은 정상 동작하기 때문이다.

개발 일정상 ‘부위별 터치’는 개발할 수 없더라도, ‘신체 터치’는 동작하게 만들 수 있다.

그 결과 출시할 때의 퀄리티는 최소한 ‘터치 시 캐릭터가 인사를 해주는 상호작용 시스템’은 동작하게 된다.

여기까지만 개발되었다고 하더라도, ‘경험 목표’를 절반은 이루게 된다.

동심원 개발이 강력한 이유는 10을 투자했을 때 최소한 5는 건질 수 있도록 리스크를 줄여준다는 데 있다.

img

이미 소프트웨어 개발에 관한 많은 훌륭한 이론이 존재하는 가운데, ‘나선형 모델’은 동심원 모델과 닮은 점이 있다.

나선형 모델이란, 시스템 개발 도중 발생하는 위험을 최소화하기 위해 계획 – 위험 분석 – 개발 – 평가 순으로 사이클을 돌며 개발된 프로토타입을 지속적으로 발전시켜 최종적으로는 원하는 퀄리티의 소프트웨어를 개발한다는 방법론이다.

주목할 점은 ‘위험 분석’이 사이클 안에 들어가있다는 점이다. 나선형 모델은 프토로타입 단계부터 프로젝트의 위험성을 미리 감지하고 회피하기 위한 방법을 ‘개발’의 전 단계에 마련한다는 점에서 리스크가 큰 개발 현장에서 큰 도움이 될 수 있다.

나선형 모델의 하나의 주기의 순환은 동심원 개발의 ‘하나의 매커닉 개발 주기’와 닮았다. 동심원 개발이 단위는 더 작지만, 결과적으로 완성된 하나의 잘 작동하는 결과물을 만든다는 공통점이 있다.

어쩌면 동심원 개발은 나선형 모델의 프랙탈(작은 일부분)이라고 봐도 무방할 듯하다.

동심원 개발의 특징


1 JHlN7ixDbPFgyjZh1GQIFQ edited
https://medium.com/@jacobcunningham/out-with-the-onion-in-with-vertical-slices-c3edfdafe118
images edited
버티컬 슬라이스는 한 마디로 ‘조각 케이크’다. 한 조각만 먹어도 다른 모든 조각의 맛을 알 수 있다.

동심원 개발의 장점은 개발 단계 어느 지점에 위치하든, ‘거의 완성된 품질의 잘 작동하는 게임’을 플레이할 수 있다는 점이다.

버티컬 슬라이스(우리나라에서는 흔히 CBT, OBT라고 부르는 빌드)를 제출하기로 한 기한이 얼마 남지 않은 시점에서, 너무 많은 개발이 아직 누군가에게 보여주기 민망한 퀄리티로 남아 있다면 결론은 하나다. 제출 기한까지 무기한 초과근무를 해서 이 위기를 넘겨야 한다. 그리고 이건 수많은 회사에서 관행처럼 행하는 개발 상의 악습이다.

물론 동심원 개발이 기존의 다른 작업보다 진척이 더딜 수 있다. 하나의 스프린트마다 거의 완성에 가까운 매커닉을 만든다는 건 고도의 집중력을 요한다. 하지만 매 순간 집중했기에, 정작 그것을 누군가에게 보여주어야하는 상황에서는 마감에 쫓겨 전력질주하지 않아도 안정적인 퀄리티를 보여줄 수 있다. 일정이 고무줄처럼 늘어나거나 줄어들어도, 게임의 평균 퀄리티는 일정에 따라서 크게 변동되지 않는다.

만들지 못한 건 보여주지 않되, 이미 만든 건 확실하게 보여주자는 게 바로 동심원 개발이다.

동심원 개발은 개발 도중 발생하는 수많은 잠재적 위험 요소를 효과적으로 관리할 수 있고, 개발의 어느 지점에서도 ‘작동하는 안정적인 매커닉’을 지향한다는 점에서 애자일적이다.

동심원 개발은 단계적으로 개발 상황을 되돌아보게 한다. 기초 매커닉이 만들어졌다면 그것을 회고하고, 2차, 3차 매커닉에 필요한 요소를 다시금 탐색하게 한다.

이번 회고 과정에서 다음 개발에 필요한 매커닉이 ‘불필요하다’고 느껴질 수 있다. 기초 매커닉이 이미 충분히 매끄러운 경험을 제공해서일 수도 있고, 개발하다보니 다음 매커닉이 개발 공수대비 효용성이 크지 않을 것으로 예상되어 개발 우선순위가 낮아질 수도 있다.

예를 들어, ‘가슴을 터치하면 모션을 하게 하자’는 기능을 만드는 데 추가로 한 달이 걸린다면, ‘캐릭터를 터치하면 나오는 모션을 1개에서 2개로 늘리자’는 쪽이 더 우리 게임을 즐거운 게임으로 만들 수 있다. 그리고 높은 확률로 제로를 1로 만드는 것보다 1을 2로 만드는 게 개발 공수가 적게 든다.

정리하는 글


동심원 개발은 불필요한 ‘야근’을 줄이기 위한 방법이다. 필자는 불필요한 야근을 줄이는 것이야말로 진정한 ‘실력이 있는 개발자’라고 생각한다.

회사생활을 하다보면 다양한 이유로 야근을 하는 사람들을 볼 수 있다.

  • 일을 못해서 잔업을 해야 1인분을 하는 유형
  • 평소에 너무 일이 많아서 1.5인분을 하는 유형
  • 낮에는 한가하다가, 퇴근시간이 다 되어서 갑자기 일정이 펑크나서 하는 유형
  • 회사에서 ‘크런치 모드’를 운영해서 해야만하는 유형

그밖에도 다양한 유형이 있겠지만, 위의 4가지 경우를 필자는 흔히 봐 봤다.

특히 3번의 경우는 프로젝트 일정 관리가 허술한 조직일수록 자주 발생했다. (그것도 일주일에 세 번 이상씩이나)

(4번은 그냥 머지 않아 멸망할 조직이니 논외로 하겠다.)

어쩔 수 없는 야근이라고 할지라도, 3번의 야근 유형은 장기적으로 조직을 위협하는 야근이기에 굉장히 위험하다.

필자는 그 이유를 분석하기 위해 장기적으로 야근 발생 패턴을 관찰해 왔고, 야근의 이유가 사실 알고보니 굉장히 심플하다는 걸 깨달았다.

회사 구성원 대다수가 야근을 당연하게 받아들일 때, 야근이 만성화되었다.

‘야근’을 1화 핵심 소재로 다룬 애니메이션, ‘좀 100’에서는 구성원 모두가 야근을 당연시하는 모습을 볼 수 있다.
ⓒ좀비가 되기 전에 하고 싶은 100가지

1번의 테스트 없이 데이터를 올리는 개발자. 밸리데이션 오류를 무시하고 엑셀 머지를 적용해 데이터를 파괴하는 기획자. 프로젝트 일정과 무관하게 스펙을 편성하는 리드 개발자. 새벽 2시에 스펙을 바꿔달라고 dm을 보내는 퍼블리셔까지.

그리고 그 모두가 야근을 하는 고정멤버들임을 알게 되었을 때 필자의 의문은 해소되었다. Q.E.D.

동심원 개발은 프로젝트를 무리하게 위험 영역으로 끌고가지 않으면서도 안정적인 개발을 가능케 한다.

불필요한 스펙 개발에 우리 모두가 밤늦게까지 매달리게하지 않으며, 가정의 불화 대신에 가족과의 단란한 식사를 가능케 한다.

필요한 건 야근 없이도 좋은 게임을 만들 수 있다는 인식의 전환과, 그리고 변화하고자 하는 의지이다.

동심원 개발은 모든 개발 조직을 구원할 수는 없을 것이지만, 최소한 ‘어떻게 해야 야근을 줄일 수 있지?’라는 고민을 하는 조직에게는 조금의 실마리를 알려줄 수 있을지도 모른다.


인용

  • 리차드 드마샹, ‘재미있는 게임 제작 프로세스’