<마비노기 영웅전>의 사례에 기반하여 다음의 내용을 설명합니다.
1. 국내 및 해외에서 라이브 서비스 중에 발생하는 작업장 이슈에 대응하기 위해서 실시간 로그 수집 프로세스를 구축하면서 고민하였던 내용과
2. 수집한 로그 데이터를 활용하여 온라인 액션 게임에서 캐릭터 애니메이션 패턴간의 유사도(TF-IDF, Cosine Similarity)를 분석하여 현업 실무의 어뷰징 탐지에 활용한 사례를 공유합니다.
라이브 서비스 환경에서 국내 및 해외의 실시간 로그 수집에 대해서 고민하시는 개발자나 온라인 게임에서의 봇탐지에 관심있는 분석가들에게 유용한 사례를 소개해드릴 수 있을 것으로 생각합니다.
20. 처음의 생각
• 데이터분석팀에 와서 초기에 한 일
• 마영전에서 사용하였던 시스템을 확장 시도
• 이걸 빨리 적용해봐야지
출처: 가수 쿨(COOL)의 2015 신곡
21. 막상 확장 하려고 하니
• 돌아오는 대답
• “게임 특성이 달라서 안돼요”
• “운영툴 지원이 안돼서… ”
• “로그 포맷이 달라서 … ”
• 한 줄 요약:
• 애초에 확장성이 고려되지 않았기에 결국 다른 게임에서 쓸 수 없다.
• 결과적으로 마영전 사례를 타게임에 바로 적용하기 어려웠음
• 처음부터 확장성이 고려된 시스템이 아니었기 때문
22. 종과 횡 사이
• 넥슨 특성상 다른 장르 게임이 여러 개가 존재
• 종: 고도화
• 횡: 확장성
• 이 둘 사이에 트레이드 오프 관계가 존재
• 무엇을 먼저 할 것인가?
• 종(고도화) 먼저?
• “특정 게임에서만 쓸 수 있는 사례 아닌가요?”
• 횡(확장성) 먼저?
• “기존에 운영 프로세스보다 성능이 좋지 않은데 굳이 해야 하나요?”
23. 결론: 확장성을 선택
• 확장성을 먼저 고려하되
• 이러한 확장성이 쌓여서 나중에 고도화로 이어지는 구조를 만들자!
• 이를 위해서 모듈화 구조를 채택
• 넥슨의 장점과 라이브 경험이 있기에 가능한 선택지
24. 넥슨의 장점
• 넥슨이 갖는 개발사이자 퍼블리셔로서의 구조적인 장점
• 여러 개의 라이브 게임이 있고 라이브 경험도 많음
• 그러기에 유사한 장르 게임이 공통될 수 있는 부분이 많음
• 이러한 장점이 아직 제대로 발현되지 않았는데 이를 통합 솔루션화
• 라이브 봇탐지 솔루션(이하 LBD)를 개발!
25. 솔루션 개발 고민
• 통합 솔루션을 개발하려고 보니 어려웠던 부분:
• 여러 부서들이 가진 복잡한 이해관계
• 개발 조직: 개발 부담 최소화
• 인프라 조직: 라이브 장애 최소화
• 비용 관리: 비용대비 효용을 최대화
• 운영 조직: 오탐지 최소화
• 다들 각자의 사정이 있음
• 이를 어떻게 풀었는지 LBD의 구조를 짚어가며 하나씩 말씀 드리겠다.
26. 개발 부담 => 공통 인프라 사용
개발 부담은 최소화
- 공통 로그 포맷과 공통 인프라 사용
- 작업장 대응에 대해서 ON/OFF 할
수 있는 편리한 스위치를 제공
봇탐지파트 쇼케이스 자료
27. 인프라 부담 => 비동기 로그 기반
로그 분석 기반
- 비동기 로그 기반 구조이기에
라이브 서비스 영향 최소화
봇탐지파트 쇼케이스 자료
28. 비용 부담 => 모듈화 구조
탐지 로직을 모듈 단위로 구성
- 다른 게임의 성공 사례를 전체가 공유
- 각 프로젝트에서는 게임 성격에 맞는
몇 가지 모듈을 혼합해서 정확도 향상
프
로
젝
트
모
듈
봇탐지파트 쇼케이스 자료
29. 운영 부담 => 크로스 체크
게임 성격에 맞게 커스터마이징
- 프로젝트 정책과 상황에 따라서 조절 가능
- 제재하기 전에 사람이 확인 가능
- 화이트리스트 및 크로스 체크가 가능하게
구성해서 오탐지 최소화
봇탐지파트 쇼케이스 자료
30. 개발 이터레이션
• 워터폴로 진행하면 효율적이기 어려움
• 전담 웹 개발자나 ETL 개발자를 두지 않고
• 엔지니어 or 분석가가 혼자서 [로직 설계 – 개발 – 대시보드]까지 개발
• 이터레이션:
• 매주 이터레이션 1회를 진행
• [미팅 => 개발 => 피드백] ==> [미팅 => 개발 => 피드백] ==> …
• 이러한 이터레이션을 반복해서 매주 결과물을 같이 보면서 피드백
31. 결과물 소개
• 그러면 저희가 지난 3개월간 개발한 결과물을 짧게 소개
• 사실 실제 라이브 데모를 보여드리면 좋겠지만
• 몇 가지 스크린 샷으로 대체
32. 솔루션 사례: 휴리스틱 탐지
• 과거에는 엑셀 시트를 만들어서 수동으로 조건을 설정해서 탐색
• 이제는 시스템에서 직접 분포를 확인하고 탐색이 가능
NDC 2017 비공개 강연(황준식 님)
33. 솔루션 사례: 데미지 어뷰징 탐지
• 과거에는 룰셋 기반이어서 우회가 쉬웠지만
• 머신러닝 기반으로 분포가 바뀌더라도 잡을 수 있는 스마트한 시스템
NDC 2017 비공개 강연(황준식 님)
34. LBD가 어디까지 왔는가?
• 라이브 운영 경험을 시스템화
• 기존의 라이브 성공 사례가 일부 적용
• 마영전에서 사용한 알고리즘도 고도화 되어서 적용
• 앞으로도 계속 확장 예정
• 개인적인 포부:
• 넥슨에서 서비스하는 게임은 작업장 피해가 최소화 되게끔
36. 관심 있는 분들이 계실 것 같기에
LBD의 각 파트들이 어떻게 연결되는지 소개
(조금 드라이한 얘기가 될 수도)
37. 데이터 파이프라인 구성
데이터 파이프라인
- Spark가 중심
- AWS 서비스를 적극 활용
- 대용량 데이터분석과 실시간
처리가 가능하도록 구성
수 집
수 집 저 장 분 석
AWS Kinesis
38. 수집
• 실시간 처리가 가능하도록 구성
• 봇이 파밍한 골드가 유통되기 전에 차단해야 함
• fluentd
• 분산 로그 & 데이터 수집기
• 데이터 소스(예: 게임서버)에서 직접 로그를 수집
• AWS Kinesis
• 실시간 스트림 기반의 데이터 적재
• Spark Streaming
• 실시간 스트리밍 기반의 데이터 처리
• Spark로 작성된 분석 및 배치 작업을 거의 그대로 사용 가능
수 집
수 집
AWS Kinesis
39. 저장
• Spark에서 대용량 분석이 가능하도록 거들뿐
• AWS S3
• 메인 저장소로 활용
• 스키마 없이 쌓아놓은 비정형 데이터를 Spark로 분석
• AWS RDS
• AWS에서 제공하는 SQL 서비스
• NoSQL
• DB 적재가 필요한데 SQL로 커버하기 어려운 데이터들
저 장
40. 분석
• 대부분의 인게임 데이터는 빅데이터에 해당
• 데이터 용량 문제 때문에 분석 못하는 상황이 없도록
• Spark
• 쉽고(?) 빠른 클러스터 컴퓨팅
• Databricks 노트북 : Spark 데이터 분석 및 탐색
• AWS EMR: Spark 어플리케이션 배치
• R, Python
• 데이터 수집, 지표 및 통계 분석, 머신러닝
• R과 Python의 다양한 패키지 활용
• Shiny
• 웹 프로그래밍
• 통계 프로그래밍 언어 R을 이용해서 인터랙티브 대시보드 구축 가능
분 석
41. 정리
• 장점
• 대용량 데이터 처리와 실시간 분석도 유연하게 가능
• 전문 웹/ETL 개발자 없이도 효율적으로 솔루션 개발
• 단점
• 인재 채용이 어려움
• 초기 학습 비용이 큰 편
• 때문에 신규 채용 인원이 바로 실무를 진행하지 않고 교육을 조금 길게
• 장기적인 시각에서 보면 장점이 훨씬 큼
• 단점은 일회성 비용인 반면에 장점은 지속적인 효용 발생
43. 소개
• LBD에 여러가지 모듈을 만들었는데
가장 애착이 가는 애니메이션 유사도에 대한 이야기
• 마영전의 사례도 LBD에 태웠는데 그 중 하나
44. 동기
• 운영팀에서 패턴을 가지고 봇을 잡아놨는데
• 사람이 매일같이 붙어서 볼 수가 없음
• 이미 제재한 캐릭터와 유사한 패턴의 캐릭터를 자동으로 제재하고 싶음
• 그 기준을 애니메이션 유사도를 사용하였다.
45. 애니메이션 로그
• 30초마다 특정 애니메이션이 몇 번 발생하였는지 빈도를 기록
• 로그는 앞서 얘기한 데이터 파이프라인으로 실시간 수집
• 원천 데이터는 다음과 같은 형태로 구성
애니메이션 이름 발생 빈도
기본 공격 20
빠르게 달리기 100
제자리 휴식 30
사망 1
피해 입음 3
46. 사람과 봇을 비교
• 봇:
• 특정 행동을 반복
• 맥락상 비정상적인 플레이가 유추
예) 이동/공격 없이 전투 완료
• 도메인 전문가가 봇으로 구분 가능
애니메이션 이름 발생 빈도
기본 공격 20
달리기 500
제자리 휴식 120
피해 입음 26
사망 10
• 사람:
• 다양한 행동을 수행
• 비효율적인 행동도 존재
예) 사망, 부활, 사다리 타기 등
애니메이션 이름 발생 빈도
기본 공격 140
달리기 3
제자리 휴식 300
피해 입음 3
사망 0
47. 이걸 어떻게 측정할 수 있을까?
• 정보검색 분야에서는 이런 문제에 대한 연구가 많이 되어있음
• 이미 해결책이 존재
• 문서간의 유사도를 측정하는 방법이 있다.
• 정보검색 문제로 접근해보면
• 단어 발생 = 애니메이션 발생
• 문서 = 단어 집합 = 애니메이션 집합
• TF-IDF와 VSM을 이용하면 정량화가 가능!
48. 알고리즘: TF-IDF
• 특정 문서에서 어떤 단어의 중요도에 대한 가중치를 부여하는 방법
• 정보 검색에서 문서간의 유사도를 비교할 때 널리 쓰임
출처: 고려대학교 강필성 교수님 강의 자료
49. 왜 TF-IDF인가?
• 왜 빈도가 아니라 굳이 TF-IDF를 사용하였는가?
• 발생 빈도가 적은 애니메이션의 변별력 때문
• 가령
• 봇은 ‘이동’과 ‘사다리타기’ 둘 다 안하지만
• 사람은 ‘이동’은 하지만 ‘사다리타기’는 가끔 한다.
• 이 경우
• ‘이동’은 봇과 사람을 구분할 수 있는 피처지만 ‘사다리타기’는 알 수 없음
• 이처럼 발생빈도가 적지만 중요한 항목에 가중치를 주기 위해서 TF-IDF를 사용
50. TF-IDF 결과
• TF-IDF 가중치를 적용해보았더니 다음과 같았다.
애니메이션 이름 가중치
후방에서 가벼운 피해 1.50
정면에서 강한 피해 1.49
피해 경직 1.09
제자리 휴식 0.80
제자리 대기 0.76
봇
애니메이션 이름 가중치
SP 스킬 사용 3.78
감정 표현 3.50
주변 환경과 상호작용 2.80
발사체 사용 2.49
보스에게 붙잡힘 1.31
사람
51. VSM(Vector Space Model)
• 분석한 TF-IDF값들을 가진 Dictionary를 벡터(Vector)로 간주
• 벡터간의 유사도를 측정할 수 있다.
http://courses.cs.vt.edu/~cs5604/cs5604cnRR/RR-b1.html출처: 고려대학교 강필성 교수님 강의 자료
54. 시각화(3)
• 바 차트로도 그려보았다.
• 사람과 사람
• 사람과 봇
• 이렇게 보니 더 명확하다.
봇
사람사람들의 평균
사람들의 평균
55. 분류
• 사전에 사람과 봇으로 분류한 정답지를 여러 개 준비
• 새로운 데이터가 들어왔을 때:
• 준비된 정답지 중 가장 비슷한 10개를 뽑아본다.
• 이렇게 뽑은 정답지 10개 중 9개 이상이 봇이면 봇이다.
56. 적용 결과
• 실제로 애니메이션 패턴이 매우 유사한 캐릭터들을 찾아낼 수 있었다.
알려진 정답지(봇) 새로 찾은 봇
57. 실시간 분산 처리
• 여기까지는 예전에 했던 알고리즘에 대한 설명
• 과거에는
• 확장성이 고려되지 않았고
• 성능상의 문제로 시간 단위 배치 처리
• 지금은
• 실시간 분산 처리 기반이기에 분 단위로 출항 시점에 바로 알 수 있음
• 저장 로그를 표준화 했기에 다른 게임에 확장도 가능
59. 하지만 이게 끝이 아님
• 바로 제재하지는 않고 있다. 왜?
• 가령, 정확도 99%의 탐지 로직이 있다고 치자.
• 99%는 상당히 높은 정확도니까 라이브에 적용해도 되지 않을까?
• 아니오. 1%는 오인제재를 겪게 된다.
• 동접 10만 게임에 적용한다면?
• 동접 10만의 1% = 1000명
• 하루에 최소 1000명에서 많게는 만 단위의 유저가 오인제재를 경험할 수 있다.
60. 교차 검증
• 어떤 한 가지 피처만 가지고 제재하기보단
• 교차검증이 필수!
• 무조건 킥&밴이 아니라
• TradeBan과 보호모드로 피해 최소화
• 원천적으로 막지 못하더라도 작업장 효율이 떨어지게끔
61. 전쟁은 아직도 진행 중
• 처음에는 금방 끝날 줄 알았음
• 금방 끝내고 다른 거 할 수 있을 줄 알았는데
• 조직을 옮겨서 계속하게 될 줄은 몰랐어요(…)
• 이제는 저도 언제 끝날지 모르겠습니다.
• Eternal War!
• 공격을 초기에 감지할 수 있는 더 능동적인 시스템을 구상 중
출처: 밴드 오브 브라더스
62. 동료를 찾습니다! – 넥슨 데이터분석팀
• 이 전쟁을 함께 할 동료 모집 중
• 봇탐지도 뽑고 있고
• 이외에도 확률과 AI, 딥러닝 등 재미있는 주제가 많다!
• 봇탐지에도 딥러닝을 파고 있다.
• 이쪽도 재미있는 Classification 문제가 많음
• 함께할 수 있는 사람이 많이 필요합니다.
http://clien.net/cs2/bbs/board.php?bo_table=park&wr_id=
30516551
63. 도움주신 분들
• 데이터분석과 엔지니어링 관련하여 도움 주고 계신
넥슨의 라이브분석실 분들
• 같이 작업장 대응 관련하여 고민해주고 계신
배정일 님, 이은광 님, 유태경 님, 황준식 님 (가나다 순)