이름 뽑기 돌림판, 진짜 공정할까 확인법

모임에서 발표자나 청소 당번을 정하려고 온라인 돌림판을 돌렸는데 유독 같은 사람만 자꾸 뽑히면 조작이 아닌지 의심이 듭니다. 화려하게 도는 애니메이션 뒤에서 당첨자가 실제로 어떻게 결정되는지는 코드를 보지 않고는 알 수 없습니다. 이 글은 어떤 온라인 추첨 도구든 직접 확인할 수 있는 방법을 정리합니다.
요약 ① 대부분의 랜덤 돌림판은 애니메이션이 시작되기 전에 당첨자를 먼저 정하고, 그 위치에 멈추도록 회전각을 역산합니다. ②
Math.random()과crypto.getRandomValues()는 난수의 출처와 편향 처리 방식이 다릅니다. ③ 조각 크기나 글자 길이는 당첨 확률에 영향을 주지 않습니다 — 각도는 항상 360도를 항목 수로 나눈 값입니다.
"이거 조작 아니야?" 의심이 생기는 이유
돌림판은 원 안을 여러 조각으로 나누고 회전시켜 멈춘 자리를 보여주는 방식입니다. 그런데 여러 번 돌렸을 때 같은 이름이 반복해서 나오면 참가자들은 확률 계산보다 먼저 프로그램이 특정 항목을 봐준다는 의심을 하게 됩니다.
실제로는 조각이 5개면 매번 20%, 10개면 매번 10%라는 동일한 확률로 독립적으로 뽑힙니다. 동전을 10번 던져 앞면이 7번 나와도 동전이 조작된 게 아니듯, 몇 번의 결과만으로는 편향 여부를 판단할 수 없습니다.
문제는 눈으로 보이는 회전과 실제로 결과를 정하는 계산이 분리되어 있다는 점입니다. 화면에 보이는 건 이미 정해진 결과를 향해 도는 연출이고, 진짜 검증 대상은 그 결과를 뽑을 때 쓰는 난수입니다.
온라인 추첨이 진짜 공정한지 확인하는 방법
도구를 믿지 않고 직접 검증하려면 두 가지를 확인하면 됩니다. 하나는 반복 시행으로 통계를 내는 방법이고, 다른 하나는 코드가 어떤 난수 함수를 쓰는지 확인하는 방법입니다.
같은 목록으로 여러 번 돌려서 비율을 세어봅니다
항목 5개로 이루어진 목록을 30번 정도 반복해서 돌리고 각 항목이 몇 번 당첨됐는지 기록해봅니다. 완벽하게 20%씩 나오지는 않아도 대수의 법칙에 따라 시행 횟수가 늘수록 각 항목의 당첨 비율이 1/n에 가까워져야 합니다.
특정 항목만 유난히 자주 나오는 패턴이 30회, 50회를 넘어서도 계속된다면 그때 의심할 근거가 생깁니다. 몇 번의 우연한 결과만으로 편향을 단정하는 것은 통계적으로 근거가 약합니다.
난수 함수가 무엇인지 페이지 소스에서 확인합니다
브라우저 개발자 도구(F12)를 열고 페이지 소스나 실행 중인 스크립트를 보면 Math.random()을 쓰는지 crypto.getRandomValues()를 쓰는지 확인할 수 있습니다. Math.random()은 통계적 분산을 목적으로 설계된 의사난수이고, crypto.getRandomValues()는 운영체제가 제공하는 암호학적으로 안전한 난수를 사용합니다.
또 하나 확인할 점은 나머지 연산(모듈로)으로 항목 개수를 나눌 때 생기는 모듈로 편향을 처리하는지입니다. 난수값을 그대로 항목 수로 나누면 특정 구간의 값이 살짝 더 자주 걸리는 미세한 편향이 생기는데, 이를 없애려면 상한선을 넘는 값은 버리고 다시 뽑는 거부 샘플링(rejection sampling)이 필요합니다.
저희 도구로 확인하기. 매번 개발자 도구를 열어 소스를 뒤지고 수십 번 수동으로 세어보는 대신, 암호학적 난수와 거부 샘플링으로 계산 방식을 공개한 돌림판을 바로 써볼 수 있습니다.
무료 · 가입 불필요 · 암호학적 난수(crypto.getRandomValues) 기반 공정 추첨

돌림판에서 자주 헷갈리는 부분
| 궁금한 점 | 사실 |
|---|---|
| 조각 크기가 다르면 확률도 다른가요 | 아니요. 조각 각도는 항상 360도를 항목 수로 나눈 값으로 고정되고, 항목 텍스트 길이는 각도 계산에 영향을 주지 않습니다. |
| 이름이 길어서 잘려 보이는데 확률에 영향 있나요 | 아니요. 화면에 보이는 글자만 일정 길이로 줄여 표시할 뿐이고 당첨 계산과는 무관합니다. |
| 같은 사람이 연속으로 뽑히면 조작인가요 | 아니요. 매 회전은 이전 결과와 무관한 독립시행이라 직전 당첨자가 다시 뽑힐 확률도 동일합니다. |
| 여러 명을 순서대로 뽑을 때도 확률이 같나요 | 당첨자를 목록에서 제거하고 다시 돌리면 남은 항목 수를 기준으로 매번 동일한 확률이 적용됩니다. |
정리
온라인 돌림판이 공정한지는 몇 번 돌려본 느낌이 아니라 두 가지로 확인합니다. 반복 시행으로 당첨 비율이 1/n에 수렴하는지 보는 통계적 검증과, 어떤 난수 함수를 쓰는지 코드로 보는 기술적 검증입니다.
조각 크기나 글자 길이, 직전 당첨자 같은 요소는 확률 계산과 무관합니다. 계산 방식 자체가 암호학적 난수와 거부 샘플링을 쓰는지가 핵심입니다.
무료 · 가입 불필요 · 암호학적 난수(crypto.getRandomValues) 기반 공정 추첨
자주 묻는 질문
Math.random과 crypto.getRandomValues는 어떻게 다른가요
Math.random()은 자바스크립트 엔진이 통계적 분산을 목적으로 만든 의사난수 생성기로, 시드나 알고리즘이 암호학적 안전성을 보장하지 않습니다. crypto.getRandomValues()는 운영체제가 제공하는 암호학적으로 안전한 난수 생성기(CSPRNG)를 사용해 예측 가능성을 낮춘 값을 돌려줍니다.
조각 크기가 다르면 당첨 확률도 달라지나요
아니요. 돌림판을 그릴 때 조각 하나의 각도는 항상 360도를 전체 항목 수로 나눈 값으로 계산됩니다. 항목이 6개면 모든 조각이 60도로 동일하고, 글자가 길어 화면에서 줄여 보이더라도 각도 계산과는 무관합니다.
여러 명을 순서대로 뽑으려면 어떻게 하나요
당첨된 항목을 목록에서 자동으로 제거하는 옵션을 켜고 반복해서 돌리면 됩니다. 한 명이 뽑힐 때마다 남은 항목 수가 하나씩 줄어들면서 그 시점의 남은 인원 기준으로 동일한 확률이 다시 적용됩니다.
입력한 이름이 서버에 저장되나요
아니요. 항목 입력부터 난수 추첨, 결과 표시까지 전 과정이 브라우저 안에서만 처리되고 서버로 전송되지 않습니다. 페이지를 새로고침하면 추첨 기록도 함께 사라집니다.
