양자컴퓨터에서는 Hadamard Gate를 이용해 0과 1이 같은 확률로 측정되는 ‘양자 동전’을 만들 수 있습니다. Qiskit으로 100번, 1,000번, 10,000번 직접 측정해 중첩과 확률의 원리가 실제 어떻게 나타나는지 확인해봅시다.

동전을 던지면 앞면과 뒷면이 각각 50% 확률로 나온다고 배웁니다. 하지만 실제로 동전을 100번 던져보면 정확히 50번씩 나오는 경우는 오히려 드뭅니다.
그렇다면 양자컴퓨터에서는 어떨까요? 이번에는 Qiskit을 이용해 0과 1이 같은 확률로 측정되는 1큐비트 회로를 만든 뒤 100번, 1,000번, 10,000번 반복 측정해봤습니다.
복잡한 양자 알고리즘을 다루는 실험은 아닙니다. 우리가 일상에서 쉽게 이해할 수 있는 동전 던지기를 이용해 이전 글에서 살펴본 Hadamard Gate와 중첩, 측정, Shots의 의미를 실제 결과로 확인해보는 것이 이번 실험의 목적입니다.
1. 이번 실험에서 확인하려는 것은 무엇일까?
이번 실험에서 확인하고 싶은 질문은 간단합니다.
- Hadamard Gate를 적용한 큐비트를 측정하면 실제로 0과 1이 비슷하게 나올까?
- 100번 측정했을 때와 10,000번 측정했을 때 결과는 얼마나 달라질까?
- 확률이 50%인데도 왜 정확하게 절반씩 나오지 않을까?
이 블로그의 단일 큐비트 게이트가 어떻게 작동하는지 설명한 글에서는 Hadamard Gate가 |0⟩ 상태를 중첩 상태로 바꾸는 원리를 살펴봤습니다.
이번에는 그 원리를 수식으로만 보는 것이 아니라 실제 프로그램을 실행해 측정 결과가 어떻게 나타나는지 확인합니다.
2. 양자컴퓨터에서 동전을 던진다는 것은 무슨 뜻일까?
일반적인 동전에는 앞면과 뒷면이라는 두 가지 결과가 있습니다. 이번 실험에서는 이를 큐비트의 측정 결과와 연결해 다음처럼 생각했습니다.
| 일반적인 동전 | 양자 동전 실험 |
|---|---|
| 앞면 | 0 |
| 뒷면 | 1 |
큐비트는 처음에 |0⟩ 상태에서 시작합니다. 이 상태를 그대로 측정하면 0이 나옵니다.
여기에 Hadamard Gate를 적용하면 다음과 같은 상태를 만들 수 있습니다.
|0⟩ ↓ H ↓ (|0⟩ + |1⟩) / √2
이 상태를 계산 기저에서 측정하면 이상적인 조건에서 0과 1이 각각 50%의 확률로 나타납니다.
그래서 겉으로 보면 공정한 동전을 던지는 것과 비슷합니다. 다만 여기서 주의할 점이 있습니다. 양자 중첩 자체가 고전적인 동전의 무작위성과 같은 것은 아닙니다. Hadamard Gate는 큐비트에 정해진 유니터리 변환을 적용하고, 확률적인 결과는 그 상태를 측정할 때 나타납니다.
3. Qiskit으로 1큐비트 양자 동전을 만들어봤다
이번 실험은 실제 양자 하드웨어의 노이즈를 확인하는 실험이 아니라 이상적인 상태벡터 시뮬레이터에서 Hadamard 상태의 측정 분포를 확인하는 실험입니다.
사용한 환경은 다음과 같습니다.
- Python
- Qiskit
- StatevectorSampler
- 큐비트: 1개
- Hadamard Gate: 1개
- 측정 횟수: 100 / 1,000 / 10,000 Shots
실험에 사용한 코드는 아래와 같습니다.
from qiskit import QuantumCircuit
from qiskit.primitives import StatevectorSampler
from qiskit.visualization import plot_histogram
# 1큐비트 회로 생성
qc = QuantumCircuit(1)
# |0> 상태에 Hadamard Gate 적용
qc.h(0)
# 측정 추가
qc.measure_all()
# 실험 재현을 위해 seed 지정
sampler = StatevectorSampler(seed=2026)
shot_list = [100, 1000, 10000]
results = {}
for shots in shot_list:
result = sampler.run(
[qc],
shots=shots
).result()
counts = result[0].data.meas.get_counts()
zero = counts.get("0", 0)
one = counts.get("1", 0)
zero_percent = zero / shots * 100
one_percent = one / shots * 100
results[shots] = counts
print(
f"{shots} shots | "
f"0 = {zero} ({zero_percent:.2f}%) | "
f"1 = {one} ({one_percent:.2f}%)"
)
# 10,000회 결과 히스토그램
plot_histogram(
results[10000],
title="Quantum Coin - 10,000 Shots"
)
핵심 회로만 보면 실제 양자 연산은 매우 간단합니다.
qc.h(0)
qc.measure_all()
qc.h(0)으로 큐비트를 중첩 상태로 만들고, measure_all()로 측정합니다. 나머지 코드는 같은 회로를 몇 번 반복할 것인지 지정하고 결과를 집계하기 위한 부분입니다.
4. 100번부터 10,000번까지 실제 결과를 비교해봤다
코드를 실행한 뒤 가장 먼저 100회 측정 결과를 확인하고, 동일한 회로를 1,000회와 10,000회로 늘려봤습니다.
| 측정 횟수 | 0이 나온 횟수 | 1이 나온 횟수 | 0 비율 | 1 비율 |
|---|---|---|---|---|
| 100 Shots | 47회 | 53회 | 47.00% | 53.00% |
| 1,000 Shots | 503회 | 497회 | 50.30% | 49.70% |
| 10,000 Shots | 5,018회 | 4,982회 | 50.18% | 49.82% |

