넥슨 데이터분석팀의 장창완 프로그래머

어느 온라인 게임에서나, '봇'들은 매우 골치 아픈 존재다. 게임의 생태계를 파괴하는 주범이라고 할 수 있는 '작업장'들의 봇들은, 유저들이 구축한 게임의 사회와 경제 체제를 무너트리고 유저들의 사기를 꺾어 운영적 이슈를 만들어낸다. 그렇기 때문에 이런 '봇'들을 찾아내고 제거하는 일은 정말 중요하며, 이를 위한 솔루션을 많은 게임사가 연구하고 있다.

오늘 NDC에서 열린 강연은 '애니메이션의 데이터'를 분석하여 봇을 탐지하는 기법이었다. 넥슨 데이터분석팀의 장창완 프로그래머는 이번 강연에서 그동안 '마비노기 영웅전' 프로젝트에서 근무하면서 연구한 작업장 탐지 솔루션의 개발 과정과 사례를 소개했다.

작업장 탐지에 대한 연구를 계속 진행하고 팀을 옮기게 되면서, 그는 팀에서 개발한 탐지 솔루션을 단순히 한 가지 게임이 아니라 넥슨이 서비스 중인 수많은 게임들에게도 공통적으로 적용해야 할 필요성을 느끼게 됐다. 넥슨이 수많은 게임을 서비스하다 보니, 마비노기 영웅전에서 얻은 경험을 토대로 유사한 장르의 게임에 공통될 수 있는 부분이 많아 이런 솔루션을 개발하게 된 것. 그러나 막상 확장을 하려고 하니 게임의 특성이나 운영툴, 로그 포맷 등이 다르기 때문에 적용이 어려웠다. 그리고 처음부터 확장성을 고려한 시스템으로 개발한 건 아니었기 때문이다.


선택을 해야 하는 상황. 넥슨 특성상 수많은 라이브 게임이 있다 보니 다른 장르의 게임이 여러 가지가 존재하고 라이브 경험도 많다. 고도화를 먼저 해서 특정 게임에만 쓸 것인지, 많은 게임들의 문제를 해결할 수 있지만 기존 운영 프로세스보다 성능이 떨어질 수도 있는 확장의 사이에서 고민하게 됐다.

결국 개발 방향은 확장성은 선택하게 된다. 확장성을 고려하되, 데이터들이 쌓이면서 고도화로 이어질 수 있는 구조. 이를 위해서 모듈화 구조를 채택했는데, 이는 넥슨의 장점과 라이브 경험이 있기에 가능한 부분이었다. 그렇게 라이브 봇 탐지 솔루션(이하 LBD)의 개발을 시작했다.

물론 개발과정도 순탄한 건 아니었다. 여러 어려움이 있었지만, 개발과 운영 및 비용과 라이브 서비스까지 고려하면서 LBD를 개발하는데 성공한다. 개발팀의 부담을 줄이기 위해 공통의 로그 포맷과 인프라를 사용해 개발팀은 로그만 수집하면 LBD가 처리하는 방식을 택했고, 비동기 로그를 기반한 구조라 라이브 서비스에도 영향이 최소화됐다.

탐지 로직도 모듈 단위로 구성해 다른 게임의 성공 사례를 전체가 공유할 수 있는 구조를 만들었고, 이를 통해 모듈을 혼합하면 정확도 또한 올라가도록 제작했다. 추가로, 제제 방식도 자동이 아닌 게임 성격에 맞게 커스터마이징 할 수 있는 구조를 만들어 제제하기 전에 직접 확인할 수 있으며, 화이트 리스트 및 크로스 체크가 가능한 구조의 LBD가 완성됐다.

이렇게 개발된 LBD의 구조를 간략하게 소개하면서, 그는 개발한 LBD의 장단점을 짚었다. 대용량 데이터 처리와 실시간 분석도 유연하게 대응할 수 있고 전문 웹/ETL 개발자 없이 효율적으로 솔루션을 개발할 수 있었지만, 인재 채용에 문제가 생겼다. 초기의 학습 비용이 큰 편이라 신규 채용 인원이 실무에 빠르게 투입될 수 없다는 단점이 있는 것. 그러나 단점은 일회성 비용인 반면에 장점은 지속적으로 효용이 발생하는 긍정적인 결과를 도출할 수 있었다.





이어진 강연에서는 '마비노기 영웅전'에서 애니메이션 유사도를 사용한 LBD의 활용 사례를 소개했다. 봇들은 일반 유저들과 달리 특정 행동을 반복하며, 효율성을 추구해서 맥락상 비정상적인 플레이가 유추되는 경우가 많았다. 그래서 애니메이션 로그를 30초마다 분석해서 특정 애니메이션이 몇 차례나 발생하는지 빈도를 기록하는 방식으로 데이터를 수집했다. 그리고 나서 일반 유저들과 봇의 타입을 비교하니 확실히 애니메이션의 발생 빈도가 달랐다.



