원리

무작위성과 의사난수의 이해

로또 번호 생성기 버튼을 누르면 매번 다른 숫자가 나옵니다. 그렇다면 그 숫자는 정말 "무작위"일까요? 놀랍게도 우리가 일상에서 쓰는 거의 모든 디지털 무작위는 엄밀히 말하면 진짜 무작위가 아닙니다. 이 글은 무작위의 두 종류, 즉 의사난수물리적 난수의 차이를 쉽게 풀어 봅니다.

1. 무작위란 무엇인가

무작위(random)란 다음에 무엇이 나올지 예측할 수 없고, 각 결과가 나올 가능성이 치우치지 않은 상태를 말합니다. 동전을 던질 때 앞·뒤가 나올 확률이 각각 1/2이고, 이전 결과가 다음 결과에 영향을 주지 않는 것이 좋은 예입니다.

로또에 적용하면, 좋은 무작위 생성기는 1부터 45까지의 모든 번호가 같은 확률로 뽑혀야 하고, 한 번 뽑힌 결과가 다음 결과를 암시하지 않아야 합니다.

2. 컴퓨터의 무작위: 의사난수

컴퓨터는 본질적으로 정해진 규칙에 따라 동작하는 기계입니다. 따라서 "진짜" 무작위를 스스로 만들어 내지 못합니다. 대신 의사난수 생성기(PRNG, Pseudo-Random Number Generator)라는 알고리즘을 사용합니다.

PRNG는 시드(seed)라고 부르는 초기값에서 출발해, 복잡한 수학 연산을 반복하며 무작위처럼 보이는 숫자 열을 만들어 냅니다. 시드가 같으면 결과도 똑같이 재현됩니다. 즉, 예측 불가능해 보이지만 사실은 결정론적입니다. 그럼에도 통계적 성질(고른 분포, 패턴 없음)이 매우 좋기 때문에, 게임·시뮬레이션·번호 생성 같은 일상적 용도에는 차고 넘치게 충분합니다.

브라우저의 Math.random()이 대표적인 의사난수입니다. Qonlab 번호 생성기도 이 함수를 사용합니다. 암호학적으로 안전한 난수가 필요할 때는 crypto.getRandomValues()처럼 더 강력한 방식을 쓰지만, 로또 번호를 "재미로" 뽑는 데에는 일반 PRNG로 충분합니다.

3. 추첨기의 무작위: 물리적 난수

반면 실제 로또 추첨 방송에서 사용하는 기계는 물리적 무작위에 기반합니다. 번호가 적힌 공을 공기 압력이나 회전으로 섞은 뒤 무작위로 배출하는 방식입니다. 공의 미세한 무게 차이, 공기 흐름의 혼돈 등 통제 불가능한 물리 현상이 결합되어, 알고리즘 없이도 예측 불가능한 결과가 나옵니다.

두 방식의 차이를 정리하면 다음과 같습니다.

구분의사난수(PRNG)물리적 난수(추첨기)
출처수학 알고리즘 + 시드물리 현상(공, 공기 등)
재현성시드가 같으면 재현됨재현 불가
속도매우 빠름느림(물리적 시간 필요)
용도게임, 시뮬레이션, 번호 생성공식 추첨, 보안

4. Qonlab 생성기는 어떻게 동작하나

Qonlab의 번호 생성기는 단순하고 투명한 방식을 따릅니다. 동작 과정은 다음과 같습니다.

  1. 1부터 45까지의 숫자를 담은 후보 목록을 만듭니다.
  2. Math.random()으로 후보 중 하나를 무작위로 골라 꺼냅니다.
  3. 꺼낸 숫자는 후보에서 제거해, 같은 숫자가 두 번 나오지 않게 합니다.
  4. 이 과정을 7번 반복해 6개의 당첨 번호와 1개의 보너스 번호를 만듭니다.
  5. 앞의 6개는 보기 좋게 오름차순으로 정렬해 표시합니다.

이 방식은 "뽑은 것을 다시 넣지 않는" 추첨 방식과 동일하므로, 실제 로또와 같은 구조의 무작위 조합을 만들어 냅니다. 모든 연산은 사용자의 브라우저 안에서만 일어나며, 생성된 번호는 어디에도 저장되지 않습니다.

5. 생성기로 충분한 이유

"의사난수면 어차피 가짜인데, 그걸로 뽑은 번호가 의미가 있나요?"라는 질문이 나올 수 있습니다. 결론부터 말하면 전혀 문제가 없습니다. 어차피 어떤 번호 조합이든 당첨 확률은 정확히 똑같기 때문입니다. 생성기의 목적은 당첨 확률을 높이는 것이 아니라, 사람의 편향(특정 숫자 선호, 생일 쏠림 등) 없이 고르게 번호를 고르는 것을 돕는 것입니다.

핵심 정리. 컴퓨터 생성기든 추첨기든, 사람이 직접 고르든, 어떤 방법으로 번호를 정해도 당첨 확률은 동일합니다. 생성기는 "더 잘 나오는" 도구가 아니라, "편하고 치우치지 않게" 번호를 정하는 도구입니다.