제가 실제로 얻은 10,000회 측정 결과는 0이 5,018회, 1이 4,982회였습니다.
비율로 계산하면 각각 50.18%와 49.82%입니다.
100회 결과에서는 0이 47회, 1이 53회로 47:53의 차이가 나타났고, 측정 횟수를 1,000회와 10,000회까지 늘렸을 때는 50.30%와 49.70%, 50.18%와 49.82%로 나타나면서 전체적인 측정 비율이 50:50에 가까워지는 모습을 확인할 수 있었습니다.

5. 50% 확률인데 왜 정확히 5,000번씩 나오지 않을까?
처음에는 0과 1의 측정확률이 각각 50%라면 10,000번 측정했을 때 정확히 5,000번씩 나와야 할 것처럼 느껴질 수 있습니다.
하지만 확률이 50%라는 것은 매번 결과의 절반이 정확하게 보장된다는 뜻이 아닙니다.
일반적인 동전을 100번 던졌을 때 앞면이 56번, 뒷면이 44번 나오는 것도 충분히 가능합니다. 다시 100번 던지면 48대52가 나올 수도 있습니다.
양자 상태를 측정할 때도 비슷하게 유한한 횟수만 표본으로 얻기 때문에 실행할 때마다 측정 횟수가 조금씩 달라질 수 있습니다.
다만 측정 횟수를 늘리면 관찰된 비율이 원래의 측정확률을 보다 안정적으로 추정하는 경향이 나타납니다.
양자컴퓨터에서 이러한 반복 실행 횟수를 왜 Shots라고 부르고, Shot 수가 결과의 통계적 오차와 어떤 관계가 있는지는 양자컴퓨팅에서 회로 실행 횟수가 중요한 이유에서 더 자세히 정리했습니다.
6. 일반 동전과 양자 동전은 같은 것일까?
이번 실험에서는 이해하기 쉽게 큐비트의 0과 1을 동전의 앞면과 뒷면에 대응시켰습니다.
| 구분 | 일반 동전 | 이번 양자 동전 |
|---|---|---|
| 결과 | 앞면 또는 뒷면 | 0 또는 1 |
| 관찰 결과 | 확률적으로 나타남 | 측정 시 확률적으로 나타남 |
| 이번 실험의 이상적 비율 | 공정한 동전이라면 50:50 | Hadamard 적용 후 50:50 |
| 내부 원리 | 고전적인 물리 과정 | 확률진폭을 가진 양자상태와 측정 |
따라서 두 실험의 최종 통계가 비슷하다고 해서 내부 원리가 같은 것은 아닙니다.
Hadamard Gate는 무작위로 큐비트를 흔드는 연산이 아니라 수학적으로 정해진 유니터리 연산입니다. |0⟩ 상태에 적용하면 0과 1에 대응하는 확률진폭의 크기가 같아지고, 이를 측정할 때 두 결과가 각각 50% 확률로 나타납니다.
그래서 ‘양자 동전’은 양자컴퓨터가 실제 생활의 동전을 대신한다는 의미보다는 중첩과 측정을 처음 이해하기 위한 일상적인 비유로 보는 것이 정확합니다.
7. 이번 실험에서 직접 확인한 것은 무엇일까?
이번 실험을 통해 단순한 공식만 볼 때보다 세 가지를 훨씬 직관적으로 확인할 수 있었습니다.
첫째, Hadamard Gate를 적용한 |0⟩ 큐비트를 반복 측정하면 0과 1이 한쪽으로 고정되지 않고 두 결과로 나뉩니다.
둘째, 50%라는 확률과 실제 측정 횟수가 정확히 일치하는 것은 아닙니다. 이번 10,000회 실험에서 0은 5,018회, 1은 4,982회로 측정됐습니다.
셋째, 양자컴퓨팅에서는 한 번 측정해서 얻은 0 또는 1 하나보다 같은 상태를 여러 번 준비하고 측정해 얻은 전체 분포가 더 많은 정보를 줍니다.
결국 우리가 일상에서 익숙하게 사용하는 동전 던지기라는 예시만으로도 Hadamard Gate, 중첩, 측정, Shots라는 네 가지 양자컴퓨팅 개념을 하나의 작은 실험으로 연결할 수 있었습니다.
8. 다음에는 50:50이 아닌 확률도 직접 만들어볼 수 있다
Hadamard Gate를 |0⟩에 적용하면 0과 1의 측정확률이 각각 50%인 상태를 만들 수 있습니다.
하지만 양자컴퓨터에서 항상 반반인 상태만 만들 수 있는 것은 아닙니다.
다음 실험에서는 회전 게이트를 이용해 0이 약 75%, 1이 약 25% 나오는 상태처럼 확률을 직접 조절해보고, 실제 10,000회 측정 결과가 설정한 확률에 얼마나 가까워지는지 확인해볼 수 있습니다.
동전 던지기에서 한 단계 더 나아가 ‘원하는 확률을 가진 양자 동전’을 만들어보는 실험입니다.