• 주제 : 테스트자동화 도구 개발 생존전략 - 아무리 일이라지만 재미가 있어야지
  • 강연자 : 강덕원 - 넥슨코리아 / Nexon Korea
  • 발표분야 : 자동화 , 툴 , 지원도구, 프로그래밍
  • 권장 대상 : 툴 프로그래머
  • 난이도 : 사전지식 불필요 : 관련 전공이나 경력이 전혀 없더라도 이해할 수 있는 내용


  • [강연 주제] 2021년 한해 동안 테스트 자동화 지원도구를 개발하면서 어떻게 하면 해당 도구를 활용하시는 분들이 지원도구에 빠르게 익숙해지면서 업무에 효율적으로 적용하실 수 있을지 많은 고민을 했었고, 결과적으로 넥슨네트웍스 / Nexon networks의 게임QA분들에게 좋은 평가와 더불어 업무효율을 높이는 데도 적지않은 기여를 할 수 있었습니다. 제가 테스트 자동화 지원도구를 개발을 진행해 오면서 핵심적으로 고민하였던 부분들과 전략적으로 접근했던 부분들에 대해서 공유할까 합니다.
    최근 게임산업이 고도화되면서 지원도구들 역시 더 복잡해지며 다양해지고 있습니다. 지원도구를 만들고 있는 개발자분들께 한 번쯤 생각해볼만한 꼭지를 제공해 드릴 수 있으면 좋겠습니다.


    게임 개발, 운영에서 테스트는 반드시 필요한 과정이다. 플레이 테스트도 있지만, 반복적으로 온종일 점프만 하거나 아이템을 구매하고 취소하는 등의 기능적 테스트나 QA는 모든 과정을 인력으로만 해결하기는 어렵다.

    사실상 반복적인 QA만으로 해결하기도 쉽지 않고, 유닛 테스트로는 걸러지지 않은 버그를 추적하기도 번거롭다. 규격화된 테스트도 필요하기도 하며, 특히나 서비스하는 게임이 많으면 인력으로 한계가 있다. 그렇기에 '테스트 자동화 도구'가 절실히 필요하게 된다.

    이러한 테스트 도구에 대해 넥슨의 강덕원 실장은 테스트 자동화 도구를 개발하고 도입하는 과정에서, 어떻게 하면 이러한 지원도구들이 성공적으로 정착할 수 있는지에 대한 생각을 NDC 강연을 통해 공유했다.



    AutoFlow, 개발 과정에서의 전략적 선택


    테스트 자동화 도구에 대해서 넥슨은 이미 여러 고민을 하고 있었다. 상용 솔루션의 도입을 검토하기도 하고, 넥슨네트웍스에서 내부 개발을 진행하는 방안과 파이썬(Python)으로 직접 스크립팅을 하는 방안도 고려 중이었다.

    그러나 상용 솔루션은 언제까지 서비스할 지 보장이 어렵고, 구축해도 한순간에 무너질 위험이 있었다. 내부 개발은 테스트 업무와 동시에 개발되어 작업 시간이 매우 부족하다는 단점이 있었다. 파이썬 스크립팅은 기능적으로 명확한 장점이 있었지만, 생산성도 떨어지고, 배우기 어렵다는 러닝 커브의 단점이 있었다. 그래서 고민 끝에 강덕원 실장은 제작을 요청받고, '오토플로우(Autoflow)'라는 테스트 자동화 도구를 만들게 됐다.


    그렇지만 오토플로우의 개발 과정 자체는 순탄하지 않았다. 테스트 자동화 도구가 없다고 업무가 안되는 건 아니다 보니 제작을 해도 사용하지 않을 가능성도 있었고, 상용 솔루션보다 더 잘 만들어야 한다는 부담이 있었다. 그러면서 넥슨에서 사용하기에는 범용적인 도구면서도 개별 게임의 특성을 반영할 수 있어야 했다.

    그래서 강 실장은 오토플로우 개발에서 재미라는 요소에 주목하고 제작에 돌입했다. PyAutoGUI 등 많은 관련 라이브를 활용해 제작 자체는 어렵지 않았다.


    오토플로우는 개발 과정에서 우선시해서 러닝 커브를 낮추기 위해 노력했다. 언리얼 머터리얼 에디터나 유니티 볼드 비주얼 스크립팅과 같은 곳에서 많이 사용하는 노드 베이스 비주얼 스크립트 방식을 도입해 시각적으로 편하게, 확실히 흐름을 이해할 수 있도록 했다.

    그리고 사실상 상용화 모델보다 더 좋은 기능은 구현하는 건 무리이기에 QA부터 진짜 필요한 기능을 전달받아 빠르게 꾸준히 업데이트한다는 내부 개발의 장점을 적극 활용하기로 했다.



    '재미'라는 관점의 접근, 지원도구 개발에도 전략이 필요하다


    앞서 언급했던 '재미'는 유머러스의 영역이 아닌 'FUN'의 영역으로 접근했다. 일이라고 하지만 '재미'만 느낄 수 있다면 다소간의 러닝 커브를 쉽게 넘을 수 있을 거라는 판단이었다. 또한, 여러 시각에서 창의적인 시도도 기대해볼 수 있고, 적극적으로 생산적인 의견 제시가 가능할 것으로 예상했다.

    이러한 재미 요소를 '빠르게 적응할 수 있는 UX를 바탕으로 배우고 익숙해지는 재미'와 '여러 가지 형태로 직접 개발에 참여하는 재미'로 분류했다. 개발 과정에 레고처럼 단계적으로 난도를 높이면서 러닝 커브를 낮추기로 기획하고, 초기에는 기능도 적고 간단한 툴로 개발됐다.

    ▲ 레고처럼 차근차근 단계를 높여나가며 심화학습을 할 수 있도록 유도했다.

    이후 툴이 복잡해져서 러닝 커브가 올라갈 즈음에는 조직 차원에서 익숙함이 생기면서 신규 직원들에게 하는 교육적인 부분도 준비되면서, 결과적으로 전체적인 러닝 커브를 낮추는 효과를 볼 수 있었다. 또한 클라이언트 스크린샷으로 좌표를 얻거나 이미지를 빠르게 얻고, 액션을 녹화했다가 노드로 만드는 기능도 추가해 귀찮음을 줄였다.

    여기에 노드 조합을 통해 여러 기능을 사용할 수 있도록 유도하고, 유명 게임의 단축키 배열을 비슷하게 만들어서 친숙함을 올렸다. 추가로 개발자들이 좀 더 효율적인 방법으로 플로우를 구성할 수 있도록 첨삭을 제공했다.

    ▲ UX를 개선하기 위해 '귀찮게' 느껴지는 기능들을 쉽게 접근할 수 있도록 제작했다고 한다.

    또한 사용하는 인원들이 직접 개발에 참여할 수 있도록 빠르고 꾸준한 업데이트를 제공했다. 0.3 버전부터 1.2.2버전까지 업데이트가 9개월 만에 이뤄지며 많은 빌드가 제공됐다. 강 실장은 사용자들에게 툴에 부족함이나 버그가 있어도 빠르게 수정되고 추가될 거라는 믿음을 주고 싶었고, 이러한 믿음으로 더 많이 활용할 것을 기대했다. 그 결과 사용과정에서 적극적인 버그 제보와 개선 아이디어를 제공하는 경우가 많았다.

    여기에 개발 지식이 있는 인원들이 직접 커스텀 노드를 구성할 수 있게 하고 공유하는 기능도 포함됐다. 괜찮은 기능의 커스텀 노드들은 직접 정식 버전에 추가하여, 제작 아이디어를 제공했거나 구현한 사용자들을 크레딧에 포함했다.

    이렇게 만들어진 오토플로우는 최근 넥슨네트웍스 테스트 업무에서 점차 사용 비중을 높여가고 있다. 강화 확률 및 가챠 검증과 같은 반복 테스트뿐 아니라 간헐적 버그 발생 재현에도 투입되는 등 다양한 반면에서 활용도가 올라갔다. 현재는 더 나아가 게임 개발팀에서도 활용하는 방안에 대해서도 논의가 이뤄지고 있다.


    게임 산업이 고도화되면서 다양한 부문에서도 지원 도구가 개발되고 있다. 개발도구는 현업 요구에 맞는 게 최우선이지만 더욱 복잡하고 다양한 요구에 맞는 도구를 개발하다 보면 의도치 않게 복잡하고 어려워지기도 한다.

    그러다보니 만들어지고도 활용되지 못하고 사라지는 도구들이 있었다. 이러한 아픈 과거를 돌아볼 때, 기술적으로 부족함도 있었지만 지원도구가 안착 되기 위한 전략적인 접근이 부족한 게 아니었나 하고 자문하며, 지원도구 개발에도 전략이 필요하다고 강조했다.