컴퓨터는 정말 랜덤을 만들 수 있을까?
컴퓨터는 정말 랜덤을 만들 수 있을까?
1. 프롤로그
우리는 일상에서 '랜덤'이라는 말을 정말 자연스럽게 사용합니다.
"랜덤으로 한 명 뽑자."
"랜덤으로 순서를 정하자."
"Math.random()으로 하나 뽑자."
어릴 때 했던 가위바위보부터 주사위, 동전 던지기, 게임의 아이템 드롭, 로또 번호까지. 세상에는 랜덤으로 이루어진 일들이 참 많아 보입니다. 그리고 개발을 시작하면 자연스럽게 Math.random()이나 Random.nextInt() 같은 함수도 만나게 됩니다. 이름부터 'Random'이니, 당연히 컴퓨터도 랜덤을 만들어주는 줄 알았습니다.
저 역시 그랬습니다.
그런데 어느 날 문득 이런 생각이 들었습니다.
컴퓨터는 정말 랜덤을 만들 수 있을까?
처음에는 단순한 호기심이었습니다. 하지만 조금씩 찾아보다 보니 의외의 사실을 알게 되었습니다.
사실 컴퓨터는 스스로 랜덤을 만들지 못합니다.
"잠깐, 무슨 소리지?"
분명 Math.random()은 매번 다른 숫자를 반환하는데 말이죠.
그렇다면 우리가 지금까지 랜덤이라고 믿었던 것은 도대체 무엇이었을까요?
조금 더 생각해 보면, 이 질문은 컴퓨터만의 이야기가 아닙니다.
우리는 세상을 보며 우연이라고 말하는 일이 참 많습니다.
동전을 던져 앞면이 나온 것도 우연.
주사위를 던져 6이 나온 것도 우연.
로또에 당첨된 것도 우연.
하지만 정말 그럴까요?
주사위가 굴러가는 모습을 떠올려 봅시다.
던지는 힘.
손에서 놓는 각도.
주사위의 회전.
공기의 저항.
바닥의 재질.
튀어 오르는 탄성.
사실 결과를 결정하는 원인은 셀 수 없이 많습니다.
만약 이 모든 조건을 완벽하게 동일하게 만들 수 있다면, 주사위는 항상 같은 숫자가 나오지 않을까요?
동전도 마찬가지입니다.
똑같은 위치에서,
똑같은 힘으로,
똑같은 회전을 주고,
똑같은 환경에서 던진다면
과연 결과는 매번 달라질까요?
어쩌면 우리가 랜덤이라고 부르는 것은, 세상이 랜덤이어서가 아니라 우리가 원인을 모두 알지 못하기 때문일지도 모릅니다.
그래서 인간은 '확률'이라는 개념을 만들었습니다.
우리는 흔히 확률을 '랜덤한 세상을 설명하는 수학'이라고 생각합니다.
하지만 반대로 생각해 보면 어떨까요?
확률은 세상이 랜덤이라서 만든 것이 아니라, 세상의 모든 원인을 계산할 수 없기 때문에 만들어낸 언어는 아닐까요?
우리는 미래를 계산할 수 없으니 50%, 30%, 90%라는 숫자로 세상을 표현합니다.
즉, 확률은 무지를 표현하는 가장 똑똑한 방법일 수도 있습니다.
이쯤 되면 처음의 질문으로 다시 돌아오게 됩니다.
인간은 모든 원인을 알 수 없기 때문에 랜덤을 이야기합니다.
그렇다면 모든 계산을 수행하는 컴퓨터는 어떨까요?
컴퓨터는 인간보다 훨씬 정확하게 계산합니다.
수십억 번의 연산도 실수 없이 수행합니다.
그렇다면 컴퓨터야말로 진짜 랜덤을 만들어낼 수 있을까요?
놀랍게도 정답은 반대입니다.
컴퓨터는 너무 정확하기 때문에, 오히려 랜덤을 만들 수 없습니다.
그리고 이 사실은 우리가 생각하는 컴퓨터의 본질과도 깊게 연결되어 있습니다.
이번 글에서는 컴퓨터가 왜 랜덤을 만들지 못하는지, 그럼에도 어떻게 랜덤처럼 보이는 숫자를 만들어내는지, 그리고 마지막에는 정말 세상에 랜덤이라는 것이 존재하는가라는 조금 철학적인 질문까지 함께 이야기해 보려고 합니다.
2. 컴퓨터는 왜 랜덤을 만들지 못할까?
앞에서 우리는 이런 질문을 던졌습니다.
혹시 랜덤이라는 것은 우리가 원인을 모르기 때문에 붙인 이름은 아닐까?
그렇다면 이번에는 컴퓨터를 한번 떠올려 봅시다.
대부분의 사람들은 컴퓨터가 랜덤을 굉장히 잘 만든다고 생각합니다.
개발을 해본 사람이라면 더욱 그렇습니다.
Math.random()
Java에는 Random 클래스가 있고, Python에도 random 모듈이 있습니다. 이름부터 'Random'이니, 컴퓨터가 랜덤을 만드는 건 너무나 당연한 사실처럼 느껴집니다.
그런데 놀랍게도,
컴퓨터는 랜덤을 만들지 못합니다.
처음 이 사실을 알았을 때 가장 궁금했던 것은 이것이었습니다.
"왜?"
컴퓨터가 성능이 부족해서일까요?
아니면 아직 기술이 발전하지 못해서일까요?
정답은 의외였습니다.
컴퓨터는 랜덤을 못 만드는 것이 아니라, 랜덤을 만들면 안 되는 기계였습니다.
컴퓨터는 거짓말을 하지 않는다
컴퓨터는 우리가 생각하는 것보다 훨씬 단순한 기계입니다.
주어진 규칙을 그대로 실행하는 것.
그것이 컴퓨터가 하는 일의 전부입니다.
예를 들어,
2 + 3
이라는 계산을 시켜보겠습니다.
결과는 언제나 5입니다.
오늘 계산해도 5.
내일 계산해도 5.
백만 번을 계산해도 5입니다.
컴퓨터는 기분에 따라 답을 바꾸지 않습니다.
"이번엔 다른 결과를 한번 내볼까?"
같은 즉흥성도 없습니다.
그저 주어진 규칙을 묵묵히 따를 뿐입니다.
조금 더 익숙한 예를 하나 볼까요?
function add(a, b) { return a + b; } add(3, 5)
이 함수를 한 번 실행하면 8이 나옵니다.
열 번 실행해도 8.
천 번 실행해도 8.
백만 번 실행해도 여전히 8입니다.
같은 입력을 주면,
항상 같은 결과가 나옵니다.
우리는 이런 성질을 결정론적(Deterministic) 이라고 부릅니다.
사실 우리는 이런 컴퓨터를 원한다
조금만 생각해 보면 당연한 이야기입니다.
은행 앱에서 송금을 했는데 실행할 때마다 금액이 랜덤하게 바뀐다면 어떨까요?
병원의 의료 장비가 같은 환자를 검사할 때마다 매번 다른 결과를 내놓는다면요?
비행기의 자동 조종 장치가 같은 상황에서 매번 다른 판단을 한다면 아무도 비행기를 타지 않을 것입니다.
우리는 컴퓨터가 똑똑해서 신뢰하는 것이 아닙니다.
언제나 같은 입력에는 같은 결과를 내기 때문에 신뢰하는 것입니다.
컴퓨터에게 예측 가능성은 단점이 아니라, 가장 중요한 장점입니다.
그런데 랜덤은 정반대의 성질을 가진다
이제 랜덤을 다시 생각해 봅시다.
랜덤은 무엇일까요?
예측할 수 없어야 합니다.
다음 결과를 미리 알 수 없어야 합니다.
즉,
랜덤은 예측 불가능함이 핵심입니다.
반면 컴퓨터는 어떨까요?
컴퓨터는 예측 가능함이 핵심입니다.
같은 입력이면 같은 결과.
이 규칙 하나 위에서 모든 프로그램이 동작합니다.
생각해 보면 두 개념은 서로 정반대입니다.
랜덤은 예측되면 안 되고,
컴퓨터는 예측되어야 합니다.
그래서 조금 역설적인 결론이 나옵니다.
컴퓨터는 랜덤을 만들지 못하는 것이 아니라, 만들면 안 되는 기계입니다.
만약 컴퓨터가 정말 아무 이유 없이 숫자를 바꿔버린다면, 그것은 랜덤을 잘 만드는 컴퓨터가 아니라 고장 난 컴퓨터일 것입니다.
그런데 여기서 새로운 의문이 생깁니다.
우리는 분명 Math.random()을 사용해 왔습니다.
실행할 때마다 다른 숫자가 나옵니다.
게임도 잘 돌아가고,
랜덤 추첨도 하고,
셔플도 합니다.
그렇다면 지금까지 우리가 사용했던 랜덤은 도대체 무엇이었을까요?
컴퓨터는 랜덤을 만들 수 없는데도, 어떻게 우리를 속일 만큼 랜덤처럼 보이는 숫자를 만들어낼 수 있었던 걸까요?
그 비밀은 '가짜 랜덤(Pseudo Random Number Generator)' 이라는 아주 영리한 아이디어에 숨어 있습니다.
3. 컴퓨터는 어떻게 랜덤인 척할까?
앞에서 우리는 컴퓨터가 랜덤을 만들지 못한다는 사실을 알게 되었습니다.
그런데 이상합니다.
우리는 분명 이런 코드를 수도 없이 사용해 왔습니다.
Math.random()
실행해 보면 매번 다른 숫자가 나옵니다.
0.4837264 0.1029384 0.7483621 0.2193847
분명 이전 숫자와는 다릅니다.
눈으로 보기에도 충분히 랜덤처럼 보입니다.
그렇다면 컴퓨터는 우리를 속이고 있었던 걸까요?
반은 맞고, 반은 아닙니다.
컴퓨터는 진짜 랜덤을 만들지는 못하지만, 사람이 보기에는 랜덤처럼 보이는 숫자를 만드는 방법을 찾아냈습니다.
그것이 바로 의사 난수(Pseudo Random Number Generator), 줄여서 PRNG입니다.
이름부터 재미있습니다.
'Pseudo'는 가짜, 유사한이라는 뜻입니다.
즉, PRNG는 랜덤을 만드는 알고리즘이 아니라 랜덤처럼 보이는 숫자를 만들어내는 알고리즘입니다.
모든 시작에는 Seed가 있다
PRNG에는 아주 중요한 특징이 하나 있습니다.
바로 Seed(시드) 입니다.
이름 그대로 씨앗입니다.
나무가 작은 씨앗에서 시작하듯,
랜덤 숫자도 하나의 작은 숫자에서 시작합니다.
예를 들어 Seed가 100이라고 가정해 보겠습니다.
PRNG는 이 숫자를 입력으로 받아 어떤 계산을 수행합니다.
Seed : 100 ↓ 314159 ↓ 928374 ↓ 192837 ↓ 564738 ↓ ...
우리가 보는 것은 뒤에 나오는 숫자들뿐입니다.
하지만 사실은 모두 처음 Seed 하나에서 시작된 결과입니다.
랜덤처럼 보이지만 사실은 계산 결과다
여기서 중요한 사실이 하나 있습니다.
PRNG는 주사위를 던지는 것이 아닙니다.
동전을 던지는 것도 아닙니다.
단지 이전 숫자를 가지고 다음 숫자를 계산할 뿐입니다.
조금 단순화해서 표현하면 이런 느낌입니다.
next = (현재값 * 어떤수 + 어떤수) % 어떤수
물론 실제 알고리즘은 훨씬 복잡하지만,
핵심은 하나입니다.
다음 숫자는 우연히 결정되는 것이 아니라 계산되어 결정됩니다.
그러니까 PRNG는 사실 숫자를 '생성'하는 것이 아니라,
숫자를 계산하고 있는 것입니다.
그래서 같은 Seed면 항상 같은 결과가 나온다
여기서 컴퓨터의 결정론적인 성질이 다시 등장합니다.
만약 Seed를 항상 100으로 시작한다면 어떻게 될까요?
Seed = 100 ↓ 314159 ↓ 928374 ↓ 192837 ↓ 564738
다시 실행해도
Seed = 100 ↓ 314159 ↓ 928374 ↓ 192837 ↓ 564738
완전히 똑같습니다.
백 번을 실행해도,
천 번을 실행해도,
결과는 변하지 않습니다.
왜냐하면 컴퓨터는 같은 입력이면 항상 같은 결과를 계산하기 때문입니다.
PRNG도 결국 하나의 프로그램이니까요.
이 성질은 의외로 굉장히 유용합니다.
예를 들어 게임을 만든다고 생각해 봅시다.
맵을 랜덤으로 생성해야 하는데,
버그가 발생했습니다.
그런데 실행할 때마다 맵이 달라진다면 버그를 재현하기가 매우 어렵습니다.
하지만 같은 Seed를 저장해 두면,
언제든지 똑같은 랜덤 맵을 다시 만들 수 있습니다.
실제로 많은 게임들이 이런 방식을 사용합니다.
대표적으로 마인크래프트에서는 월드를 생성할 때 Seed를 입력할 수 있습니다.
같은 Seed를 입력한 사람은 전 세계 어디서든 동일한 지형에서 게임을 시작합니다.
겉으로 보기에는 거대한 랜덤 월드처럼 보이지만,
사실은 하나의 Seed로부터 계산된 결과인 것입니다.
그런데 왜 우리는 랜덤이라고 느낄까?
조금 신기하지 않나요?
컴퓨터는 계산만 했을 뿐입니다.
그런데 우리는 그것을 랜덤이라고 느낍니다.
이유는 간단합니다.
사람은 그 계산 과정을 눈으로 구분할 수 없기 때문입니다.
예를 들어 두 숫자 목록을 봅시다.
3 6 9 12 15 18
이 숫자들은 규칙이 너무 명확합니다.
누구나 다음 숫자가 21이라는 것을 예상할 수 있습니다.
반면 이런 숫자는 어떨까요?
48291 19382 74620 91837 35281 10492
규칙이 보이지 않습니다.
그래서 우리는 자연스럽게 랜덤이라고 생각합니다.
하지만 놀랍게도 두 목록 모두 계산으로 만들어질 수 있습니다.
차이는 단 하나.
우리가 규칙을 알아차릴 수 있느냐 없느냐입니다.
결국 좋은 PRNG란,
진짜 랜덤을 만드는 알고리즘이 아니라
사람이 규칙을 발견하지 못할 만큼 복잡한 규칙을 만드는 알고리즘이라고 할 수 있습니다.
여기까지 오면 우리는 조금 이상한 사실 하나를 깨닫게 됩니다.
지금까지 우리는 Math.random()을 랜덤 함수라고 불러왔습니다.
하지만 엄밀히 말하면,
그것은 랜덤을 만드는 함수가 아닙니다.
우리가 랜덤이라고 믿게 만드는 함수에 더 가깝습니다.
그런데 만약 누군가 이 규칙을 알아낸다면 어떻게 될까요?
다음에 나올 숫자까지 모두 예측할 수 있다면?
놀랍게도 실제로 그런 일은 여러 번 일어났고,
게임과 보안 분야에서는 아주 심각한 문제를 일으키기도 했습니다.
4. 가짜 랜덤은 언젠가 들통난다
앞에서 우리는 컴퓨터가 만드는 랜덤이 사실은 계산된 숫자라는 것을 알게 되었습니다.
평소에는 큰 문제가 없어 보입니다.
게임에서 아이템 하나 떨어지는 것쯤이야 조금 예측 가능해도 별일 없을 것 같습니다.
음악 플레이어가 같은 노래를 먼저 틀어도 크게 상관없습니다.
그런데 만약 그 숫자가 돈과 연결된다면 어떨까요?
혹은 비밀번호와 연결된다면?
아니면 암호화폐를 보호하는 개인 키라면?
그 순간부터 랜덤은 단순한 편의 기능이 아니라 보안 그 자체가 됩니다.
랜덤을 예측할 수 있다면
PRNG는 같은 Seed에서 항상 같은 숫자를 만들어냅니다.
이 말은 반대로,
누군가 Seed를 알아내거나 PRNG의 상태를 추측할 수 있다면,
다음에 나올 숫자도 예측할 수 있다는 뜻입니다.
생각보다 무서운 이야기입니다.
주사위를 던졌는데 결과를 미리 알고 있는 사람.
카드를 섞기 전에 카드 순서를 이미 알고 있는 사람.
이런 사람이 있다면 게임은 더 이상 공정하지 않습니다.
컴퓨터도 마찬가지입니다.
랜덤이 예측되는 순간,
그 시스템은 더 이상 안전하지 않습니다.
실제로 포켓몬에서는 이런 일이 있었다
대표적인 사례가 포켓몬 시리즈입니다.
포켓몬에는 개체값(IV), 성격, 색이 다른 이로치(Shiny) 등 다양한 요소가 랜덤으로 결정됩니다.
많은 사람들은 정말 운이 좋아야 원하는 포켓몬을 얻는다고 생각했습니다.
그런데 일부 플레이어들은 이상한 사실을 발견합니다.
게임이 사용하는 PRNG의 규칙을 분석하면,
어떤 순간에 어떤 버튼을 눌러야 원하는 결과가 나오는지 계산할 수 있었던 것입니다.
이 기술은 RNG Manipulation이라는 이름으로 불렸습니다.
겉으로 보기에는 순전히 운에 맡기는 것처럼 보였지만,
실제로는 계산 가능한 퍼즐에 가까웠던 셈입니다.
운을 조작했다기보다는,
랜덤의 규칙을 읽어낸 것입니다.
보안에서는 더 큰 문제가 된다
게임이라면 재미있는 이야기로 끝날 수도 있습니다.
하지만 보안에서는 전혀 다릅니다.
2013년, 안드로이드에서는 랜덤 숫자를 생성하는 방식의 문제 때문에 큰 사고가 발생했습니다.
암호화에 필요한 랜덤 값이 충분히 안전하지 않았고,
그 결과 일부 비트코인 지갑의 개인 키가 예측될 수 있는 문제가 발생했습니다.
랜덤 하나 때문에 실제 자산이 위험해진 것입니다.
또 PHP의 mt_rand() 역시 오랫동안 일반적인 랜덤 함수로 사용되었지만,
보안 목적으로 사용하기에는 예측 가능성이 있다는 문제가 알려졌습니다.
이 함수 자체가 잘못된 것은 아니었습니다.
문제는 랜덤처럼 보인다고 해서 보안에도 사용할 수 있다고 착각한 것이었습니다.
랜덤은 얼마나 랜덤이어야 할까?
여기서 흥미로운 사실 하나가 있습니다.
사실 게임에서는
'완벽한 랜덤'이 필요하지 않습니다.
셔플도,
주사위도,
몬스터 등장도,
사람이 눈치채지 못할 정도면 충분합니다.
그래서 PRNG가 아주 잘 동작합니다.
하지만 암호화는 다릅니다.
비밀번호를 생성하거나,
은행 거래를 보호하거나,
HTTPS 통신을 암호화할 때는
단 한 번의 예측도 허용되지 않습니다.
99.999% 랜덤도 부족합니다.
100% 예측할 수 없어야 합니다.
그래서 보안에서는 일반적인 PRNG 대신 CSPRNG(Cryptographically Secure Pseudo Random Number Generator) 를 사용합니다.
이름 그대로 암호학적으로 안전한 의사 난수 생성기입니다.
컴퓨터는 결국 자연의 도움을 받는다
그런데 재미있는 사실은,
CSPRNG도 처음에는 시작점이 필요합니다.
PRNG가 Seed를 필요로 했던 것처럼 말이죠.
그렇다면 그 Seed는 어디서 올까요?
놀랍게도 컴퓨터는 결국 자기 밖의 세상을 바라봅니다.
예를 들어,
- 키보드를 누르는 정확한 시간
- 마우스가 움직인 미세한 위치
- 디스크 접근 시간의 아주 작은 차이
- CPU 내부의 미세한 노이즈
- 네트워크 패킷이 도착하는 순간의 오차
이런 것들을 조금씩 모읍니다.
사람이 의식할 수도,
예측할 수도 없는 작은 흔들림들입니다.
그리고 그 흔들림을 Seed로 사용합니다.
생각해 보면 조금 아이러니합니다.
랜덤을 만들지 못하는 컴퓨터는,
결국 자연의 예측 불가능함을 빌려와 랜덤을 만들어내는 것입니다.
컴퓨터는 스스로 랜덤을 만들어내지 못합니다.
대신 세상의 작은 우연들을 모아,
그것을 랜덤처럼 사용하는 것입니다.
여기까지 오면 처음의 질문에 대한 답은 어느 정도 나온 것 같습니다.
컴퓨터는 랜덤을 만들지 못합니다.
그래서 계산으로 랜덤을 흉내 냅니다.
그리고 그 계산이 들통나지 않도록,
결국 자연의 예측 불가능함을 빌려옵니다.
그런데 여기서 글은 다시 처음의 질문으로 돌아갑니다.
잠깐.
우리는 계속 '자연의 예측 불가능함'이라는 표현을 사용했습니다.
정말 자연은 예측 불가능한 걸까요?
아니면 우리가 아직 그 원인을 모르는 것뿐일까요?
5. 그런데 정말 랜덤은 존재할까?
여기까지의 이야기를 정리해 보면 조금 재미있는 결론이 나옵니다.
컴퓨터는 랜덤을 만들지 못합니다.
그래서 계산을 이용해 랜덤처럼 보이는 숫자를 만들어냅니다.
그리고 그마저도 완벽하지 않기 때문에,
결국 자연의 예측 불가능한 현상들을 빌려와 사용합니다.
그렇다면 이제 마지막 질문이 남습니다.
정말 자연은 랜덤할까요?
조금 전 주사위 이야기를 떠올려 봅시다.
우리는 주사위를 던지면 랜덤하게 숫자가 나온다고 생각합니다.
하지만 사실 주사위는 물리 법칙을 따를 뿐입니다.
던지는 힘.
회전 속도.
공기의 저항.
바닥의 마찰.
충돌하는 각도.
모든 조건이 완벽하게 같다면 결과도 같아질 것입니다.
동전도 마찬가지입니다.
사실 동전은 '운'으로 앞면이 나오는 것이 아니라,
수많은 물리 법칙의 결과일 뿐입니다.
우리가 모든 원인을 계산하지 못하기 때문에 랜덤이라고 느끼는 것이죠.
그렇다면 세상도 마찬가지일까요?
만약 우주의 모든 정보를 알고 있다면,
모든 원자를 추적할 수 있다면,
미래도 계산할 수 있을까요?
이런 생각은 아주 오래전부터 존재했습니다.
18세기 프랑스의 수학자 피에르시몽 라플라스는 이런 상상을 했습니다.
만약 우주의 모든 입자의 위치와 속도를 알고,
모든 물리 법칙을 이해하는 존재가 있다면,
과거와 미래를 모두 계산할 수 있을 것이다.
이 가상의 존재는 지금도 라플라스의 악마(Laplace's Demon) 라는 이름으로 불립니다.
만약 이 생각이 맞다면,
우주에는 랜덤이 존재하지 않습니다.
우리가 모를 뿐,
모든 것은 이미 정해져 있는 셈입니다.
생각해 보면 컴퓨터와 꽤 닮았습니다.
컴퓨터가 같은 입력에서 항상 같은 결과를 내듯,
우주도 같은 조건이라면 항상 같은 결과를 만들어내는 거대한 프로그램일지도 모릅니다.
하지만 현대 물리학은 또 다른 이야기를 합니다.
양자역학에서는 전자의 위치나 방사성 붕괴처럼,
현재의 이론으로는 본질적으로 예측할 수 없는 현상들이 등장합니다.
우리는 언제 붕괴할지는 알 수 없고,
오직 확률만 계산할 수 있습니다.
그래서 많은 물리학자들은
자연에는 진짜 랜덤이 존재한다고 이야기합니다.
하지만 이것도 아직 끝난 이야기는 아닙니다.
정말 우주가 랜덤인 것인지,
아니면 우리가 아직 원인을 발견하지 못한 것인지,
지금도 다양한 해석과 논의가 이어지고 있습니다.
결국 우리는 아직 답을 모릅니다.
생각해 보면 처음부터 이 글은 랜덤에 대한 글이 아니었습니다.
당연하다고 믿었던 하나의 개념을 의심해 보는 이야기였습니다.
우리는 너무 자연스럽게 랜덤이라는 단어를 사용합니다.
Math.random()도 랜덤이라고 부르고,
주사위도 랜덤이라고 부르고,
확률도 랜덤을 설명하는 학문이라고 생각합니다.
하지만 하나씩 살펴보니,
컴퓨터는 랜덤을 만들지 못했고,
주사위도 물리 법칙을 따랐으며,
확률조차 우리가 모든 원인을 계산할 수 없기 때문에 사용하는 언어일지도 모른다는 생각에 도달했습니다.
그래서 저는 이 글을 쓰면서 오히려 처음보다 더 많은 궁금증이 생겼습니다.
랜덤은 정말 존재하는 걸까요?
아니면 인간이 아직 이해하지 못한 현상을 부르는 이름일 뿐일까요?
어쩌면 랜덤은 세상의 속성이 아니라,
세상을 바라보는 우리의 관점인지도 모르겠습니다.
컴퓨터는 끝내 랜덤을 만들지 못했습니다.
그런데 글을 다 쓰고 나니,
오히려 이런 생각이 듭니다.
혹시 컴퓨터가 랜덤을 이해하지 못하는 것이 아니라, 인간이 아직 세상을 다 이해하지 못한 것은 아닐까요?