[NDC2019] 자동화 시대, 프로그래머의 경쟁력은 이제 '소통 능력'에 있다

게임뉴스 | 허재민 기자 | 댓글: 7개 |


▲넥슨코리아 최호영 프로그래머

  • 주제: 게임플레이 프로그래머의 역할
  • 강연자 : 최호영 - 넥슨코리아 / NEXON KOREA
  • 발표분야 : 커리어 - 프로그래밍
  • 권장 대상 : 게임플레이 프로그래머 및 지망생
  • 난이도 : 사전지식 불필요 : 튜토리얼이나 개요 수준에서의 설명


  • [강연 주제] 게임플레이 프로그래머로 일하면서 경험한 내용을 바탕으로 역할을 정리하고 어떻게 하면 좋은 개발자가 될 수 있는지에 대한 방법론을 제시하고자 합니다. 좋은 개발자로 가는 여러가지 길 중 하나를 제안하여 다양한 토론을 이끌어내는 계기가 되었으면 합니다.

    채용 조건에 자주 등장하는 '커뮤니케이션 능력'. 게임 업계도 크게 다르지 않다. 혼자 게임을 만드는 경우는 흔치 않고, 그만큼 당연하게 요구되는 소양이기도 하다. 개발자들 간의 소통뿐만 아니라, 그외 분야와의 커뮤니케이션도 자주 이루어지니까. 그럼 프로그래머, 특히 더욱 광범위한 범위를 다루는 게임플레이 프로그래머에게 '원활한 소통 능력'이란 도대체 어떤 능력을 뜻하는 것일까?

    오늘 NDC 2019에서는 이에 대한 해답을 찾아볼 수 있었다. 넥슨코리아 왓스튜디오의 듀랑고 팀에서 초기 프로젝트부터 약 7년간 작업을 진행해온 게임플레이 프로그래머 최호영 개발자는 자신의 경험을 바탕으로 게임플레이 프로그래머의 역할을 소개하고, 좋은 게임플레이 프로그래머의 조건에 대해서 설명했다.

    이날 강연에서는 게임플레이 프로그래머의 기본 소양인 '좋은 코드를 작성하는 방법'인 코드 리뷰 과정에 대해서 들어볼 수 있었으며, 자주 언급되는 '커뮤니케이션 능력'이 무엇인지 알아보는 시간을 가졌다.



    ■ 좋은 코드를 작성하기 위한 길, '코드 리뷰' - 게임플레이 프로그래머의 조건, 좋은 코드 만들기




    게임플레이 프로그래머는 하나의 일이 아닌, 다양한 일을 처리하는 직군이다. 유저 경험과 맞닿아있는 모든 것을 프로그래밍하며, 깊이 있는 작업보다는 다양하게 주어지는 제안을 전달받아 구현하는 것이 중요하다. 빠르고 효율적인 작업 속도가 요구되는 직군이다.

    따라서 좋은 게임플레이 프로그래머를 정의할 때는 좋은 프로그래머의 기준과는 조금 다른 요소들이 적용된다. 최호영 프로그래머는 여러 가지 기준에서도 특히 ‘좋은 품질의 코드를 만드는 것’이 중요하다고 강조했다. 좋은 품질의 코드가 중요한 이유는 게임의 서비스적 특징에 있다.

    게임은 유저를 즐겁게 해주는 대신 비용을 받는 서비스다. 그 재미의 방식에는 여러 가지가 있지만, 대부분 풍성한 콘텐츠를 제공함으로써 즐거움을 전달하고자 한다. 다양한 콘텐츠 개발을 다루기 때문에 게임플레이 프로그래머는 하나의 작업에 집중할 수 없으며, 콘텐츠마다 서로 연관된 경우가 많아서 다른 콘텐츠를 계속 고려하면서 작업해야 한다. 또한, 지속적인 업데이트가 이루어지는 경우가 많기 때문에 장기간 서비스를 염두에 두고 진행해야 한다.




    따라서 게임 개발에 있어서 자신이 작업한 코드는 다른 누군가가 수정할 경우도 많고, 아주 오랜 시간 후에 뜯어봐야 하는 경우도 있다. 좋은 품질의 코드가 중요한 이유는 이러한 경우 다른 사람이나 오랜 시간이 지난 후에도 이해할 수 있어야 하기 때문이다. 

    좋은 코드를 작성하는 것이 중요하지만, 동시에 어려운 작업이기도 하다. 그 이유는 크게 가독성과 문서화 부분으로 나눠볼 수 있다. 가독성에 대한 판단은 개인마다 기준이 달라 혼자 내릴 수 있는 부분이 아닐뿐더러 바쁠 때 적당히 타협하는 경우가 많다. 문서화도 해둬야 한다고 인지는 하지만, 계속 변화하는 게임 플랫폼의 특성상 전부 작성해두기가 쉽지 않다. 

    이러한 문제를 해결하는 데에는 여러 가지 방법이 있지만, 최호영 프로그래머는 ‘코드 리뷰’를 그 해결책으로 꼽았다. 

    코드리뷰는 간단하게 자신이 작업한 코드를 다른 사람이 검증해주는 과정을 뜻한다. 코드 리뷰에 대한 개념은 많이 알려졌지만, 사실 게임 업계에서 많이 쓰이고 있지는 않다. 리뷰 시스템을 구축하는데 추가적인 비용이 들어갈 뿐만 아니라 작업에 한 단계가추가되는 만큼 시간이 들기 때문이다.




    그럼에도 코드 리뷰가 중요한 이유는 하나의 결과물을 혼자 판단하는 것과 여러 명이 검증하는 것은 확실히 차이가 있기 때문이다. 또한, 리뷰어와 리뷰이 모두 개발자들이기 때문에 동료 코드를 확인하면서 스스로 개발 과정을 개선할 수 있고, 일관적인 코딩 스타일을 구축하게 되어 신규 개발자가 빠르게 이해하고 성장할 수 있게 된다. 

    코드 리뷰는 작업을 문서로 만드는데에도 많은 도움이 된다. 리뷰이와 리뷰어가 작업에 대해서 논의하는 과정이기 때문에 자연스럽게 문서로 남게 되고 추후 문제가 생겼을 때 어디서 어떤 논의가 이루어졌는지 찾을 수 있는 근거가 되기도 한다. 

    여러 가지 장점에도 불구하고 시간과 비용 문제 때문에 기피하는 코드 리뷰. 어떻게 하면 리뷰 시스템 구축을 쉽게, 그리고 과정에 들어가는 시간을 줄일 수 있을까?

    최호영 프로그래머는 Git과 Github을 언급하며 그 해결책을 찾았다. Git을 사용하면 크게 공용 작업 공간이 있고, 따로 공간을 분리해 자신의 작업 공간에서 작업하게 된다. 개인 작업 공간의 작업을 하고 나면, 공용 작업 공간에 반영하는 과정을 거치게 되는데 이를 머지 리퀘스트(Merge Request, 이하 MR)이라고 한다. 

    코드 리뷰는 이 MR 단위로 이루어진다. 리뷰이는 MR을 생성하고, MR만 보고도 작업 내용을 이해할 수 있도록 자세한 설명을 작성한다. 최호영 프로그래머는 이 과정에서 내용을 빠지지 않고 들어갈 수 있도록 일정한 템플릿을 사용한다고 설명했다. 




    작성된 MR은 이어 리뷰어에게 전달된다. 리뷰어는 가장 먼저 체크리스트를 확인하고, 이후에 라인 바이 라인으로 코멘트를 달 수 있다. 최호영 프로그래머는 코멘트를 달 때는 자세하고 간결하게 작성하는 것이 중요하며, 공격적이지 않으면서 직설적인 표현을 사용해야 리뷰 시간을 단축시킬 수 있다고 덧붙였다. 

    작성된 리뷰는 다시 리뷰이에게 전달되고, 리뷰이는 의견을 받아들여 반영하거나 반대 의견을 제기하는 등 논의 과정을 거치게 된다. 협의가 이루어지면 공용 작업 공간에 반영되는데 이때 승인 라인은 개발 PM과 리뷰어가 들어가게 된다. 

    리뷰 과정은 이처럼 Git을 비롯해 상용화된 시스템을 사용하고, 간결하고 정확하게 작성된 리뷰를 통해 시간을 단축시킬 수 있다. 문제 해결을 하는 과정에서도 어떻게 해결할 예정인지 명시해 나중에 확인해봐도 전후 맥락을 이해할 수 없도록 작성하는 것이 중요하다. 




    이어 최호영 프로그래머는 리뷰어를 선정하는 과정을 추가로 언급했다. 리뷰를 빨리 처리하고 싶은 마음에 형식적으로 진행하는 사람에게만 맡기거나, 리뷰를 잘해주는 사람에게 모든 작업이 몰리는 경우도 많다. 자신이 잘 아는 개발자와 모르는 개발자 모두에게 맡기고, 아는 사람들을 늘리는 것도 좋다. 또한, 리뷰어의 집중을 방해하지 말아야 하며, 합의하고 규칙 안에서만 요청 해야한다. 

    최호영 프로그래머는 리뷰는 결국 혼자 작업하는 것보다는 느릴 수밖에 없지만, 되도록 두 가지 일을 한다는 마음으로 트랙을 나눠 해야 한다고 조언했다. 덧붙여, 코드 리뷰를 경험해본 적이 없다면 취미 프로젝트에서 시도해보거나 옆에 있는 동료와 페어 프로그래밍을 활용해보기를 권장했다.



    ■ 개발 전 방향성을 검증해야한다 - 작성 전에 해야할 일은?

    게임 개발에 있어서 속도는 중요하다. 다만 비용과 속도, 퀄리티 이 세 가지를 모두 충족하기는 불가능하다. 따라서 개발사는 적정한 선을 찾기 위해 여러 가지 선택을 하곤 한다. 재력을 쏟아 빠르고 퀄리티 있는 개발을 하기도 하고, 몇 가지 부분의 퀄리티를 포기하고 선택과 집중을 하기도 한다. 

    최호영 프로그래머는 이러한 과정에 프로그래머가 직접 관여할 수는 없다고 언급했다. 다만, 프로그래머가 할 수 있는 것은 개발 일정을 지켜 일정을 늦추지 않는 것이라고 설명했다. 물론 일정을 지키는 것이 쉬운 일은 아니다. 최 개발자는 “2N+1 법칙이 있다. 내가 생각한 일정에 2를 곱하고 하루를 더하면 실제 업무가 마무리되는 일정이라는 법칙인데, 생각보다 잘 맞는다”라며 다양한 요소에 의해 늦춰지기 쉬운 개발 실정을 설명했다.

    개발 일정을 늦추는 요인에는 여러 가지 요인이 있지만 그중 한 가지는 잘못된 방향 설정으로 인한 내부적 요인이다. 개발을 진행하고 나서 이 방향이 아니었다고 뒤늦게 깨닫는 경우다. 이러한 문제는 대부분 이해부족 때문에 발생한다. 최호영 프로그래머는 “실수는 누구나 할수 있다. 중요한 것은 이 실수를 줄이는 것이다”라고 설명했다.

    이러한 실수를 줄이는 방법에는 앞서 언급된 코드 리뷰도 큰 도움이 되지만, 코드 리뷰는 사후 대책이다. 그럼 작업하기 전에 이루어질 수 있는 해결책은 없을까? 최호영 프로그래머는 이를 해결하기 위해 기술 명세서를 도입하는 방식을 시도했다고 언급했다. 방향성을 담은 문서에 대한 리뷰를 진행하고 이후에 작업에 들어가는 방식으로, 의도는 좋았지만, 문제는 있었다. 프로그래머들이 문서를 위한 글을 잘 쓰는 사람들은 아니었다는 것이었다.




    수많은 문서가 쏟아졌고, 리뷰 과정 자체도 눈으로 하나하나 확인하면서 진행해야하기 때문에 시간도 오래 걸릴 수밖에 없었다. 최호영 프로그래머는 “결과적으로 많은 문서가 작성됐지만 대부분 의도한 기능을 수행하는 데에는 큰 도움이 되지 않았다”고 설명했다.

    이를 대신해 도입된 것이 글이 아닌 대화를 통해 진행하는 리뷰였다. 스크럼처럼 짧게 미팅을 진행하고, 디테일이 아닌 방향성에 대한 논의가 이루어졌다. 설명이 길어지는 부분이 있다면 이와 관련된 개발자들끼리 따로 자리를 마련해 이어가는 식으로 진행됐다. 최 개발자는 이를 통해 방향성을 정하고 예측하는데 더욱 더 정확하게 판단할 수 있었다고 전했다.

    이 과정에서 중요한 것은 자신의 작업 내용을 동료가 인지할 수 있도록 핵심 위주로 전달하는 것과 피드백을 공격이라고 생각하지 않고 최대한 의견을 자주 교환할 수 있는 분위기를 조성하는 것이다. 최호영 프로그래머는 “예측 실패는 언제나 있을 수 있다. 중요한 것은 자신이 실패했다는 것을 숨기지 않는 것이다”라고 덧붙였다. 바로 공유하지 않은 문제는 추후에 더 큰 문제로 돌아올 수 있다는 것이다.



    ■ 채용 조건에 매번 언급되는 '소통 잘하는 사람'의 의미 - 프로그래밍을 다른 영역의 언어로 설명하는 능력

    커뮤니케이션 능력이란 무엇인가?

    개발자 채용 조건에서 공통적으로, 자주 언급되는 소양은 ‘커뮤니케이션 능력’이다. 커뮤니케이션 능력, 다시 말해 원활한 소통 능력이란 정확히 무슨 뜻일까? 최호영 프로그래머는 이에 대해 게임플레이 프로그래머를 기준으로 설명했다.

    게임 플레이 프로그래밍은 디자이너에게 의뢰를 받고, 결과물을 내고, 피드백을 받고 수정하는 과정으로 작업을 진행한다. 언뜻 보면 외주 작업 같아 보이기도 하는 작업 과정을 거친다. 

    그럼 의뢰를 주는 게임 디자이너는 어떤 직군인가? 게임 디자이너는 게임플레이 프로그래머와 함께 게임을 만드는 사람이자, 유저의 기준으로 판단하는 직군이다. 이 부분에서 프로그래머와 관점의 차이가 생긴다. 게임 플레이를 바라보는 관점이 서로 다르기 때문에 충돌이 일어난다. 

    프로그래머와 디자이너의 관점 차이는 서로 잘 알지 못하는 부분이 있기 때문에 생긴다. 디자이너에게 구현하는 것은 자신의 업무가 아니다. 따라서 그 부분에 대해서는 인지하기 어렵다. 아무리 베테랑 디자이너라고 하더라도 프로그래밍의 분야는 지식으로 꿰뚫고 인지하는 게 아니라 대부분 경험적으로 짐작하는 단계에 그친다. 

    최호영 개발자는 “사실 작업을 시작하기 전까지 프로그래머도 인지하지 못하는 요소들도 많다. 프로그래머도 모르는 것을 디자이너들이 어떻게 알겠느냐”고 두 직군의 차이를 강조했다. 




    게임플레이 프로그래머는 이 중간단계에서 중요한 역할을 한다. 불가능한 요청에 대해서는 어려운 이유를 설명하고 대안책을 제시하거나, 큰 작업은 쪼개서 짧은 프로젝트로 진행할 수 있도록 제안하기도 한다. 최호영 프로그래머는 “게임플레이 프로그래머는 디자이너가 잘 알기 어려운 부분을 잘 아는 사람들이고, 디자인의 완결성을 높이는 직군이다”라고 그 역할을 강조했다. 이렇게까지 해야 하는가, 가 아니라 원래 마땅히 해야하는 업무라고 생각해야한다고 설명했다. 

    그는 게임플레이 프로그래머에게 원활한 소통 능력이란, 프로그래밍 요소를 다른 직군의 언어로 설명할 수 있는 능력을 뜻한다고 마무리했다. 프로그래머가 함께 작업하는 사람은 비단 게임 디자이너에 국한되지 않는다. 사업팀과 협업하는 경우도 있고, QA팀과 소통하는 일도 많다. 최호영 개발자는 소통의 단계에서 단순히 이 부분은 안 된다고 거절하는 것이 아니라 왜 불가능한지 설명할 수 있는, 피드백을 주는 조언자의 입장으로 더 나은 작업 방향과 내용을 만들 수 있는 능력이 중요하다고 강조했다.




    최호영 프로그래머는 마지막으로 “게임플레이 프로그래머란, 상대의 의도를 이해하고 정해진 일정에 맞춰 좋은 품질의 프로그래밍을 하는 사람”이라고 다시금 정의했다. 개발 환경은 계속 발전하고 있고 프로그래밍 자체는 쉬워지고 있다. 많은 것이 자동화되고 있고, 개발자들의 경쟁력은 자연스럽게 떨어질 수도 있는 세상이다. 최호영 개발자는 “이제 자신의 경쟁력을 키워야 할 때”라고 현 상황을 짚었다. 그는 프로그래머의 기본 소양에 덧붙여, 소통 스페셜리스트로서의 역할을 수행할 수 있는 게임플레이 프로그래머가 되어 경쟁력 있는 개발자들이 되길 바란다며 강연을 마무리했다. 

    댓글

    새로고침
    새로고침

    기사 목록

    1 2 3 4 5