f-lab-edu / league-of-legends-data-solution

‘리그 오브 레전드’를 벤치마킹해서 플레이어의 행동 이벤트를 발생하는 API를 통해 실시간으로 데이터가 잘 흐를 수 있도록 데이터 솔루션을 제공합니다.
2 stars 0 forks source link

[Feat] 실시간 플레이어 이벤트 API #1

Closed Ra99it closed 3 months ago

Ra99it commented 3 months ago

'리그 오브 레전드'를 벤치마킹 해서 제작한 Log Generator API 입니다. 사용자의 행동 분석과 마우스 좌표값을 추적 해 이상탐지를 하기 위해 제작되었습니다.

Azir Viktor Orianna Vex Ryze Zilean
Azir Viktor Orianna Vex Ryze Zilean
일반유저 의심유저 일반유저 일반유저 일반유저 일반유저
Ari Anivia AurelionSol Lux Malzahar Neeko
Ahri Anivia AurelionSol Lux Malzahar Neeko
일반유저 일반유저 일반유저 일반유저 일반유저 일반유저
Sylas Syndra Taliyah Xerath Vladimir
Sylas Syndra Taliyah Xerath Vladimir
일반유저 일반유저 일반유저 일반유저 일반유저 일반유저

  1. 해당 시나리오에서의 플레이어는 100명입니다. 플레이어의 수는 조정 가능합니다.
  2. 10명의 인원제한을 가진 방을 생성합니다.
  3. 총 Player/10 개의 방을 생성합니다. 플레이어 수의 따라 방의 수는 결정됩니다.
  4. 챔피언(= 캐릭터)은 랜덤으로 생성됩니다.
  5. Viktor를 제외한 다른 챔피언은 정상적인 플레이어입니다.
  6. Viktor를 플레이하는 플레이어는 외부 프로그램을 사용하고 있는 유저입니다.
  7. Viktor 사용자는 정상적인 사용자보다 마우스 좌표 이상값의 확률이 정상적인 사용자보다 많습니다.
  8. Viktor 사용자는 생성된 방에 없을 수 도 있습니다.

생성되는 로그
  {        
            "datetime":"2024-03-24T11:25:29.845Z",
            "method":"\/move",
            "ingametime":"0:0",
            "ip":"192.168.0.50",
            "x":"277",
            "y":"-351",
            "deathCount":"0",
            "id":"b405fd3c-785b-4e42-a825-52a75f3d82a4",
            "inputkey":"b",
            "account":"testAccount_56",
            "champion":"vex",
            "status":"0"
  } 

로그는 Ip, DateTime, Account, GameTime,Method, Deadcount, InputKey,Status, X, Y, Champion을 생성하고, Kafka로 전송하게 됩니다.

DateTime은 해당 로그가 생성된 시간을 수집하고, GameTime은 해당 게임의 진행시간을 수집하게 됩니다.

Method Description
/move 마우스를 클릭 할 때, 출력되는 메소드입니다. 메소드 호출 시 마우스의 x,y 좌표를 저장합니다.
/getItem 아이템을 샀을 때 호출되는 메소드입니다. 한명 당 6번만 호출됩니다.
/wait 사용자가 멈춰있는 상태입니다.

Move 메소드는 정말 높은 확률로 일정한 마우스 좌표로 움직이며, 낮은 확률로 좌표가 변동이 크게 마우스 좌표가 움직입니다.

좌표가 불규칙적으로 움직이는 것으로 이상을 탐지하는 것이 아니라, DatetimeGameTime과 비교해서 너무 짧은 시간에

마우스의 좌표가 불규칙 하게 변동폭이 크다면, 이상을 의심할 수 있다고 판단했습니다.

inputkey는 해당 유저가 키를 입력할 때 수집되는 로그입니다. 해당 API는 "리그오브레전드"를 참조해서 높은 확률로 q,w,e,r,d,f를 입력받고

낮은 확률로 alt, tab의 키를 입력하도록 했습니다. 게임 중 일반적이지 않은 키 입력은 중요한 판단 중 하나라고 생각했습니다.

status는 해당 유저가 게임 상에서 살아있는 상태면 0, 죽어있는 상태면 1로 지정하고 deadcount를 증가시키도록 했습니다.

100명을 기준으로 시간 당 23,430개의 데이터를 생성합니다.


출처

Champions: https://www.leagueoflegends.com/ko-kr/champions/