콘텐츠로 이동

슬롯 RTP 검증 대시보드 만들기

모바일 소셜 카지노 게임은 매달 정기점검 때 게임 로직 서버와 스핀 서버의 로직, 슬롯 밸런스를 함께 업데이트한다. 이 과정에서 두 종류의 문제가 생길 수 있다.

  • 로직 변경의 부작용: 서버 로직을 손봤는데 의도치 않게 밸런스(RTP)가 같이 달라진다.
  • 밸런스 변경 미반영: 밸런스를 고쳤는데 그 변경이 실제 결과에 제대로 적용되지 않는다.

이런 변화는 라이브 전에 잡아야 한다. 하지만 검증을 사람이 챙기다 보니 누락되거나, 변경된 로직이 배포되지 않은 채 넘어간 적이 있었다.

이번 달 점검에서 바뀐 게임이 모두 목표 RTP에 수렴하는지를 클릭 몇 번으로 다시 돌려, 빠르고 누락 없이 확인하는 방어 장치를 만든다.

시점 하는 일
점검 직후 바뀐 게임만 골라 한 번에 재검증
검증 중 진행 상황을 실시간으로 보고, 필요하면 바로 멈추고 다시 실행
검증 후 목표를 벗어난 RTP를 색으로 바로 식별
이력 관리 게임별 최근 실행 시각과 결과를 표로 남겨 점검 회차 간 비교
  • 검증 대상 게임을 자동으로 나열하고, 이름 검색과 타입 필터로 이번 점검 대상만 추린다.
  • 게임 종류에 맞는 시뮬레이터를 자동으로 골라 실행한다. 사용자는 실행 방법을 몰라도 된다.
  • 선택한 게임(Run Selected)이나 목록 전체(Run All)를 순차 실행한다.
  • 진행률을 실시간으로 보여 주고, 오래 걸리는 작업도 언제든 멈출 수 있다.
  • RTP, STD, 누적 스핀 수, 소요 시간, 최근 실행 시각을 표로 보여 주고 이상 값은 붉게 강조한다.
  • 같은 게임을 여러 번 돌리면 결과를 누적·합산해 수치가 점점 안정된다.
  • Buy Feature처럼 여러 버전이 있는 게임은 결과를 나란히 비교(A/B)한다.
  1. 대시보드에 접속하면 게임 목록이 표시된다.
  2. 검색과 타입 필터로 이번 점검에서 바뀐 게임만 추린다.
  3. 반복 횟수를 고른다. 프리셋은 1만, 100만, 1천만, 1억이다.
  4. Run Selected 또는 Run All로 실행한다.
  5. 완료되면 RTP와 STD가 표에 갱신된다.
  6. 붉게 표시된 값을 점검하고, 필요하면 횟수를 키워 한 번 더 돌려 수치를 확정한다.
항목 의미
RTP 환수율(%). 설계상 돌려주는 비율. 목표치 부근으로 수렴해야 정상
STD 결과의 표준편차(변동성). 클수록 당첨 편차가 큰 게임
Spins 누적 시뮬레이션 횟수. 많을수록 RTP 추정이 정확
Duration 시뮬레이션에 걸린 시간
Latest Run 마지막 실행 시각

반복 횟수가 적으면 RTP가 출렁이므로, 횟수를 키워 다시 돌려야 수렴 여부를 판단할 수 있다.

  • Client: React 18 + Vite + Tailwind CSS. 다크 테마 단일 페이지 대시보드.
  • Server: Node.js(Express). 별도 DB 없이 결과를 파일(server/results/)로 관리하고, 외부 시뮬레이터를 child_process로 실행한다.
  • 실시간 진행률: Server-Sent Events(SSE)로 시뮬레이션 진행률을 UI에 스트리밍한다.

밸런스 파일명 접두사로 게임 타입을 추론해 알맞은 시뮬레이터를 호출한다.

접두사 시뮬레이터
A~H SlotSimulator.exe (C++)
X/Y/Z SlotSimulatorZ.exe (C++)
S 스핀 서버 (Python)
W SlotSimulatorW.exe (C++)
  • 밸런스 파일은 balance/ 폴더에서 자동 탐색하고, legacy/·archive/ 하위 폴더는 제외한다.
  • C++ 시뮬레이터는 최소 반복 횟수 10,000을 요구하므로 서버가 자동으로 보정한다.
  • 이후 추가될 W 타입 슬롯도 바로 붙일 수 있게 분기를 미리 만들어 두었다.
  • 단일 포트(80) 배포: 빌드한 프론트엔드를 Express가 함께 서빙해서 Node 프로세스 하나로 UI와 /api를 같은 포트에서 제공한다.
  • 상시 운영: 팀의 Windows 빌드 머신에 작업 스케줄러(SYSTEM 계정, 부팅 시 자동 시작, 실패 시 재시작)로 등록했다. 등록은 deploy/register-task.ps1 스크립트로 한다.
  • 빌드 머신과의 공존: 시뮬레이터 자식 프로세스의 우선순위를 낮춰 서버 빌드 같은 다른 작업에 지장이 없게 했다. CPU 코어 수 제한은 따로 두지 않았다.
  • 점검 후 변경분 검증이 매달 반복하는 루틴으로 자리 잡아 검증 누락을 막는다.
  • 게임 종류별 실행 방법을 몰라도 밸런스 기획자와 개발자 누구나 클릭만으로 검증한다.
  • 여러 게임을 한 번에 점검해 검증 리드타임이 줄었다.
  • 이상 값 강조로 밸런스 오류를 일찍 발견한다.
  • 설치 없이 브라우저로 접속하는 팀 공용 상시 서비스가 되었다.