Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

NDC17 장창완(최종)

<마비노기 영웅전>의 사례에 기반하여 다음의 내용을 설명합니다.
1. 국내 및 해외에서 라이브 서비스 중에 발생하는 작업장 이슈에 대응하기 위해서 실시간 로그 수집 프로세스를 구축하면서 고민하였던 내용과
2. 수집한 로그 데이터를 활용하여 온라인 액션 게임에서 캐릭터 애니메이션 패턴간의 유사도(TF-IDF, Cosine Similarity)를 분석하여 현업 실무의 어뷰징 탐지에 활용한 사례를 공유합니다.

라이브 서비스 환경에서 국내 및 해외의 실시간 로그 수집에 대해서 고민하시는 개발자나 온라인 게임에서의 봇탐지에 관심있는 분석가들에게 유용한 사례를 소개해드릴 수 있을 것으로 생각합니다.

NDC17 장창완(최종)

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

×