JAY Project
JAY Project

컴퓨터의 랜덤은 진짜 무작위일까? 난수 생성의 원리

2026-05-14| Jay

주사위 앱을 굴리거나 로또 번호를 생성할 때, 컴퓨터는 어떻게 "랜덤"한 숫자를 만들까요? 사실 컴퓨터는 정해진 명령을 정확히 수행하는 기계라서, 원리적으로는 스스로 무작위를 만들어낼 수 없습니다. 그런데도 우리가 매일 쓰는 랜덤 뽑기는 잘 작동합니다. 이 역설의 답이 바로 오늘의 주제, 난수 생성의 원리입니다.

의사난수(PRNG): 계산으로 만드는 "랜덤처럼 보이는" 수

컴퓨터가 만드는 난수 대부분은 **의사난수(Pseudo-Random Number)**입니다. 이름 그대로 "가짜(pseudo) 난수" — 실제로는 수학 공식으로 계산된 결과입니다.

원리는 간단합니다:

  1. **시드(seed)**라는 시작값을 하나 정한다 (보통 현재 시각 등을 사용)
  2. 시드를 알고리즘(수학 공식)에 넣어 숫자를 하나 뽑는다
  3. 그 결과를 다시 공식에 넣어 다음 숫자를 뽑는다 — 무한 반복

핵심 성질은 두 가지입니다:

성질 의미
결정론적 같은 시드로 시작하면 항상 똑같은 숫자열이 나옴
통계적 무작위 결과만 보면 패턴을 찾을 수 없고, 각 숫자가 고르게 분포함

"결정론적인데 무작위"라니 모순처럼 들리지만, 그렇지 않습니다. 만드는 과정은 완전히 정해져 있어도, 결과 숫자열이 통계적으로 진짜 난수와 구분되지 않으면 실용적으로는 난수로 쓸 수 있다는 뜻입니다. 잘 설계된 현대 PRNG는 수많은 통계 검정을 통과하며, 게임·시뮬레이션·뽑기 같은 용도에서 진짜 난수와 사실상 구분되지 않습니다.

진짜 난수(TRNG): 자연에서 가져오는 무작위

계산이 아니라 물리 현상 자체의 예측 불가능성에서 난수를 얻는 방법도 있습니다. 이를 하드웨어 난수 또는 **TRNG(True Random Number Generator)**라고 부릅니다.

  • 전자 회로의 열잡음
  • 방사성 붕괴 시점
  • 대기 잡음 (random.org이 사용하는 방식으로 유명)
  • 마우스 움직임·키 입력 타이밍 같은 사용자 행동

이런 현상은 되풀이해도 같은 결과가 나오지 않으므로, 시드도 알고리즘도 없는 진짜 무작위입니다.

구분 의사난수 (PRNG) 진짜 난수 (TRNG)
생성 방법 수학 알고리즘 물리 현상 측정
재현 가능성 같은 시드면 재현 가능 재현 불가능
속도 매우 빠름 상대적으로 느림
필요 장비 없음 (소프트웨어만) 측정 하드웨어 필요
주 용도 게임, 시뮬레이션, 뽑기 암호 키 생성, 보안

일상 뽑기에는 PRNG로 충분한 이유

"가짜 난수라니, 그럼 뽑기 결과도 못 믿는 것 아닌가?" 하는 걱정은 하지 않으셔도 됩니다. 용도에 따라 필요한 난수의 수준이 다르기 때문입니다.

✅ 일상 용도 (뽑기·게임·시뮬레이션)

여기서 중요한 것은 공평한 분포예측 불가능한 체감입니다. 주사위를 굴렸을 때 1~6이 고르게 나오고, 다음 눈을 아무도 못 맞히면 충분합니다. 현대 PRNG는 이 조건을 넉넉히 만족합니다. 시드가 매번 달라지므로(현재 시각 등) 사용자 입장에서 결과를 예측할 방법도 없습니다.

🔒 암호학 용도 (비밀번호·암호 키·보안 토큰)

반면 보안에서는 상대가 작정하고 다음 값을 역산하려는 공격자입니다. 일반 PRNG는 출력을 충분히 관찰하면 내부 상태를 추정해 다음 값을 예측할 수 있는 경우가 있어 위험합니다. 그래서 암호학에서는 **CSPRNG(암호학적으로 안전한 의사난수 생성기)**를 씁니다 — 출력을 아무리 봐도 다음 값을 계산할 수 없도록 설계되고, 하드웨어 난수를 시드로 섞어 예측 가능성을 차단합니다.

정리하면: 뽑기·게임 = PRNG로 충분, 보안 = CSPRNG 필수. 로또 번호 생성기나 주사위 앱이 PRNG를 쓰는 것은 전혀 문제가 아니라, 용도에 맞는 올바른 선택입니다.

흔한 오해: "이제 나올 때가 됐다" — 도박사의 오류

난수 이야기에서 빼놓을 수 없는 것이 **도박사의 오류(Gambler's Fallacy)**입니다.

  • "주사위에서 6이 다섯 번 연속 안 나왔으니, 이번엔 6이 나올 때가 됐어"
  • "이 로또 번호는 최근에 안 나왔으니 곧 나올 차례야"

모두 착각입니다. 공정한 난수는 기억이 없습니다. 주사위를 던질 때마다 6이 나올 확률은 언제나 1/6이고, 직전에 무슨 눈이 나왔는지는 아무 영향을 주지 않습니다. "다섯 번 연속 6이 안 나옴"은 이미 지나간 사건일 뿐, 다음 던지기의 확률을 바꾸지 못합니다.

이 오류가 강력한 이유는 우리의 직관이 "결과는 골고루 나와야 한다"고 기대하기 때문입니다. 실제로 무작위 수열에는 연속과 쏠림이 자연스럽게 나타납니다. 같은 숫자가 연달아 나오거나, 특정 번호가 한동안 안 나오는 것이 오히려 정상입니다. 뽑기 앱에서 같은 사람이 두 번 연속 걸렸다고 해서 조작이 아닌 것과 같은 원리입니다.

직접 체감해 보기

원리를 알았으니 직접 굴려 보는 게 가장 빠릅니다. 주사위를 여러 번 굴리면서 "연속으로 같은 눈이 나오는 일"이 생각보다 자주 일어나는지 관찰해 보세요. 도박사의 오류가 왜 착각인지 몸으로 느낄 수 있습니다.

👉 주사위 굴리기 바로가기

로또 번호도 마찬가지입니다. "안 나온 번호"를 고르려 애쓰기보다, 모든 조합의 확률이 동일하다는 사실을 받아들이고 편하게 무작위 생성에 맡기는 것이 합리적입니다.

👉 로또 번호 생성기 바로가기

결론

컴퓨터의 랜덤은 대부분 계산된 의사난수지만, 그것이 "믿을 수 없다"는 뜻은 아닙니다. 잘 만든 PRNG는 일상의 모든 뽑기·게임 용도에서 진짜 난수와 구분되지 않으며, 보안이 필요한 곳에는 CSPRNG라는 더 강한 도구가 따로 있습니다. 그리고 어떤 난수를 쓰든 기억하세요 — 난수에는 기억이 없습니다. "나올 때가 됐다"는 느낌이 들 때가, 바로 확률을 다시 떠올릴 때입니다.

이 글과 관련된 유용한 도구

🚀 JAY Project · 60+ 무료 웹 도구 모음

취미로 만드는 60+ 무료 웹 도구를 한곳에서. 회원가입 없이 즉시 사용, 입력값은 외부로 전송되지 않습니다.

관련 카테고리 더 보기