슬롯 RTP 검증 대시보드 만들기
모바일 소셜 카지노 게임은 매달 정기점검 때 게임 로직 서버와 스핀 서버의 로직, 슬롯 밸런스를 함께 업데이트한다. 이 과정에서 두 종류의 문제가 생길 수 있다.
- 로직 변경의 부작용: 서버 로직을 손봤는데 의도치 않게 밸런스(RTP)가 같이 달라진다.
- 밸런스 변경 미반영: 밸런스를 고쳤는데 그 변경이 실제 결과에 제대로 적용되지 않는다.
이런 변화는 라이브 전에 잡아야 한다. 하지만 검증을 사람이 챙기다 보니 누락되거나, 변경된 로직이 배포되지 않은 채 넘어간 적이 있었다.
이번 달 점검에서 바뀐 게임이 모두 목표 RTP에 수렴하는지를 클릭 몇 번으로 다시 돌려, 빠르고 누락 없이 확인하는 방어 장치를 만든다.
| 시점 | 하는 일 |
|---|---|
| 점검 직후 | 바뀐 게임만 골라 한 번에 재검증 |
| 검증 중 | 진행 상황을 실시간으로 보고, 필요하면 바로 멈추고 다시 실행 |
| 검증 후 | 목표를 벗어난 RTP를 색으로 바로 식별 |
| 이력 관리 | 게임별 최근 실행 시각과 결과를 표로 남겨 점검 회차 간 비교 |
- 검증 대상 게임을 자동으로 나열하고, 이름 검색과 타입 필터로 이번 점검 대상만 추린다.
- 게임 종류에 맞는 시뮬레이터를 자동으로 골라 실행한다. 사용자는 실행 방법을 몰라도 된다.
- 선택한 게임(Run Selected)이나 목록 전체(Run All)를 순차 실행한다.
- 진행률을 실시간으로 보여 주고, 오래 걸리는 작업도 언제든 멈출 수 있다.
- RTP, STD, 누적 스핀 수, 소요 시간, 최근 실행 시각을 표로 보여 주고 이상 값은 붉게 강조한다.
- 같은 게임을 여러 번 돌리면 결과를 누적·합산해 수치가 점점 안정된다.
- Buy Feature처럼 여러 버전이 있는 게임은 결과를 나란히 비교(A/B)한다.
사용 흐름
섹션 제목: “사용 흐름”- 대시보드에 접속하면 게임 목록이 표시된다.
- 검색과 타입 필터로 이번 점검에서 바뀐 게임만 추린다.
- 반복 횟수를 고른다. 프리셋은 1만, 100만, 1천만, 1억이다.
- Run Selected 또는 Run All로 실행한다.
- 완료되면 RTP와 STD가 표에 갱신된다.
- 붉게 표시된 값을 점검하고, 필요하면 횟수를 키워 한 번 더 돌려 수치를 확정한다.
| 항목 | 의미 |
|---|---|
| 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 코어 수 제한은 따로 두지 않았다.
- 점검 후 변경분 검증이 매달 반복하는 루틴으로 자리 잡아 검증 누락을 막는다.
- 게임 종류별 실행 방법을 몰라도 밸런스 기획자와 개발자 누구나 클릭만으로 검증한다.
- 여러 게임을 한 번에 점검해 검증 리드타임이 줄었다.
- 이상 값 강조로 밸런스 오류를 일찍 발견한다.
- 설치 없이 브라우저로 접속하는 팀 공용 상시 서비스가 되었다.