그러나 이 결과는 바로 적용될 수 없었고, 확실한 측정이 필요했다. 다행히도 정보 검색 분야에서 이런 문제가 많이 연구되고 있었고, 문서 간의 유사도를 특정하는 방법, 'TF-IDF'(특정 문서에서 어떤 단어의 중요도에 대한 가중치를 부여하는 방법) 알고리즘과 VSM(문서 혹은 단어를 벡터 형태로 나타내는 것. 텍스트 문서를 단어 색인 등의 식별자로 구성된 벡터로 표현하는 대수적 모델)을 이용해 정량화가 가능했다. 정보 검색 문제로 접근해보면 단어의 발생은 '애니메이션의 발생'으로 풀고, '문서'는 '단어의 집합'이니 '애니메이션의 집합'으로 치환이 가능했기 때문이다.

빈도가 아니라 TF-IDF 알고리즘을 채택한 이유는, 발생 빈도가 적은 애니메이션을 변별하기 위해서다. 예를 들어 봇은 '이동'과 '사다리 타기'라는 액션을 둘 다 안 하는 편인데, 사람의 경우는 '이동'은 하지만 '사다리타기'는 가끔 한다. 이 경우 이동은 봇과 사람을 구분할 수 있는 피처가 되지만 사다리타기는 그렇지 않다.

이런 '사다리타기'처럼 발생 빈도는 적지만 매우 중요한 항목에는 가중치를 주기 위해 TF-IDF 알고리즘이 채택됐다. 그래서 TF-IDF 가중치를 적용한 결과, 결과는 더욱 명확해졌다. 그리고 이를 시각화했을때, 두 개체의 차이는 뚜렷했다.

TF-IDF 알고리즘

이를 적용한 결과는...어? 사람과 봇이 심히 다르다!

이렇게 분석한 데이터를 기반으로, 솔루션의 검증을 시도했다. 사전에 사람과 봇으로 분류한 여러 개의 정답지를 준비했다. 새로운 데이터가 들어왔을 때, 준비된 정답지 중 가장 비슷한 열 가지를 뽑아 테스트를 실시했고, 실제로 애니메이션 패턴이 매우 유사한 캐릭터들을 찾아냈다.

기존의 알려진 봇이 아닌 새로운 봇을 찾아낸 것이다. 실제로 사람이 검수한 결과 100% 봇이었다. 처리가 실시간 분산 처리 기반이었기에, 과거와 달리 분 단위로 출항 시점에 봇을 판별할 수 있었다. 저장 로그 역시 표준화했기에 다른 게임에도 확장이 가능했다. 목표했던 LBD가 예상대로 작동을 한 것이다.


바 차트와 워드 클라우드를 써도 매우 뚜렷한 차이가 난다.

새로운 패턴의 봇을 찾았고, 사람이 검수해도 100% 봇으로 판정이 났다.

자, 그럼 이렇게 개발한 LBD를 바로 적용해 봇을 제제하면 될까? 물론 답은 '아니다'이다. 탐지 로직이 아무리 정확하다 하더라도, 오인 탐지가 생길 수 있다. 가령, 정확도가 99%의 탐지 로직이 있다고 하더라도 1%는 결국 오인 제재를 겪게 된다. 만약 이를 동접 10만 게임에 적용한다면? 하루에 최소 천 명에서 많게는 만 단위의 유저들이 오인 재제를 경험하는 치명적인 문제가 발생하게 된다. 그래서 마비노기 영웅전에는 '교차 검증 제도'를 도입했다.

봇을 찾아냈다고 하더라도 무조건 킥과 밴의 제재를 하는 것이 아닌, 거래 제재와 보호 모드로 피해를 최소화하는 형태로 풀어낸 것이다. 원천적으로는 봇을 막지 못하더라도 작업장들의 효율이 매우 떨어지게 만들고 있다는 것.

아직도 넥슨은 봇과의 전쟁을 진행 중이다. 사실, 봇과의 전쟁은 어느 라이브 게임이나 펼쳐지는 '끝없는 전쟁'이다. 언제 끝날지도 모르고, 계속해서 봇들과 작업장은 진화해서 탐지를 벗어나기에 솔루션의 개선과 연구가 필수적이다. 지금도, 넥슨은 봇들과 작업장의 공격을 초기에 감지할 수 있는 더 능동적인 시스템을 구상 중이다.

그래도 바로 자동 제제가 되도록 적용할 순 없다.

현재 마영전은 '교차 검증 제도'를 도입해서 실시중이다.