2012년 7월, 신입 프로그래머 한 명이 <카운터스트라이크 온라인2>(이하 카스 온라인 2) 개발팀에 들어왔다. 원래는 충분한 적응 시간이 주어졌겠지만 그럴 여유가 없었다. 당시 <카스 온라인 2>는 클로즈 베타테스트를 앞두고 있었다.
덤으로 신입 프로그래머는 말 그대로 ‘신참’이었다. 대학교육 정규과정을 이수했을 뿐, 다른 경력이 없었다. 문자 그대로 처음부터 실무를 배워야 하는 백지 상태. 그런데 신입이 업무에 적응하는 데 할애할 수 있는 시간은 12일밖에 없었다.
이 촉박한 상황에서 신입 프로그래머를 어떻게 교육하고 일을 시키면 좋을까? 훈련을 받은 당사자인 넥슨 개발 3본부 CSO2실 클라이언트팀의 박동일 연구원이 25일 넥슨 개발자 컨퍼런스(NDC)에서 밝힌 경험담을 정리했다. /디스이즈게임 전승목 기자
넥슨 개발 3본부 CSO2실 클라이언트팀 박동일 연구원
■ 일반적인 신입 훈련은 할 수도 없었고 해서도 안 됐다
당시 박동일 연구원의 선임들은 효율적으로 시간을 활용해 훈련하고 평가하는 방법을 고민했고, 박동일 연구원은 어려운 문제를 조심스럽게 해결하는 방법을 고민해야 했다. 아무래도 신입 프로그래머가 갑자기 일을 맡아서 실수를 하면, 프로그램의 안정성이 떨어지는 문제가 발생할 수 있었다.
이 때문에 주먹구구식의 신입 교육 방법은 시도할 수가 없었다. 대표적으로 무작정 소스 코드를 읽어보게 만드는 훈련을 들 수 있다. 당시 <카스 온라인 2>는 테스트 시작 직전이었기 때문에 소스 코드가 엄청나게 많았다. 이런 걸 목적 없이 읽는다면 적응은커녕 업무에 질릴 우려가 컸다.
테스트를 코앞에 둔 게임이 일반적인 신입 훈련법을 활용할 수는 없었다.
게임을 직접 플레이시키고 버그를 찾는 훈련법 또한 <카스 온라인 2> 팀의 상황에 맞지 않았다. 분명 게임을 플레이하면 팀에 빨리 적응할 수는 있겠지만, 그러기에는 팀이 너무나도 바빴다. “고양이 발이라도 빌리고 싶은 상황”이라고 표현해도 어색하지 않을 정도였다.
신입 프로그래머에 코드를 짜게 하는 OJT(On the Job Training, 현장 감독자가 작업 현장에서 개별지도 교육하는 방식)는 맞지 않는 방법이 아니라 ‘위험한’ 방법이었다. OJT를 하는 중 신입이 실수하면 프로그램의 안정성이 떨어지고 팀 전체의 작업 효율이 떨어질 여지가 있어서다. 한마디로 <카스 온라인 2> 개발팀은 일반적으로 쓰일 만한 신입 교육법은 단 하나도 쓸 수 없는 처지에 놓여 있었다.
결국 <카스 온라인 2> 팀은 신입 프로그래머가 자력으로 문제를 해결하는 능력을 높이기 위해 단계적인 훈련법을 사용하기로 결정했다.
일반적인 훈련법을 제외한 뒤 다음과 같은 목표의 훈련 전략이 수립됐다.
■ 단계적으로 훈련하고, 평가와 훈련을 분리해 실시
1단계에서는 <코딩 컨벤션>이라는 책을 요약하는 훈련법이 쓰였다. 게임을 개발하는 데 필요한 사전지식을 배양하기 위해서다.
2단계에서는 책을 통해 지식을 잘 얻었는지 확인하기 위해 소스 엔진과 관련된 문제 30개를 푸는 훈련법이 쓰였다. 출제 영역은 리소스, 렌더링, UI, 인터페이스, AI 로직 등이었고, 각 담당 분야의 선임 개발자들이 문제를 냈다. 함수를 호출하는 과정을 묻는 문제들이 대거 출제됐고, 이를 풀기 위해서는 디거버나 프로파일러 툴을 이용해야 했다.
몇몇 소스 엔진 문제는 밸브 디벨로퍼 웹페이지의 샘플 코드와 문서를 참조해야 풀 수 있었다. 잘 정리된 밸브 문서는 몇 시간씩 코드를 읽는 것보다 좋은 훈련 효과를 준다는 사실을 경험으로 깨닫도록 하기 위한 선임들의 배려였다.
훈련 과정을 단계적으로 거친 뒤, 박동일 연구원은 리소스 분석으로 훈련하기 시작했다. 리소스는 개발자들의 고민들이 축적돼 만들어진 산물이다. 어떻게 해야 클라이언트 용량을 줄이고 구동 속도를 빠르게 하는지, 해킹으로부터 데이터를 어떻게 보호해야 하는지 등을 배울 수 있다.
소스 엔진 관련 문제를 통해 밸브 개발자 문서를 확인하도록 유도했다.
실습 과제도 종종 주어졌다. 주목할 점은 훈련용 실습 과제로 신입 프로그래머의 능력을 평가하지 않았다는 사실이다. 평가가 필요하면 평가용 과제를 따로 줬다.
박동일 연구원은 훈련과 평가의 분리가 자신에게 도움이 됐다고 밝혔다. 평가용 과제와 훈련용 과제가 같아서 난처한 상황에 빠질 필요가 없었다. 일단 실패를 두려워하지 않고 부담 없이 자유로운 시도를 할 수 있었다.
좋은 평가를 받으려고 ‘쓸데없이 고퀄리티로’ 작업하느라 훈련 시간을 스스로 깎아먹을 필요도 없었다. 말 그대로 훈련용 과제를 받을 때는 어디까지나 실력을 키우는 것에 전념하기만 하면 됐다.
이를 통해 경력 없이 입사한 박동일 연구원은 <코딩 컨벤션>으로 훈련하는 데 5일, 기출 문제 풀이에 4일, 리소스 정리에 3일을 투자해 실무 능력을 쌓았다. 본격적인 일꾼으로 일할 때가 온 것이다.
■ 미공개 콘텐츠 개발에 신입을 투입하자
단기 훈련을 받은 박동일 연구원은 베타테스트에 선보일 콘텐츠가 아닌 미공개 콘텐츠를 개발하는 일에 투입됐다. 만약 신입이 실수해 문제가 생긴다고 해도 콘텐츠를 공개하지 않는다면 큰 문제가 생기지 않기 때문이다. 신입의 실력이 믿을 만할 정도로 성장하면, 그 때부터 공개용 콘텐츠 개발에 투입하면 된다는 계산도 깔려 있었다.
이러한 팀의 결정으로 박동일 연구원은 신규 총기 추가, 클라이언트별 피처 관리 프로그램 제작, 스텔스 모드를 제작하기 시작했다. 자신의 실수가 유저들의 비난으로 이어질 염려가 없어 부담없이 작업할 수 있었다.
물론 신규 총기를 개발하는 과정은 쉽지 않았다. <카스 온라인 2>의 엔진 특성상 하나의 총기를 추가할 때마다 대미지와 명중률 공식을 새로 정의해야 한다는 불편함이 있었기 때문이다. 박동일 연구원은 훈련으로 쌓은 지식을 이용해 권총, 샷건, 라이플, 저격총 등 카테고리별로 명중률 공식을 묶은 뒤 신규 총기에는 일반화된 공식을 도입하는 방식으로 빠르게 문제를 해결했다.
스텔스 모드를 적용할 때도 같은 일이 일어났다. 캐릭터가 투명해지니 뒷모습 너머 앞모습이 보이고 관절이 겹쳐 보이는 문제가 생겨났다. 만약 문제의 심각성이 잘 느껴지지 않는다면 다소 과장을 보태서 ‘반쯤 투명해진 미소녀의 뒤통수에 눈과 이가 둥둥 떠다니는 광경’을 상상하면 와 닿을 것이다.
이 문제는 정규식으로 코드를 검색해 문제를 확인하고 8줄의 코드를 추가하는 방법으로 해결됐다. 비록 촉박한 환경에서 힘들게 일을 배우긴 했지만, 짧은 시간 안에 문제를 해결하는 능력을 갖추게 된 것이다.
스텔스 모드 수정 전과 수정 후. 관절이 겹치는 등 비정상적인 렌더링 문제가 해소됐다.
박동일 연구원은 <카스 온라인 2>의 훈련 과정을 값진 경험을 받아들이고 있다. 예전에 아르바이트를 했을 때와는 전혀 다른 경험을 했기 때문이다. 당시 박동일 연구원은 일을 배우기 위해 선임을 찾아갔는데, 그 선임은 “지금 바쁘니까 나중에 질문해라”는 말만 했다. 그 후 4시간을 기다려도 선임이 박동일 연구원에게 업무를 가르쳐주지 않았다.
박동일 연구원은 “성장하는 조직과 그렇지 않은 조직의 차이는 선임과 후임의 관계에서 드러나는 것 같다”는 소감을 끝으로 강연을 마쳤다. 이는 선임이 후임을 귀찮아 하고 후임이 선임을 무시하는 조직은 성장할 수 없다는 말을 뜻하기도 한다.