‘진짜 랜덤’으로 섞는다는 것: 피셔-예이츠 셔플과 공정한 무작위

“랜덤으로 섞었다”는 말은 쉽지만, 정말 모든 순서가 같은 확률로 나오게 섞는 건 생각보다 어렵습니다. 사람 손은 물론이고, 그럴듯해 보이는 컴퓨터 코드조차 특정 결과가 더 잘 나오는 편향을 품기 쉽거든요. 이 글은 손 셔플이 왜 안 섞이는지부터, 나쁜 알고리즘의 편향 사례, 그리고 그 문제를 깔끔하게 푸는 피셔-예이츠 셔플의 원리까지 그림 그리듯 풀어봅니다.

최종 업데이트: 2026년 7월

1. 사람 손 셔플은 왜 안 섞일까

제비뽑기 쪽지를 통에 넣고 흔들거나, 카드를 몇 번 섞는 걸 떠올려 보세요. 문제는 두 가지입니다.

즉 손 셔플은 덜 섞이고, 의심을 지울 수 없습니다. 그래서 순서가 중요한 자리일수록 계산으로 섞는 쪽이 낫습니다. 그런데 계산이라고 다 공정한 건 아닙니다.

2. 그럴듯한 셔플의 함정: 편향 사례

프로그래머가 셔플을 처음 짤 때 흔히 저지르는 실수가 있습니다. 대표적인 두 가지만 볼게요.

포인트는 이겁니다. 셔플의 공정성은 “느낌상 잘 섞인 것 같다”로 판단할 수 없고, 모든 순서가 정확히 같은 확률인지를 따져야 합니다. 그리고 그걸 보장하는 표준 답안이 이미 있습니다.

3. 피셔-예이츠 셔플: 상자에서 하나씩 꺼내기

피셔-예이츠(Fisher-Yates) 셔플의 아이디어는 허무할 만큼 단순합니다. “상자에 전부 넣고, 하나씩 꺼내서 줄 세우기”를 컴퓨터로 옮긴 것뿐이에요.

  1. 이름 5개가 상자에 들어 있다고 상상하세요.
  2. 상자에서 무작위로 하나를 꺼내 1번 자리에 놓습니다. 5개 중 하나니까 각자 1/5 확률.
  3. 남은 4개 중 하나를 꺼내 2번 자리에 놓습니다. 각자 1/4 확률.
  4. 이걸 상자가 빌 때까지 반복합니다.

어떤 특정 순서가 나올 확률은 1/5 × 1/4 × 1/3 × 1/2 × 1, 즉 120가지 순서가 전부 정확히 1/120입니다. 어느 순서도 더 잘 나오거나 덜 나올 수 없다는 게 곱셈만으로 증명되죠. 실제 구현에서는 상자를 따로 두는 대신 목록 안에서 “아직 안 뽑힌 구간”과 자리를 맞바꾸는 식으로 처리하는데, 원리는 같습니다. 2번 함정과의 차이는 딱 하나입니다. 이미 자리가 정해진 항목은 다시 건드리지 않는다는 것. 그 한 끗이 편향을 없앱니다.

4. 난수의 재료: 암호학적 난수란

피셔-예이츠는 “어떻게 섞을지”의 답이고, 남은 문제는 “매번 어느 걸 꺼낼지”를 정하는 난수입니다. 컴퓨터의 흔한 난수(유사난수)는 사실 정해진 수식이 만들어내는 수열이라서, 시작값을 알면 다음 수를 전부 예측할 수 있습니다. 게임 효과음 정도엔 충분하지만, 이해관계가 걸린 순서 정하기엔 찜찜하죠.

그래서 등급이 다른 난수가 있습니다. 암호학적 난수는 비밀번호나 보안 키를 만들 때 쓰는 수준의 난수로, 지금까지의 출력을 다 지켜봐도 다음 값을 예측할 수 없도록 설계되어 있습니다. 요즘 브라우저에는 이 난수 생성기(crypto)가 기본으로 내장되어 있어서, 웹 도구도 이 수준의 무작위를 쓸 수 있습니다.

정리하면 공정한 섞기의 공식은 이렇습니다. 편향 없는 알고리즘(피셔-예이츠) + 예측 불가능한 재료(암호학적 난수). 둘 중 하나라도 빠지면 어딘가에 구멍이 생깁니다.

5. 이 도구의 공정성 장치

순서 정하기 도구는 위 공식을 그대로 따르고, 여기에 사람 쪽 구멍을 막는 장치를 더했습니다.

편향 없는 알고리즘과 암호학적 난수로 섞고, 다시 섞은 횟수와 재현 링크까지 남깁니다.

순서 정하기로 공정하게 섞기

6. 자주 묻는 질문

같은 사람이 두 번 연속 1번이 나왔는데, 고장 아닌가요?

아니요, 오히려 자연스러운 일입니다. 10명 기준으로 같은 사람이 두 번 연속 1번일 확률은 1/100인데, 섞기를 반복하다 보면 이런 일은 꼭 일어납니다. 진짜 무작위는 우리 직감보다 훨씬 자주 우연의 일치를 만들어냅니다. 매번 골고루 돌아가는 결과가 나온다면 그게 오히려 무작위가 아니라는 신호예요.

재현 링크가 있으면 결과를 미리 알 수 있는 것 아닌가요?

재현 링크는 섞기가 끝난 뒤에 만들어지는, 이미 나온 결과를 다시 보여주는 링크입니다. 다음 섞기의 결과를 예측하는 데 쓸 수 있는 정보는 담겨 있지 않습니다.

제비뽑기나 사다리타기보다 나은 점이 뭔가요?

결과의 무작위성 자체는 잘 만든 제비뽑기도 확보할 수 있습니다. 차이는 균일함의 보장과 증빙입니다. 손으로 만든 제비는 접힌 모양·위치 편향을 배제하기 어렵고, 과정을 다시 보여줄 수 없죠. 참고로 사다리타기는 또 다른 재미가 있는 방식인데, 그 구조가 궁금하다면 사다리타기 원리와 확률 글을 읽어 보세요.

암호학적 난수면 로또 번호도 잘 맞을까요?

그건 별개 문제입니다. 암호학적 난수는 “예측 불가능함”을 보장할 뿐, 당첨 확률을 높여주지는 않습니다. 어떤 방법으로 뽑아도 로또의 기대값은 같아요. 다만 남들이 안 고를 법한 조합을 고른다는 재미는 있죠.