- Published on
개발자를 위한 양자 컴퓨팅 완전 가이드 2025: Qiskit, Cirq, 양자 알고리즘, 양자 우월성
- Authors

- Name
- Youngju Kim
- @fjvbn20031
서론: 왜 양자 컴퓨팅인가?
양자 컴퓨팅은 고전 컴퓨팅의 패러다임을 근본적으로 바꾸는 기술입니다. 2019년 구글 Sycamore가 최초로 양자 우월성(Quantum Supremacy)을 실증했고, 2024년 IBM Condor가 1121 큐비트를 돌파했으며, 2025년 현재 IBM, Google, Quantinuum, IonQ, PsiQuantum이 치열하게 경쟁 중입니다. 양자 컴퓨팅은 만능 해결사가 아니지만, 특정 문제(소인수분해, 특정 최적화, 양자 시뮬레이션)에서 고전 컴퓨터로 수천 년 걸리는 계산을 수 시간에 해결할 잠재력을 가집니다.
이 가이드는 물리학자가 아닌 소프트웨어 개발자를 대상으로 합니다. 선형대수 기초만 있으면 따라갈 수 있도록 직관적 설명과 실제 Qiskit/Cirq 코드를 함께 제공합니다. 양자 역학 기초부터 양자 알고리즘, NISQ 시대 실무, 양자 머신러닝, Post-Quantum 암호학까지 개발자 관점에서 필요한 내용을 모두 다룹니다.
1. 양자 컴퓨팅이 왜 중요한가
1.1 고전 vs 양자 시간 복잡도
| 문제 | 고전 최선 | 양자 알고리즘 | 속도 향상 |
|---|---|---|---|
| 정수 소인수분해 | O(exp(n^(1/3))) | O(n^3) Shor | 지수적 |
| 비구조 검색 | O(N) | O(sqrt(N)) Grover | 이차적 |
| 양자 시뮬레이션 | O(exp(n)) | O(poly(n)) | 지수적 |
| 선형방정식 | O(n^3) | O(log n) HHL | 지수적 (조건부) |
| 최적화 | 문제별 | 잠재적 향상 | 미확정 |
1.2 양자 컴퓨팅이 해결할 수 있는 문제
- 암호학: RSA, ECC 같은 공개키 암호 해독 (Shor 알고리즘)
- 화학: 분자 에너지 계산, 신약 개발, 비료 합성(질소 고정)
- 재료과학: 초전도체, 배터리 설계
- 최적화: 물류, 포트폴리오, 스케줄링
- 머신러닝: 특정 커널 방법, 양자 신경망
- 금융: 옵션 가격, Monte Carlo 시뮬레이션
1.3 양자 컴퓨팅이 해결할 수 없는 문제
- 일반 병렬화: 양자 병렬은 측정 시 하나만 얻음
- 대부분의 고전 알고리즘: 정렬, 해시 테이블 등은 이점 없음
- NP-complete 전체: 일부만 이차 향상(Grover)
- 일상 앱: 웹 서버, 게임 등은 양자 이점 거의 없음
2. 고전 비트 vs 양자 비트
2.1 비트와 큐비트
고전 비트는 0 또는 1 중 하나의 값을 가집니다. 큐비트는 형태의 중첩 상태를 가질 수 있으며, 을 만족합니다.
측정 시 확률 로 0, 로 1을 얻습니다. 측정 후 상태는 붕괴되어 해당 고전 비트 값이 됩니다.
2.2 n개 큐비트의 상태 공간
- 고전 n비트: 상태 중 하나
- 양자 n큐비트: 복소수 진폭의 벡터 (동시에)
300개 큐비트의 상태 벡터는 개의 복소수를 가지며, 이는 우주의 원자 수보다 많습니다. 이것이 양자 컴퓨팅의 잠재력입니다.
3. 양자 역학 기초
3.1 중첩 (Superposition)
큐비트는 측정되기 전까지 0과 1의 선형 결합 상태에 있을 수 있습니다.
이 상태를 측정하면 50% 확률로 0 또는 1이 나옵니다.
3.2 얽힘 (Entanglement)
두 큐비트가 얽힌 상태는 분리해서 기술할 수 없습니다.
이 Bell state에서 첫 번째 큐비트를 측정해 0이 나오면, 두 번째 큐비트도 0이 됩니다. 항상 100% 상관관계입니다. 심지어 두 큐비트가 물리적으로 멀리 떨어져 있어도.
3.3 측정 (Measurement)
측정은 양자 상태를 파괴합니다. 측정 후 상태는 관측된 기저 상태로 붕괴합니다. 이 때문에 양자 알고리즘 설계는 측정 결과가 유의미한 정보를 담도록 간섭 패턴을 정교하게 설계해야 합니다.
3.4 복제 불가 정리 (No-Cloning Theorem)
임의의 미지의 양자 상태를 완벽하게 복사하는 것은 불가능합니다. 이는 양자 통신과 양자 암호의 기반이 되는 중요한 정리입니다.
4. Bloch Sphere 시각화
단일 큐비트의 순수 상태는 3차원 구 표면의 점으로 표현할 수 있습니다.
- 북극:
- 남극:
- 적도: 중첩 상태 (, , , )
여기서 θ는 북극으로부터의 극각, φ는 방위각입니다.
5. 양자 게이트
5.1 단일 큐비트 게이트
Pauli 게이트
- X (NOT): 비트 플립.
- Y: 비트 + 위상 플립
- Z: 위상 플립.
Hadamard (H): 중첩 생성
게이트 행렬:
1/sqrt(2) * [[1, 1],
[1, -1]]
Phase 게이트
- S: (90도 위상)
- T: (45도 위상)
회전 게이트
- Rx(θ), Ry(θ), Rz(θ): 각 축에 대한 θ 라디안 회전
5.2 다중 큐비트 게이트
CNOT (Controlled-NOT): 2큐비트 게이트. 컨트롤 큐비트가 1이면 타겟 큐비트를 플립.
CNOT 진리표:
|00> -> |00>
|01> -> |01>
|10> -> |11>
|11> -> |10>
Toffoli (CCNOT): 3큐비트 게이트. 두 컨트롤이 모두 1이면 타겟 플립. 범용 고전 계산 가능.
SWAP: 두 큐비트 교환.
Controlled-Z, Controlled-Phase: 위상 기반 제어 게이트.
5.3 범용 게이트 셋
{H, T, CNOT}은 범용 양자 계산을 위한 게이트 셋입니다. 임의의 양자 연산을 이 세 개만으로 (오차 이내로) 근사할 수 있습니다.
6. 양자 회로와 측정
6.1 회로 다이어그램 읽기
양자 회로는 왼쪽에서 오른쪽으로 시간이 흐릅니다. 각 가로선은 큐비트, 각 상자는 게이트, 마지막에 측정 아이콘이 위치합니다.
6.2 가역성
측정을 제외한 모든 양자 게이트는 유니터리(unitary) 연산으로 가역적입니다. 이는 고전 게이트와의 큰 차이점입니다(AND 게이트는 비가역).
7. Qiskit 심화
7.1 설치와 시작
pip install qiskit qiskit-aer qiskit-ibm-runtime
7.2 기본 회로 작성
from qiskit import QuantumCircuit, transpile
from qiskit_aer import AerSimulator
qc = QuantumCircuit(2, 2)
qc.h(0) # 큐비트 0에 Hadamard
qc.cx(0, 1) # CNOT: 컨트롤=0, 타겟=1
qc.measure([0, 1], [0, 1])
print(qc)
simulator = AerSimulator()
compiled = transpile(qc, simulator)
result = simulator.run(compiled, shots=1024).result()
counts = result.get_counts()
print(counts) # 예: {'00': 512, '11': 512}
이 코드는 Bell state를 생성합니다. 측정 결과는 항상 00 또는 11만 나옵니다.
7.3 트랜스파일러 (Transpiler)
실제 양자 하드웨어는 특정 게이트 셋과 연결 토폴로지를 가집니다. 트랜스파일러는 추상 회로를 하드웨어 실행 가능한 형태로 변환합니다.
from qiskit import transpile
# 최적화 레벨 0-3 (높을수록 더 공격적 최적화)
compiled = transpile(qc, backend, optimization_level=3)
print(f"Depth: {compiled.depth()}")
print(f"Gate count: {compiled.count_ops()}")
7.4 IBM Quantum 하드웨어
from qiskit_ibm_runtime import QiskitRuntimeService, SamplerV2 as Sampler
service = QiskitRuntimeService(channel="ibm_quantum", token="YOUR_TOKEN")
backend = service.least_busy(operational=True, simulator=False)
print(f"Using backend: {backend.name}")
sampler = Sampler(backend)
job = sampler.run([compiled])
result = job.result()
print(result[0].data.meas.get_counts())
7.5 시뮬레이터 종류
- AerSimulator: 상태 벡터 (완벽, 작은 회로)
- qasm_simulator: 측정 샘플링
- statevector_simulator: 상태 벡터 직접 추출
- unitary_simulator: 유니터리 행렬 계산
- noise model: 하드웨어 노이즈 모델링
from qiskit_aer.noise import NoiseModel, depolarizing_error
noise_model = NoiseModel()
error = depolarizing_error(0.01, 1)
noise_model.add_all_qubit_quantum_error(error, ['h', 'x'])
sim = AerSimulator(noise_model=noise_model)
result = sim.run(compiled).result()
8. Cirq 심화
8.1 설치
pip install cirq
8.2 기본 예
import cirq
q0, q1 = cirq.LineQubit.range(2)
circuit = cirq.Circuit()
circuit.append([
cirq.H(q0),
cirq.CNOT(q0, q1),
cirq.measure(q0, q1, key='result'),
])
print(circuit)
simulator = cirq.Simulator()
result = simulator.run(circuit, repetitions=1024)
print(result.histogram(key='result'))
8.3 Cirq vs Qiskit 차이
- Qiskit: IBM 생태계, 풍부한 문서, 학계/산업 표준
- Cirq: Google/Sycamore, NISQ 친화적, 실험적 기능
- Qubit 모델: Cirq는 GridQubit, LineQubit, NamedQubit 구분
- 게이트 셋: Google 하드웨어에 맞춘 gate set
9. 유명 양자 알고리즘
9.1 Deutsch-Jozsa 알고리즘
문제: 함수 이 상수(constant)인지 균형(balanced)인지 판별.
- 고전: 최악 번 호출
- 양자: 1번 호출
역사적으로 양자 속도 향상을 처음으로 보인 알고리즘입니다.
def deutsch_jozsa(n, oracle):
qc = QuantumCircuit(n+1, n)
qc.x(n)
qc.h(range(n+1))
qc.compose(oracle, inplace=True)
qc.h(range(n))
qc.measure(range(n), range(n))
return qc
9.2 Grover의 검색 알고리즘
비구조 검색에서 속도. 개 아이템에서 타겟을 찾는 문제에서 고전 대비 이차 속도 향상.
from qiskit.circuit.library import GroverOperator
from qiskit.algorithms import AmplificationProblem, Grover
oracle = QuantumCircuit(3)
oracle.cz(0, 2)
oracle.cz(1, 2)
problem = AmplificationProblem(oracle, is_good_state=['101', '111'])
grover = Grover(quantum_instance=simulator)
result = grover.amplify(problem)
print(f"Top measurement: {result.top_measurement}")
9.3 Shor의 소인수분해 알고리즘
RSA 암호의 기반인 소인수분해를 다항식 시간에 해결. 충분히 큰 양자 컴퓨터가 구축되면 현재 공개키 암호 대부분을 깨뜨릴 수 있습니다.
Shor 알고리즘 개요:
1. 난수 a 선택 (1 < a < N)
2. gcd(a, N) 계산. 1이 아니면 인수 발견
3. 양자 단계: a^x mod N의 주기 r 찾기 (Quantum Period Finding)
4. r이 짝수면 gcd(a^(r/2) +/- 1, N) 계산으로 인수 획득
21 = 3 x 7과 같은 소수 인수분해는 Qiskit에 구현 예제가 있습니다.
9.4 Quantum Fourier Transform (QFT)
고전 DFT의 양자 버전. 많은 알고리즘(Shor, 위상 추정)의 핵심.
def qft(n):
qc = QuantumCircuit(n)
for j in range(n):
qc.h(j)
for k in range(j+1, n):
qc.cp(np.pi / (2 ** (k-j)), k, j)
for i in range(n//2):
qc.swap(i, n-1-i)
return qc
9.5 Bernstein-Vazirani 알고리즘
숨겨진 비트 문자열 를 1번의 쿼리로 찾기. Deutsch-Jozsa의 일반화.
10. 변분 양자 알고리즘
10.1 VQE (Variational Quantum Eigensolver)
분자 바닥 상태 에너지 계산. 양자 회로(ansatz)의 파라미터를 고전 옵티마이저로 조정.
from qiskit.algorithms.minimum_eigensolvers import VQE
from qiskit.algorithms.optimizers import COBYLA
from qiskit.circuit.library import EfficientSU2
ansatz = EfficientSU2(num_qubits=2, reps=2)
optimizer = COBYLA(maxiter=100)
vqe = VQE(estimator, ansatz, optimizer)
result = vqe.compute_minimum_eigenvalue(hamiltonian)
print(f"Ground state energy: {result.eigenvalue}")
10.2 QAOA (Quantum Approximate Optimization Algorithm)
조합 최적화 문제(Max-Cut, TSP 등)의 근사 해를 찾는 하이브리드 양자-고전 알고리즘.
from qiskit.algorithms.minimum_eigensolvers import QAOA
qaoa = QAOA(sampler, optimizer, reps=2)
result = qaoa.compute_minimum_eigenvalue(operator=cost_operator)
11. 양자 머신러닝 (QML)
11.1 양자 신경망 (QNN)
from qiskit_machine_learning.neural_networks import EstimatorQNN
from qiskit.circuit.library import RealAmplitudes
feature_map = ZZFeatureMap(feature_dimension=2, reps=1)
ansatz = RealAmplitudes(num_qubits=2, reps=1)
qc = QuantumCircuit(2)
qc.compose(feature_map, inplace=True)
qc.compose(ansatz, inplace=True)
qnn = EstimatorQNN(
circuit=qc,
input_params=feature_map.parameters,
weight_params=ansatz.parameters,
)
11.2 Quantum Kernel Methods
양자 상태 공간에서 내적을 계산해 고전 SVM의 커널로 사용.
from qiskit_machine_learning.kernels import FidelityQuantumKernel
kernel = FidelityQuantumKernel(feature_map=feature_map)
from sklearn.svm import SVC
svc = SVC(kernel=kernel.evaluate)
svc.fit(X_train, y_train)
12. 양자 우월성(Quantum Supremacy)
12.1 Google Sycamore (2019)
53큐비트 Sycamore 칩이 랜덤 회로 샘플링을 200초에 수행. 당시 IBM Summit 슈퍼컴퓨터로는 10,000년 추정. 후에 IBM이 효율적인 고전 시뮬레이션으로 반박(수 일 내). 그럼에도 양자 우월성의 첫 실증 사례로 기록.
12.2 USTC Jiuzhang (2020)
광학 기반 보존 샘플링(Gaussian Boson Sampling)으로 200초에 결과, 고전으로는 25억 년 추정.
12.3 IBM 로드맵 (2025)
- 2019 Falcon: 27 qubits
- 2021 Eagle: 127 qubits
- 2022 Osprey: 433 qubits
- 2023 Condor: 1121 qubits
- 2024 Flamingo: 1386 qubits (multi-chip)
- 2025 Kookaburra: 4158 qubits (target)
12.4 유용한 양자 이점(Quantum Advantage)
양자 우월성은 "쓸모없는 문제"에 대한 증명입니다. 실제 유용한 문제에서 양자 이점은 아직 미달성 상태이며, 이것이 NISQ 시대의 핵심 목표입니다.
13. 양자 하드웨어 플랫폼
13.1 플랫폼 비교
| 플랫폼 | 대표 회사 | 큐비트 수 | 게이트 속도 | 연결성 | 온도 |
|---|---|---|---|---|---|
| 초전도 (Superconducting) | IBM, Google, Rigetti | 1000+ | ns | 제한적 | 10-20 mK |
| Trapped Ion | IonQ, Quantinuum | 30-100 | us | All-to-all | 상온(이온트랩) |
| Photonic | Xanadu, PsiQuantum | 수십~수백 | ps | 중간 | 상온 |
| Neutral Atoms | QuEra, Pasqal | 수백 | us | 재구성 | mK |
| Topological | Microsoft | 미확정 | - | - | - |
13.2 에러율과 큐비트 품질
| 지표 | 의미 |
|---|---|
| T1 (Relaxation) | 에너지 완화 시간 |
| T2 (Dephasing) | 위상 일관성 시간 |
| Single-qubit gate error | ~0.1% (state of the art) |
| Two-qubit gate error | ~1% (state of the art) |
| Readout error | ~1-5% |
| Quantum Volume (IBM) | 품질 종합 지표 |
14. NISQ 시대와 오류 수정
14.1 NISQ (Noisy Intermediate-Scale Quantum)
John Preskill이 제안한 용어로 50-1000 큐비트 규모의 노이즈가 있는 양자 컴퓨터를 말합니다. 이 시대에는:
- 완전한 오류 수정 없음
- 회로 깊이 제한적
- 특정 문제에 대한 유용한 이점 탐구 중
- 하이브리드 알고리즘(VQE, QAOA) 유행
14.2 양자 오류 수정 (QEC)
고전 오류 수정과 달리, 양자는 연속적 오류(X, Z, 그 조합)를 모두 보정해야 하고 복제 불가 정리 때문에 백업이 불가합니다. Shor 9큐비트 코드, Surface code 등이 있으며 논리 큐비트 1개에 수천 물리 큐비트 필요.
- Surface Code: 2D 격자, 높은 임계값(1%), 현재 가장 유망
- Color Code: Surface Code 확장
- LDPC 기반: 최근 연구 활발
14.3 Fault-Tolerant Quantum Computing
완전한 오류 수정과 결함 허용 연산이 가능한 단계. 유용한 Shor 알고리즘(RSA-2048 해독)에는 수백만 물리 큐비트 필요로 추정.
15. 양자 이점 응용 분야
15.1 화학과 신약
- 분자 에너지 정확 계산
- 반응 메커니즘 시뮬레이션
- 신약 스크리닝
- 생물학적 효소 모델링 (FeMoco 등)
15.2 최적화
- 물류 경로 최적화
- 포트폴리오 최적화
- 그래프 문제 (Max-Cut)
- 제조 스케줄링
15.3 금융
- Monte Carlo 가속
- 옵션 가격 계산
- 리스크 분석
- 사기 탐지 (QML)
15.4 재료과학
- 초전도체 설계
- 배터리 화학
- 촉매 발견
16. Post-Quantum 암호학 (PQC)
16.1 왜 필요한가
Shor 알고리즘이 RSA, ECC, DH를 다항식 시간에 해독할 수 있기 때문에, 충분한 큐비트의 양자 컴퓨터가 나오면 현재 TLS, VPN, 서명의 기반이 무너집니다. "Harvest Now, Decrypt Later" 공격: 공격자가 지금 암호화 트래픽을 저장하고 미래에 해독.
16.2 NIST PQC 표준화
2024년 NIST가 첫 PQC 표준을 발표했습니다.
- FIPS 203 (ML-KEM): CRYSTALS-Kyber 기반 키 캡슐화
- FIPS 204 (ML-DSA): CRYSTALS-Dilithium 기반 서명
- FIPS 205 (SLH-DSA): SPHINCS+ 해시 기반 서명
16.3 알고리즘 분류
- 격자 기반 (Lattice): Kyber, Dilithium, Falcon - 주력
- 해시 기반: SPHINCS+ - 상태 비저장 서명
- 코드 기반: Classic McEliece - 고신뢰
- 다변수: Rainbow (깨짐)
- 동형 격자: BIKE, HQC
16.4 마이그레이션 전략
- Crypto Agility: 알고리즘 교체 용이한 설계
- 하이브리드 모드: 기존 + PQC 조합 (TLS 1.3 확장)
- 인벤토리: 현재 암호 사용처 파악
- 타임라인: 2030-2035 PQC 전환 목표 (NIST 권고)
17. 실습: Bell State와 Quantum Teleportation
17.1 Bell State 생성
from qiskit import QuantumCircuit
bell = QuantumCircuit(2, 2)
bell.h(0)
bell.cx(0, 1)
bell.measure([0, 1], [0, 1])
17.2 양자 순간이동 (Teleportation)
Alice의 미지의 상태 를 Bob에게 전송. 얽힘 + 2비트 고전 통신 필요.
def teleportation():
qc = QuantumCircuit(3, 3)
# Alice 큐비트 0을 임의의 상태로 (예)
qc.h(0)
qc.rz(0.7, 0)
qc.barrier()
# Bell pair 생성 (qubits 1, 2)
qc.h(1)
qc.cx(1, 2)
qc.barrier()
# Alice 측정 준비
qc.cx(0, 1)
qc.h(0)
qc.measure([0, 1], [0, 1])
qc.barrier()
# Bob 조건부 게이트
qc.cx(1, 2)
qc.cz(0, 2)
qc.measure(2, 2)
return qc
18. 퀴즈
Q1. 복제 불가 정리(No-Cloning Theorem)가 양자 오류 수정에 미치는 영향은?
A: 고전 컴퓨터처럼 "비트를 3번 복사해 다수결" 같은 단순 백업이 불가능합니다. 그래서 양자 오류 수정은 정보를 얽힘으로 분산시키는 복잡한 코드(Shor, Surface, LDPC)를 사용합니다. 이것이 논리 큐비트 1개에 수천 물리 큐비트가 필요한 이유입니다.
Q2. Shor 알고리즘이 RSA를 위협하는 원리는?
A: Shor 알고리즘은 정수 의 소인수분해를 다항식 시간에 해결합니다. RSA 보안은 큰 수의 소인수분해가 어렵다는 가정에 기반하므로, 충분한 논리 큐비트의 양자 컴퓨터가 나오면 RSA-2048을 깨뜨릴 수 있습니다. 그래서 Post-Quantum 암호로의 전환이 시급합니다.
Q3. Grover 알고리즘의 속도 향상은 지수적인가 이차적인가?
A: 이차적(quadratic)입니다. 개 아이템에서 타겟 검색을 고전은 , Grover는 에 해결합니다. 지수적이지 않기 때문에 NP-complete 문제 전체를 다항식 시간으로 해결하진 못합니다.
Q4. VQE와 QAOA는 왜 NISQ 시대에 유용한가?
A: 둘 다 하이브리드 양자-고전 알고리즘으로, 얕은 회로만 사용하므로 노이즈 영향이 제한적입니다. 양자 부분은 기대값 계산만 하고 파라미터 최적화는 고전 옵티마이저가 수행합니다. 완전한 오류 수정 없이도 실용적 결과를 얻을 수 있는 유력한 접근입니다.
Q5. Post-Quantum Cryptography에서 "Harvest Now, Decrypt Later" 공격이란?
A: 공격자가 현재 암호화된 네트워크 트래픽을 저장해두고, 미래에 충분히 큰 양자 컴퓨터가 나오면 해독하는 공격입니다. 이 때문에 장기 기밀성(예: 국가 기밀, 의료 기록)이 필요한 데이터는 PQC로 이미 마이그레이션해야 합니다.
19. 참고 자료
- Qiskit Documentation - qiskit.org
- Cirq Documentation - quantumai.google/cirq
- IBM Quantum Learning - learning.quantum.ibm.com
- Nielsen and Chuang, Quantum Computation and Quantum Information (Cambridge)
- Preskill, Quantum Computing in the NISQ era and beyond (2018)
- Arute et al., Quantum Supremacy using a Programmable Superconducting Processor (Nature 2019)
- NIST PQC Project - csrc.nist.gov/projects/post-quantum-cryptography
- Google Quantum AI - quantumai.google
- Shor, Algorithms for quantum computation (1994)
- Grover, A fast quantum mechanical algorithm for database search (1996)
- Microsoft Quantum Development Kit - learn.microsoft.com/quantum
- QuTiP Library - qutip.org
- Quantum Algorithm Zoo - quantumalgorithmzoo.org
결론
양자 컴퓨팅은 더 이상 물리학자만의 영역이 아닙니다. Qiskit, Cirq 같은 오픈소스 SDK 덕분에 소프트웨어 개발자도 Jupyter 노트북에서 양자 회로를 실행하고 IBM Quantum 클라우드로 실제 양자 하드웨어에 접속할 수 있습니다. NISQ 시대는 완벽하지 않지만 VQE, QAOA, 양자 머신러닝 같은 하이브리드 접근으로 첫 유용한 양자 이점을 찾아가고 있습니다. 동시에 PQC로의 마이그레이션은 모든 보안 인프라의 필수 과제입니다. 양자 시대는 이미 시작되었고, 준비하는 개발자에게 기회가 열려 있습니다.