# 양자 프로그래밍의 기초: 엘리아스 F. 콤바로 교수와의 대화 ### 큐비트 상태에서 쇼어의 알고리즘까지: 양자 프로그래밍이 실제로 어떻게 작동하는지—그리고 미래 방향은 어디로 향할까? [디비아 앤 셀바라지](https://substack.com/@divyafrompackt)와 [엘리아스 F. 콤바로](https://substack.com/@combarro) 7월 23일, 2025 양자 검색과 오류 정정에서 도구 제약 조건과 소프트웨어 재현성에 이르기까지, 양자 컴퓨터를 위한 프로그래밍은 고전적 시스템과는 완전히 다른 분야입니다. 이 대화에서 우리는 양자 컴퓨팅의 실용적 가이드인 _**[A Practical Guide to Quantum Computing](https://www.packtpub.com/en-us/product/a-practical-guide-to-quantum-computing-9781835885956)**_ (Packt, 2025)의 공저자)와 함께, 하드웨어가 아직 따라잡고 있는 세상에서 양자 소프트웨어를 작성하고, 이해하며, 가르치는 것이 무엇을 의미하는지에 대해 논의합니다. 이 책은 2023년 출간된 _**[양자 머신 러닝과 양자 최적화를 위한 실용 가이드](https://www.packtpub.com/en-us/product/a-practical-guide-to-quantum-machine-learning-and-quantum-optimization-9781804613832)**_의 저자 중 한 명입니다. Combarro는 스페인 오비에도 대학교 컴퓨터 과학부 정교수입니다. 수학과 컴퓨터 과학 두 분야에서 학위를 취득한 그는 계산 이론, 논리학, 양자 최적화, 대수적 구조 등 다양한 분야를 연구해 왔습니다. CERN과 하버드 대학교에서 연구직을 역임했으며, 2021년부터 2024년까지 CERN의 양자 기술 이니셔티브 자문위원회 위원으로 활동했습니다. 최근 연구는 수학적 형식화와 실행 가능한 양자 시스템 간의 연결을 탐구하는 데 초점을 두고 있습니다. 이 인터뷰에서는 Shor의 알고리즘과 Grover의 알고리즘 같은 기초 알고리즘, Qiskit이 교육과 실험을 위한 가장 실용적인 도구로 부상한 이유, 장난감 예제에서 실제 회로로 확장 가능한 정신 모델을 구축하는 방법 등을 다룹니다. 이 과정에서 얽힘, 측정, 추상화, 시뮬레이션, 그리고 향후 10년간 공학자, 연구자, 시스템 설계자 모두에게 현실적으로 의미할 수 있는 양자 우위성에 대해 탐구합니다. 아래에서 전체 대화를 시청하거나, 아래에서 전체 텍스트를 읽을 수 있습니다. # 책: 양자 컴퓨팅 실용 가이드 **1: 두 번째 책에서 기본으로 돌아가기로 결정한 이유는 무엇인가요?** **엘리아스 F. 콤바로:** 두 번째 책에서 양자 컴퓨팅의 기초 알고리즘으로 돌아간 이유는 두 가지입니다. 첫 번째는 첫 번째 책에 이 알고리즘을 포함시키고 싶었지만 불가능했기 때문입니다. 책을 읽으셨다면 아시겠지만, 책은 거의 700페이지에 달합니다—작성 시작 시 예상했던 것보다 훨씬 많았습니다. 따라서 다른 내용을 추가하는 것은 현실적으로 불가능했습니다. 우리는 항상 "아, 그 중요한 알고리즘들을 포함했어야 했는데"라고 생각했습니다. 불가능했기 때문에, 나중에 다시 돌아와서 다른 책을 쓰거나 확장판을 출간해 그 알고리즘들을 포함시키겠다는 생각이 계속 남아 있었습니다. 이 기초 알고리즘들은 양자 컴퓨팅에서 매우 중요합니다. 이들은 아마도 이 분야를 배우기 시작할 때 모두가 먼저 공부하는 알고리즘일 것입니다. 하지만 첫 번째 책에서는 최적화나 머신러닝에 사용되는 현대적인 알고리즘에 초점을 맞췄습니다. 당시 그 주제가 핫했고, 이를 다루는 책이 많지 않았기 때문입니다. 또한, 이 기초 알고리즘에 대해 쓰려는 욕구와 함께, 우리 대학을 비롯해 많은 곳에서 양자 컴퓨팅 관련 신규 강좌가 개설되었습니다. 현재 두 개의 다른 강의를 가르치고 있으며, 내년에는 세 번째 강의가 추가될 수도 있습니다. 이 강의들을 위해 교과서가 필요하다고 느꼈습니다. 강의 내용은 첫 번째 책인 양자 머신 러닝과 최적화 관련 내용을 포함하지만, Shor의 알고리즘, Grover의 알고리즘, 양자 텔레포테이션과 양자 키 분배와 같은 프로토콜과 같은 기초적인 주제들도 다룹니다. 이 주제는 최적화와 머신 러닝과는 매우 다르지만, 마찬가지로 중요합니다. 따라서 우리는 개인적과 실용적 필요성을 모두 느꼈습니다: 이 주제에 대해 쓰고 싶었고, 학생들을 위해 좋은 자료를 필요로 했으며, 전 세계 어디서나 양자 컴퓨팅에 대한 입문을 원하는 누구나 사용할 수 있는 자료를 원했습니다. **2: 첫 번째 책에 대한 피드백 중 두 번째 책의 교육적 접근 방식이나 기술적 깊이에 영향을 준 것이 있나요? 두 번째 책은 더 기초적인 내용을 다룹니다.** **Elías F. Combarro:** 먼저, 책의 반응에 압도당했다는 점을 말씀드려야겠습니다. 어제 스페인에 있는 석사 과정 학생으로부터 메시지를 받았는데, 저는 그분을 만난 적이 없지만, 그가 양자 머신 러닝으로 석사 논문을 발표하고 있으며, 그 주제를 선택한 주요 이유 중 하나가 우리 책이었다고 쓰셨습니다. 이것은 우리가 받은 수많은 멋진 메시지 중 하나일 뿐입니다. 반응에 정말로 압도되고 기쁘게 생각하고 있습니다. 첫 번째 책의 주요 문제점—만약 문제라고 할 수 있다면—은 개념과 알고리즘 설명에 코드가 너무 많이 얽혀 있었다는 점입니다. 우리는 실습을 중시하는 사람들입니다. 우리는 실천을 통해 배우는 것을 좋아하기 때문에, 독자들이 Anaconda나 JupyterLab을 실행하고 코드를 실행해 배우는 개념을 강화할 수 있도록 하는 것이 중요하다고 생각했습니다. 그게 우리의 접근 방식이었습니다. 하지만 단점은 양자 소프트웨어 라이브러리가 매우 빠르게 발전한다는 점입니다. 버전 변경이 자주 발생하고, 일부 코드는 업데이트되지 않아 작동하지 않을 수 있습니다. 책을 출판한 후 이 문제를 발견했습니다. 독자들은 설명과 함께 코드가 있는 것을 좋아했지만, 모든 것이 얽혀 있어 책을 업데이트하기 어려웠습니다. 그래서 새 책에서는 코드를 분리하기로 결정했습니다. 코드에만 초점을 맞춘 장과 설명에만 초점을 맞춘 장으로 나누었습니다. 이 구조를 통해 독자는 한 장에서 알고리즘을 배우고, 다른 장으로 이동해 구현 방법(실행, 수정, 연습 문제)을 확인할 수 있습니다. 동시에 이 구조는 설명 텍스트에 내장되지 않아 코드를 업데이트하기 더 쉽습니다. 두 접근 방식 모두 장점이 있으며 학생들에게 유용할 수 있지만, 이 새로운 형식은 2년, 3년, 또는 5년 후에 책을 읽는 사람에게는 더 편리할 것입니다. 독자들은 알고리즘을 배우고 필요시 온라인에서 업데이트된 노트북을 확인할 수 있습니다. **3: 많은 면에서 두 번째 책은 프리퀄과 비슷하지 않나요? 첫 번째 책부터 시작하기 어려운 독자들을 위해 말이죠. 같은 실습 중심 접근법을 사용했고 Qiskit에 더 집중하셨습니다. Qiskit이 기초 양자 컴퓨팅 교육을 위해 적절한 선택이라고 생각하시는 이유는 무엇인가요?** **Elías F. Combarro:** 이 결정은 어려웠습니다. 현재 양자 프로그래밍 언어—또는 정확히 말하면 패키지나 라이브러리—가 여러 가지 있기 때문입니다. 모두 훌륭하며 각자의 장단점이 있습니다. 첫 번째 책에서는 세 가지 다른 언어를 포함했습니다: Qiskit, 당연히, 그리고 PennyLane과 D-Wave의 Ocean입니다. 그 책에서는 양자 머신 러닝에 초점을 맞췄고, 그 분야에서는 PennyLane이 Qiskit보다 더 적합할 수 있습니다. D-Wave의 양자 어닐링 기계를 프로그래밍하려면 Ocean이 필요합니다. 다른 방법으로 그 기계에 접근할 수 없습니다. 하지만 이 새로운 책에서는 기본으로 돌아가기로 했기 때문에 세 가지 언어가 필요하지 않았습니다. 한 가지 언어만으로도 충분했습니다. 기초 알고리즘에는 거의 모든 양자 프로그래밍 언어가 적합합니다. 그러나 Qiskit은 가장 많은 기능을 제공하며, 온라인으로 양자 컴퓨터에 접근하는 것이 가장 쉽습니다. 우리에게는 이것이 매우 중요했습니다. 시뮬레이터에서 로컬로 코드를 실행할 수 있지만, 이는 실제 양자 컴퓨터가 아니라 그 동작을 시뮬레이션합니다. 동시에 실제 양자 컴퓨터에 온라인으로 접근할 수 있다는 점도 훌륭하며, Qiskit은 이를 매우 쉽게 만들어줍니다. 예를 들어, 책에서 제안한 연습 문제 중 하나는 양자 프로토콜을 선택해 시뮬레이터에서 로컬로 실행한 후 실제 양자 컴퓨터에서 실행하는 것입니다. 코드에서 3~4줄만 변경하면 전환이 가능하지만, "이 코드를 실제 양자 컴퓨터에서 실행하고 있습니다"라고 말하는 것은 정말 만족스러운 경험입니다. 특히 좋아하는 연습 문제가 하나 있습니다. 이는 자연이 양자적인지 고전적인지 탐구하기 위해 사용되는 프로토콜을 기반으로 합니다. 이 프로토콜은 CHSH 게임이라고 불리며, 책에서 상세히 설명되어 있습니다. 우리는 코드를 제공하고 독자들이 양자 컴퓨터에서 실행해 보도록 요청합니다. 결과는 게임에서 이긴 횟수의 비율인 성능 지표이며, 이 수치는 고전적 시스템에서 가능한 범위를 초과합니다. 저에게는 이 점이 정말 흥미롭습니다. 이 실험을 처음 수행한 물리학자들은 2022년 노벨상을 수상했습니다. 이제 인터넷에 연결된 노트북만으로 이와 유사한 실험을 직접 실행할 수 있습니다. # **핵심 양자 개념** **4: 소프트웨어 개발자는 단일 큐비트와 그 상태를 어떻게 생각해야 할까요? 예를 들어, 왜 블로흐 구면이나 상태 벡터 표현을 사용해야 할까요? 그리고 2개 이상의 큐비트로 확장될 때 이 관점은 어떻게 변할까요?** **Elías F. Combarro:** 매우 중요한 질문입니다. 큐비트와 그 상태를 생각할 때—특히 오늘날의 양자 컴퓨터처럼 큐비트가 많은 경우—직관적 이해가 매우 어려워집니다. 예를 들어 온라인으로 양자 컴퓨터에 접근할 때 일부는 127개의 큐비트를 가지고 있습니다. 이는 2^127개의 숫자와 암시적으로 작업하고 있다는 의미입니다. 그 숫자는 너무 커서 상상하기조차 어렵습니다. 따라서 그런 구조에 대한 직관을 개발하는 것은 정말 어렵습니다. 하지만 단일 큐비트라면 '블로흐 구면'이라는 멋진 기하학적 표현이 있습니다. 저는 시각적 사고가 강한 편은 아닙니다—기하학은 제가 특히 직관적으로 이해하는 분야는 아닙니다. 저는 기호적·대수적 표현을 선호합니다. 하지만 블로흐 구면은 유용합니다: 구면의 모든 점은 큐비트의 가능한 상태를 나타내며, 양자 게이트(연산)는 이 구면을 회전시키는 것으로 시각화할 수 있습니다. 단일 큐비트에 연산을 적용할 때 무슨 일이 일어나는지 이해하는 좋은 방법입니다. 개인적으로는 상태 벡터로 생각하는 것을 선호합니다—이 경우 복소수로 표현된 일반적인 벡터이지만, 종종 실수로 생각할 수 있습니다. 따라서 1개의 큐비트에는 두 개의 숫자만 필요합니다. 더 많은 큐비트가 있을 경우 벡터가 더 길어지며, 시스템의 상태는 이 숫자 벡터입니다. 수행하는 어떤 연산도 이 벡터에 대한 행렬 곱셈에 불과합니다. 저에게는 이것이 컴퓨터에서 일어나는 현상을 이해하는 가장 유용한 정신적 모델입니다. 1개 이상의 큐비트를 확장한 다른 기하학적 표현도 있지만, 저는 그들을 유용하기보다는 이국적이라고 생각합니다—물론 이는 제가 기하학적 사고를 하지 않기 때문일 수도 있습니다. 제가 학생들에게 항상 말하는 것은 이겁니다: 양자 컴퓨팅을 시작하기 위해 필요한 수학은 놀랍도록 적습니다. 벡터가 무엇인지, 행렬이 무엇인지, 행렬과 벡터를 곱하는 방법을 알면 됩니다. 그리고 그걸 모르더라도 부록에서 다룹니다. 따라서 고급 수학이나 물리학이 필요하지 않습니다—벡터와 행렬을 이해한다면 바로 시작할 수 있습니다. **5: 이 표현에서 얽힌 두 큐비트 상태는 어떻게 보이나요? 왜 독립적인 단일 큐비트 상태로 분해할 수 없나요?** **Elías F. Combarro:** 네, 이는 양자 시스템의 매우 놀라운 측면입니다. 얽힌 시스템은 그 구성 요소의 상태만을 보고 설명할 수 없습니다. 두 큐비트로 구성된 시스템이 있을 때, 두 개를 함께 설명하는 전역 상태가 존재합니다. 하지만 각 큐비트를 분리해서 보고, 그 부분들로부터 전체 시스템의 상태를 재구성하려고 하면 불가능합니다. 전체 전역 상태가 필요합니다. 이것이 바로 n-큐비트 시스템에 2^n 개의 진폭이 필요한 이유입니다. 각 부분이 독립적으로 설명될 수 있다면 큐비트당 두 개의 숫자만 필요했을 것입니다. 하지만 큐비트 간의 상관관계—얽힘—는 나머지 숫자에编码되어 있습니다. 이들은 개별 큐비트 상태만으로는 로컬하게 접근할 수 없습니다. 이것은 양자 물리학 초기 단계에서 매우 놀라운 현상이었습니다. 아인슈타인도 이 현상에 당황했습니다. 그는 이를 "원격 작용"이라고 불렀습니다. 얽힌 입자나 큐비트가 있을 때, 한 부분의 변화가 다른 부분에 즉시 영향을 미치기 때문입니다. 하지만 아인슈타인은 일반 상대성 이론을 개발했으며, 이는 정보가 이동할 수 있는 속도에 제한을 부과합니다. 따라서 이 즉각적인 변화의 개념은 그를 매우 괴롭혔습니다. 하지만 이 현상은 실험을 통해 반복적으로 확인되었습니다. 앞서 언급한 CHSH 게임에서도 마찬가지입니다. 이제 표현 방식으로 돌아가서: 블록 구는 개별 큐비트에는 훌륭하지만, 두 개 이상의 큐비트로 구성된 얽힌 상태에는 적용되지 않습니다. 그래서 저는 벡터 표현이 더 유용하다고 생각합니다. 이 표현은 상태가 얽혀 있는지 수학적으로 확인할 수 있는 방법을 제공합니다. 상태를 개별 큐비트 상태의 곱으로 분해할 수 있다면 얽혀 있지 않습니다. 하지만 분해할 수 없다면—상태가 곱 상태가 아니라면—얽혀 있으며, 시스템을 전체로 다루어야 합니다. **6: 왜 얽힘이 양자 알고리즘에서 그렇게 중요한 자원으로 여겨지나요?** **Elías F. Combarro:** 이 특성—얽힘—은 양자 시스템에서만 존재하기 때문입니다. 고전 물리학에서는 발생하지 않습니다. 따라서 고전 자원으로 구현할 수 없는 프로토콜과 알고리즘을 구현하는 데 사용할 수 있습니다. 우리는 책에서 이러한 일부 사례를 설명합니다. 예를 들어, 초고밀도 코딩을 사용해 정보를 전송하는 방법이나 양자 상태를 텔레포트하는 방법 등이 있습니다. 이러한 응용 사례들은 얽힘 상태가 절대적으로 필요합니다. 고전적 수단만으로는 이를 구현할 수 없습니다. 양자 컴퓨팅과 양자 정보 과학의 관점에서 보면, 이는 얽힘을 활용하는 구체적인 방법입니다. 이는 미래의 양자 인터넷에 중심적인 역할을 할 수도 있습니다. 얽힘을 통해 장거리에서 상태를 텔레포트할 수 있으며, 이는 유용한 통신 도구로 활용될 수 있습니다. 따라서 이러한 아이디어와 프로토콜은 얽힘이 실제 계산 및 정보 자원으로 활용되는 실용적인 방법입니다. **7: 양자 비트(qubit)를 측정하는 것이 고전적 비트(bit)를 읽는 것과 근본적으로 어떻게 다를까요?** **엘리아스 F. 콤바로:** 이는 양자 컴퓨팅이나 양자 물리학에 처음 접하는 사람들에게 가장 놀라운 점 중 하나입니다. 고전적 컴퓨팅에서는 데이터를 항상 검사할 수 있다는 것을 당연시합니다. 변수, 데이터 구조, 목록, 트리 등을 보고 정확히 어떤 값을 가지고 있는지 확인할 수 있습니다. 하지만 양자 컴퓨팅에서는 완전히 다릅니다. 양자 상태는 중첩 상태에 있을 수 있으며, 얽혀 있을 수도 있고, 수많은 진폭으로 설명됩니다. 하지만 측정을 수행하면 그 모든 정보를 접근할 수 없습니다. 단지 그 중 작은 부분만 얻을 수 있습니다. 예를 들어 단일 큐비트를 생각해 보세요. 그 상태는 두 개의 복소수로 설명됩니다. 이론상으로는 무한한 양의 정보입니다—실수는 무한한 소수 자릿수를 가질 수 있습니다. 하지만 측정하면 단일 고전적 비트(0 또는 1)만 얻게 됩니다. 측정의 행위는 상태를 확률적으로 0 또는 1로 붕괴시킵니다. 그리고 한 번 측정하면 원래 상태는 파괴됩니다. 0을 측정하고 다시 측정하면 계속 0을 얻을 뿐입니다—이전의 중첩 상태에 대한 모든 정보를 잃게 됩니다. 시스템은 붕괴되며, 이 붕괴는 되돌릴 수 없습니다. 이 무작위성은 근본적입니다. 동일한 양자 알고리즘을 두 번 실행하면, 같은 입력으로 실행하면 다른 결과를 얻을 수 있습니다. 고전적 프로그래밍에 익숙한 사람들에게는 매우 이상합니다—같은 입력으로 다른 출력이 나올 수 있나요? 하지만 이는 양자 역학의 본질입니다. 고전적 무작위 알고리즘에서 무작위성은 가짜 무작위 수 생성기에서 비롯되지만, 양자 컴퓨팅에서는 확률적 행동이 물리학에 내재되어 있습니다. 따라서 양자 측정은 고전적 데이터 추출과 두 가지 큰 점에서 다릅니다: 첫째, 확률적이며; 둘째, 시스템의 상태를 변경합니다. 동일한 시스템을 여러 번 측정하고 더 많은 정보를 추출할 수 없습니다. 측정을 하면 원래 상태는 사라집니다. **8: 개발자들은 어떤 큐비트를 측정할지, 회로 내의 어떤 시점에서 측정할지 어떻게 결정할 수 있을까요?** **Elías F. Combarro:** 알고리즘이나 응용 분야에 따라 다릅니다. 하지만 실제 양자 컴퓨터가 등장하기 전까지는 회로의 끝에서만 큐비트를 측정할 수 있었습니다. 이는 제한처럼 들릴 수 있지만, 사실 그렇지 않습니다. 왜냐하면 '지연 측정 원리'라는 것이 있기 때문입니다. 양자 컴퓨팅에는 회로 중간에 있는 것을 측정하려면 측정을 끝으로 미루고 회로를 조정하여 그 효과를 시뮬레이션할 수 있다는 정리가 있습니다. 따라서 계산 능력 측면에서는 차이가 없습니다. 현재 일부 플랫폼(예: Qiskit)은 회로 중간에 측정을 허용합니다. 회로 실행 중간에 특정 큐비트를 측정할 수 있습니다. 하지만 실제로는 여전히 끝에서 측정하는 것이 더 간단합니다. **9: 양자 측정으로 인해 도입되는 무작위성을 관리하기 위해 어떤 전략이 도움이 될까요?** **Elías F. Combarro:** 먼저 두 가지 다른 무작위성의 원인을 구분해야 합니다. 하나는 양자 이론에 내재된 것으로, 측정 자체의 확률적 본질이며 피할 수 없습니다. 두 번째는 실제 양자 하드웨어의 결함에서 비롯된 것으로, 노이즈, 게이트 오류, 환경 상호작용 등이 포함됩니다. 내재적 무작위성을 처리하려면 통계적 방법을 적용해야 합니다. 예를 들어, 특정 속성을 가진 요소가 벡터에 존재하는지 확인하려는 경우—예를 들어 고객 데이터베이스에서 스페인 출신 고객을 찾는 경우—를 생각해 보세요. 이 경우 Grover의 알고리즘을 사용할 수 있습니다. 고객이 존재하더라도 Grover의 알고리즘은 해당 고객을 찾을 확률적 보증을 제공합니다. 예를 들어 확률이 99%일 수 있지만, 운이 나쁘면 한 번만 실행하면 찾을 수 없을 수도 있습니다. 그렇다면 어떻게 해야 할까요? 알고리즘을 여러 번 반복하고 최상의 결과를 선택하거나 투표 방식을 사용할 수 있습니다. 예를 들어, 양자 분류기를 사용하여 이미지가 고양이인지 개인지 판단한다고 가정해 보겠습니다. 출력 큐비트를 한 번 측정하고 0(고양이)을 얻으면 확실히 알 수 없습니다. 하지만 과정을 100번 반복해 70번 0과 30번 1을 얻으면, 가장 가능성이 높은 결과가 고양이임을 결론지을 수 있습니다. 마찬가지로 양자 위상 추정(많은 분야에서 중요한 개념)에서도 절차를 반복해 점점 더 정확한 근사치를 얻습니다. 반복할수록 추정치가 더 정확해집니다. 이제 하드웨어 결함에서 발생하는 노이즈에 대해 설명하겠습니다. 이 책의 대부분에서는 이상화된 양자 컴퓨터를 사용합니다. 하지만 마지막 부분에서는 양자 오류 교정을 소개합니다. 오류 완화 같은 더 간단한 기술도 있습니다. 한 방법은 기계를 교정하는 것입니다. 즉, 0이나 1 같은 알려진 상태를 입력했을 때 오류가 발생하는 빈도를 측정합니다. 이 데이터를 바탕으로 이후 측정치를 조정해 오류를 보정할 수 있습니다. 그리고 완전한 양자 오류 정정은 더 복잡하고 구현이 어렵지만, 훨씬 강력한 방법입니다. 장기적으로 실제 양자 하드웨어와 작업할 때 필수적입니다. # **핵심 양자 알고리즘** **10: Grover의 알고리즘은 구조화되지 않은 검색에 대해 2차 속도 향상을 제공합니다. 진폭 증폭의 핵심 아이디어와 필요한 가정 또는 자원에 대해 설명해 주시겠어요?** **Elías F. Combarro:** Grover의 알고리즘은 아마도 제가 가장 좋아하는 양자 알고리즘입니다. 수학적으로 아름답고, 컴퓨터 과학적 관점에서 보면 매우 놀랍습니다. 핵심 아이디어는 다음과 같습니다: 어떤 데이터(예: 벡터)가 있고, 특정 조건을 충족하는 요소를 찾고자 한다고 가정해 보겠습니다. 데이터가 구조화되지 않았다면(예: 항목이 무작위 순서로 배열되어 있다면) 전통적인 방법으로는 하나씩 검색하는 것 외에 다른 방법이 없습니다. 항목이 백만 개라면 모든 항목을 확인해야 할 수도 있습니다. 하지만 Grover의 알고리즘을 사용하면 데이터가 완전히 구조화되지 않았더라도 약 1,000번의 확인만으로 올바른 요소를 찾을 수 있습니다. 이는 2차 속도 향상 때문이며, 데이터 크기가 증가할수록 차이는 더욱 극명해집니다. 어떻게 작동할까요? 먼저 모든 가능한 입력의 중첩 상태를 생성합니다. 그 다음 진폭 증폭을 통해 올바른 해를 측정할 확률을 높입니다. 이 과정은 회전과 같은 일련의 기하학적 변환을 통해 이루어집니다. 각 단계마다 솔루션 벡터에 더 가까이 회전합니다. 적절한 시점에서 멈추면 올바른 답을 측정할 확률이 매우 높아집니다. 하지만—이 부분이 중요합니다—최적점을 넘어 계속 진행하면 솔루션에서 멀어지기 시작합니다. 따라서 Grover 알고리즘을 너무 많이 실행하면 결과는 오히려 악화됩니다. 이는 고전적 검색과 매우 다릅니다. 고전적 검색에서는 일반적으로 더 많은 노력을 기울일수록 성공 확률이 높아집니다. 자원 측면에서는: 대부분의 양자 알고리즘과 마찬가지로 Grover 알고리즘은 입력 데이터를 양자 오라클로 표현할 수 있다고 가정합니다. 하드 드라이브에서 파일을 읽는 것처럼 직접 읽을 수 없습니다. 정보를 양자 컴퓨터가 쿼리할 수 있는 함수로 인코딩해야 합니다. 예를 들어 스페인 출신 고객을 검색할 때, 오라클은 인덱스를 입력으로 받아 해당 고객이 조건을 충족하는지 확인합니다. true 또는 false를 반환합니다. 이 책에서는 다양한 문제에 적용할 수 있는 오라클 구현 방법을 설명하여 Grover의 알고리즘을 실제로 사용할 수 있도록 했습니다. **11: Grover의 기술은 문자 그대로의 데이터베이스 검색을 넘어 다른 문제에 적용될 수 있나요?** **Elías F. Combarro:** 네, 확실히 가능합니다. 이 책에서는 다루지 않았지만 이전 책에서 다룬 응용 사례 중 하나는 최적화입니다. 검색의 개념은 자연스럽게 최적화 문제로 확장됩니다. 예를 들어, 데이터베이스에서 지난해 가장 많은 돈을 지출한 고객을 찾는다고 가정해 보겠습니다. 최대 값을 사전에 알 수 없기 때문에 특정 임계값을 직접 검색할 수 없습니다. 하지만 Grover의 알고리즘을 사용하여 임계값을 반복적으로 조정하는 방식으로 해결할 수 있습니다. 먼저 $1,000 이상 지출한 고객을 찾는 것으로 시작할 수 있습니다. 만약 그런 고객을 찾으면 기준을 높여 $2,000, $3,000 등으로 계속 조정해 나가다가 더 이상 기준을 충족하는 고객이 없을 때까지 반복합니다. 이 방법은 최대값에 접근하는 방법을 제공하며, 이를 Grover 적응형 검색이라고 합니다. 이 방법은 우리 첫 번째 책에서 설명했습니다. 이는 Grover의 아이디어를 최적화 시나리오로 확장한 단순한 방법입니다. **12: Grover 알고리즘의 현재 한계는 무엇인가요?** **Elías F. Combarro:** 한계는 Shor의 알고리즘과 이 책에 수록된 대부분의 알고리즘과 유사합니다. 이 알고리즘들은 소음이 없고 완벽한 게이트를 갖춘 이상적인 양자 컴퓨터를 위해 설계되었습니다. 하지만 현재의 하드웨어는 소음이 있으며, 이 알고리즘들은 일반적으로 많은 연산이 포함된 긴 회로를 사용합니다. 회로가 길수록 오류가 누적될 가능성이 높아집니다. 이는 신뢰할 수 있는 결과를 얻기 어렵게 만듭니다. 또 다른 문제는 연결성입니다. Grover의 알고리즘과 같은 알고리즘은 모든 큐비트를 동시에 사용하는 연산이 필요합니다. 하지만 현재의 기계에서는 먼 거리にある 큐비트를 직접 얽힐 수 없습니다. 정보를 이동시켜 큐비트가 상호작용할 수 있도록 추가 게이트를 삽입해야 하며, 이는 회로를 더욱 확장시켜 오류 발생 가능성을 높입니다. 따라서 주요 문제는 노이즈, 긴 회로 깊이, 제한된 큐비트 연결성입니다. 이 모든 요소는 현재 기술 수준에서 Grover의 알고리즘을 유용한 규모로 실행하는 것을 매우 어렵게 만듭니다. **13: 쇼어의 알고리즘은 고전적 방법보다 지수적으로 더 빠르게 큰 정수를 인수분해합니다. 이 속도 향상을 위해 주기 찾기와 양자 푸리에 변환을 어떻게 활용하는지 설명해 주시겠어요?** **Elías F. Combarro:** 네. 이 부분은 책에서 가장 어려운 부분이었어요. 아마 11장—마지막 부분에 가깝죠—이고, 이전 장들에서 점차적으로 준비해 나갔어요. 저는 Shor의 알고리즘을 수년간 연구해 왔기 때문에 저에게는 자연스러운 것이지만, 기본 원리부터 명확히 설명하는 것은 정말 어려운 도전이었습니다. 동시에 매우 재미있었습니다. 왜냐하면 이 과정이 제 이해를 재구조화하고 아이디어를 가장 단순한 방식으로 제시하는 방법을 찾도록 강요했기 때문입니다. Shor의 알고리즘은 매우 중요합니다. 표면상으로는 정수 분해는 그렇게 흥미로운 것처럼 보이지 않을 수 있지만, 현대 암호화의 많은 부분을 뒷받침합니다. 온라인 통신 보안—현재 우리가 사용하고 있는 연결을 포함해—은 큰 수를 분해하는 것이 계산적으로 어렵다는 가정 위에 구축된 암호화 프로토콜에 의존합니다. 강력한 고전적 컴퓨터라도 큰 키를 분해하는 데 수백만 년이 걸릴 것입니다. 하지만 양자 컴퓨터가 쇼어의 알고리즘을 실행하면 그 암호화를 훨씬 더 빠르게 해독할 수 있습니다. 이것이 바로 양자 암호화 이후의 암호화 프로토콜을 개발하기 위한 전 세계적인 노력이 진행 중인 이유입니다. 쇼어의 알고리즘의 핵심 아이디어는 인수분해가 주기 찾기 문제로 환원될 수 있다는 점입니다. 즉, 정수 aaa가 주어졌을 때, 주어진 수 aaa에 대해 armod  N=1a^r \\mod N = 1armodN=1을 만족하는 주기 rrr을 찾는 것입니다. 이로써 주기적인 함수를 얻을 수 있습니다. 고전적 컴퓨터는 이러한 함수의 주기를 효율적으로 찾는 데 취약합니다. 하지만 양자 컴퓨터는 양자 푸리에 변환을 사용하여 이를 매우 빠르게 수행할 수 있습니다. '푸리에 변환'이라는 말을 들으면 '주파수나 주기성을 추출하려는 것'이라고 생각하시면 됩니다 따라서, 숫자를 N^r로 승산하고 N으로 나눈 나머지를 취해 주기적 함수를 생성한 후, 양자 푸리에 변환을 적용해 주기를 추출합니다. 주기를 얻으면 원본 숫자의 인수를 계산할 수 있습니다. 이것이 알고리즘의 핵심입니다. **14: 현재의 양자 하드웨어에서 Shor의 알고리즘을 구현하는 주요 도전 과제는 무엇인가요?** **Elías F. Combarro:** Grover의 알고리즘과 매우 유사합니다. 많은 게이트가 필요하며, 이는 긴 회로를 의미하며, 이는 많은 노이즈를 유발합니다. 또한 큰 수를 인수분해하려면 해당 수를 양자 컴퓨터에 저장해야 합니다. 암호화 키가 2,000, 3,000, 또는 4,000 비트 길이라면 그와 동일한 수의 큐비트가 필요합니다. 현재 가장 큰 양자 컴퓨터는 몇 백 개의 물리적 큐비트만을 보유하고 있으며, 이는 오류 교정 기능이 없습니다. 2,000개 이상의 신뢰할 수 있는 논리적 큐비트를 얻으려면 물리적 큐비트가 그 수의 수백 배가 필요할 것입니다—수십만 개에 달할 수도 있습니다. 이는 현재 기술 수준을远远히 넘어섭니다. 따라서 큐비트 수와 노이즈 수준은 현재 실제 하드웨어에서 Shor의 알고리즘을 실행하는 데 주요 장애물입니다. **15: 현재 하드웨어에서 실행 가능한 Shor의 알고리즘의 소규모 또는 간소화된 버전이 있나요? 또는 수론적 문제를 해결하기 위한 다른 양자 알고리즘 중 더 빨리 실용화될 수 있는 것이 있을까요?** **Elías F. Combarro:** 네, 실제로 최근 몇 주 동안 Shor의 알고리즘을 간소화하여 필요한 큐비트 수를 줄여 작은 양자 컴퓨터에서 실행할 수 있도록 제안한 여러 논문을 읽었습니다. 하지만 이러한 간소화에도 불구하고 큐비트 요구 사항은 여전히 현재 기술 수준을 훨씬 초과합니다. 수론적 문제 중 다른 문제로는 시몬의 문제가 있습니다. 이는 실용적 응용이 없는 순수 학술적 문제이지만, 제한된 의미에서 양자 우위를 입증하는 데 사용되었습니다. 최근에, 아마 하루 이틀 전에, 연구자들이 실제 양자 하드웨어에서 시몬의 문제의 간소화된 버전을 실행하고 일부 우위를 보여주는 논문을 봤습니다. 문제는 지금까지 본 대부분의 양자 우위 시연이 실제 응용이 없는 학술적 문제에 한정되어 있다는 점입니다. 연구자들에겐 매우 흥미로운 문제지만, 실용적 측면에서는 아직 유용하지 않습니다. # 양자 오류 정정과 양자 우위 **16: 양자 오류 정정(QEC)은 양자 컴퓨터를 확장하는 데 필수적입니다. QEC의 기본 원리는 무엇인가요? 예를 들어 논리적 큐비트와 물리적 큐비트의 차이점은 무엇인가요?** **Elías F. Combarro:** 양자 오류 정정의 기본 원리는 고전적 오류 정정과 유사합니다. 고전적 컴퓨팅에서는 오류 정정이 주로 중복을 통해 지속적으로 발생합니다. 잡음이 있는 채널을 통해 비트 하나를 전송할 때, 한 번만 전송하면 올바르게 수신되었는지 확신할 수 없습니다. 하지만 000이나 111처럼 세 번 전송하면, 수신자가 001을 받으면 메시지가 아마도 0이었을 것이라고 추론하고 수정할 수 있습니다. 중복성을 추가할수록 메시지의 내구성이 높아집니다. 3비트 대신 1,000비트를 사용하면 오류 발생 확률을 원하는 수준까지 낮출 수 있습니다. 양자 오류 정정은 동일한 원리를 기반으로 하지만 중요한 차이가 있습니다. 정보를 단일 큐비트에 저장하는 대신 여러 큐비트에 분산시켜 저장합니다. 개별 큐비트는 물리적 큐비트라고 부르며, 결합되어 인코딩된 단위는 논리적 큐비트입니다. 이는 노이즈가 있는 큐비트들로 구성되어 있지만, 완벽한 큐비트처럼 행동하는 추상화입니다. 하지만 한 가지 문제가 있습니다: 고전적 컴퓨팅에서는 비트 값을 직접 확인할 수 있습니다. 양자 컴퓨팅에서는 그렇게 할 수 없습니다—큐비트의 상태를 붕괴시키지 않고 측정할 수 없기 때문입니다. 따라서 양자 오류 정정은 부분 측정(증후군 측정)을 사용합니다. 이는 실제 양자 정보를 방해하지 않으면서 발생할 수 있는 오류의 종류에 대한 제한된 정보를 제공합니다. 이 제한된 데이터로부터 어떤 교정을 적용해야 하는지 추론하고 논리적 상태를 복원할 수 있습니다. 따라서 이는 고전적 오류 교정과 정신적으로 유사하지만, 양자 역학의 본질로 인해 더 엄격한 제약 조건 하에서 작동해야 합니다. **17: "양자 우위" 또는 "우월성"이라는 용어가 많은 주목을 받고 있습니다. 양자 우위를 엄격히 정의한다면 어떻게 될까요? 현재의 잡음이 많은 양자 장치라도 고전적 장치보다 우수한 성능을 보일 수 있는 문제나 작업의 예를 들어주실 수 있나요?** **Elías F. Combarro:** 양자 우위를 생각하는 방법은 여러 가지가 있으며, 이것이 용어가 혼란을 일으키는 이유 중 하나입니다—사람들이 서로 다른 의미를 부여하기 때문입니다. 첫 번째 유형은 수학적 양자 우위입니다. 이는 특정 작업에 대해 양자 알고리즘이 고전적 알고리즘보다 우수함을 이론적으로 증명하는 것입니다. Grover의 알고리즘과 Shor의 알고리즘이 예시입니다. 오류 교정된 양자 컴퓨터가 충분한 규모와 적절한 연결성을 갖출 경우, 수학적으로 이 알고리즘을 고전적 컴퓨터보다 빠르게 실행할 수 있습니다. 이 부분에 대해서는 논쟁의 여지가 없습니다. 하지만 실용적 양자 우위도 있습니다. 이는 실제 실험에서 양자 컴퓨터가 특정 문제를 가장 우수한 고전적 알고리즘보다 더 빠르게 해결한다는 것을 보여주는 것입니다. 이는 훨씬 더 어렵습니다. 왜냐하면 고전적 컴퓨터도 계속 발전하고 있기 때문입니다. 새로운 고전적 알고리즘은 계속 등장합니다. 따라서 오늘날 양자 컴퓨터가 고전적 시스템을 이긴다고 해도, 다음 달에 더 나은 고전적 알고리즘이 개발될 수 있으며, 그러면 양자 우위는 사라집니다. 이는 2019년 구글이 특정 문제에 대해 양자 우위를 주장했을 때 실제로 발생했습니다. 당시 고전적 컴퓨터는 그 문제를 해결할 수 없었습니다. 하지만 이제 고전적 컴퓨터도 그 문제를 해결할 수 있게 되었습니다. 따라서 그 사례는 더 이상 양자 우위의 예시가 아닙니다. 물론 구글과 다른 기업들도 양자 시스템을 계속 개선하고 있기 때문에 이는 경쟁입니다. 결국 일부 문제에서는 양자 컴퓨터가 영구적으로 앞서게 될 것입니다. 하지만 아직 그 단계에는 이르지 않았습니다. 따라서 실용적인 양자 우위는 움직이는 목표이며, 매우 미묘한 것입니다. 또 다른 중요한 점은 현재 양자 우위 실험에 사용되는 문제들이 실용적이지 않다는 것입니다. 이들은 학술적으로 흥미로운 문제지만, 실제 세계의 문제를 해결하지는 않습니다. 우리는 미래에 더 크고 안정적인 양자 기계가 개발되면 이 상황이 변할 것으로 기대합니다. **18: 반대로, 양자 우위에 대한 주장을 들을 때 사람들이 가장 흔히 가진 오해는 무엇인가요?** **Elías F. Combarro:** 가장 큰 오해는 양자 우위가 입증되었다면 양자 컴퓨터가 이제 모든 문제를 더 빠르게 해결할 수 있다는 것입니다. 그건 단순히 사실이 아닙니다. 실제로 이러한 시연은 매우 특정적이고 종종 인공적인 문제에 적용되며 실용적인 응용이 없습니다. 따라서 사람들은 '양자 우위'라는 말을 듣고 분자를 더 빠르게 시뮬레이션하거나 암호화를 해독할 수 있다고 생각하지만, 아직 그 단계에 이르지 않았습니다. 또 다른 오해는 양자 우위가 한 번 입증되면 영구적이라는 것입니다. 앞서 언급했듯이 그렇지 않습니다. 더 나은 고전적 알고리즘이 개발되면 사라질 수 있습니다. 따라서 이는 단일한 이정표가 아니라 고전적 접근 방식과 양자 접근 방식 간의 지속적인 경쟁의 일부입니다. # 양자 소프트웨어 및 공학 실천 **19: Qiskit과 같은 양자 컴퓨팅 프레임워크가 성숙해감에 따라 어떤 프로그래밍 추상화가 등장했나요? 예를 들어, 양자 회로와 게이트는 고전적 프로그래밍 개념과 어떻게 매핑되나요?** **Elías F. Combarro:** 이는 고전적 프로그래머들에게 종종 놀랍습니다. 양자 컴퓨팅에 관심 있는 첫 번째 컴퓨터 과학 학생이 제 사무실에 찾아왔을 때, 그는 "양자 컴퓨터에서 루프를 어떻게 구현하나요?"라고 물었습니다. 저는 "들어와서 앉아보세요—나쁜 소식이 있어요"라고 말해야 했습니다 양자 프로그램은 근본적으로 다릅니다. 루프가 없습니다. 고전적 프로그래밍에서처럼 지속적 메모리나 데이터 구조도 없습니다. 양자 회로가 있습니다—시작부터 끝까지 한 번만 실행되는 유한한 연산 순서입니다. 회로 내에서 멈추거나 검사하거나 루프를 돌 수 없습니다. 실행하고 측정하면 끝입니다. 이 때문에 많은 양자 알고리즘은 결과 후처리를 위해 클래식 컴퓨터나 반복 실행을 제어하기 위해 필요합니다. 양자 회로를 수백 번 또는 수천 번 실행한 후 클래식 루틴을 사용해 측정 결과를 집계하고 결정을 내릴 수 있습니다. 이 구조는 고수준 추상화를 구축하기 어렵게 만듭니다. 양자 회로는 어셈블리 코드와 유사합니다—분기나 루프가 없는 매우 저수준의 구조입니다. 그럼에도 불구하고, 양자 서브루틴의 일부 재사용 가능한 예시가 등장했습니다. 예를 들어 진폭 증폭이나 양자 푸리에 변환이 있습니다. 이러한 것은 모듈형 구성 요소로 간주될 수 있습니다—클래식 프로그래밍에서의 함수나 라이브러리와 유사합니다. 하지만 핵심 도전 과제는 양자 회로는 전체적으로 실행되어야 한다는 점입니다. 중간 결과를 일시 중지하거나 검사하거나 재사용할 수 없습니다. 왜냐하면 측정이 상태를 붕괴시키기 때문입니다. 이는 클래식 시스템보다 구성과 모듈식 설계가 더 어렵게 만듭니다. **20: 양자 코드의 복잡성을 관리하기 위해 개발자들이 채택할 수 있는 새로운 설계 패턴이나 표준 라이브러리가 있나요?** **Elías F. Combarro:** 네, Qiskit 같은 라이브러리는 유용한 추상화를 포함합니다. 예를 들어, 우리 책에서는 부울 함수와 오라클을 위한 설계 패턴을 구축했습니다. 이들은 양자 회로 내에서 조건이나 제약을 표현할 수 있으며, Grover 알고리즘과 같은 알고리즘에 필수적입니다. 그러나 회로 설계는 여전히 어렵습니다. 저는 하드웨어 수준 최적화 전문가는 아니지만, 이 분야 전문가들과 협력해 왔습니다—우리 기술 검토자 중 한 명은 Qiskit에서 근무하며 덧셈과 곱셈과 같은 산술 연산에 대한 효율적인 양자 회로 설계를 전문으로 합니다. 이러한 최적화는 게이트 수를 줄이고 노이즈를 최소화하는 데 중요합니다. 일부 새로운 설계 패턴이 등장하고 있지만, 아직 초기 단계입니다. 회로 구성은 문제에 매우 특화되어 있으며, 양자 알고리즘과 하드웨어 제한 사항에 대한 깊은 이해가 필요합니다. 따라서 고전적 소프트웨어 공학에서 볼 수 있는 일반적인 고수준 추상화 도구를 갖기까지는 아직 멀었습니다. **21: 양자 컴파일러나 트랜스파일러의 개념은 클래식 컴파일러와 어떻게 다를까요? 그리고 특정 하드웨어 백엔드에 맞게 회로를 최적화하기 위해 개발자가 알아야 할 사항은 무엇인가요?** **Elías F. Combarro:** 트랜스파일링이나 컴파일링의 개념은 클래식 프로그래밍과 매우 유사합니다. 클래식 컴퓨팅에서는 C나 Java와 같은 고수준 언어로 코드를 작성한 후, 이를 기계어로 컴파일합니다. 양자 컴퓨팅에서도 같은 원리입니다: Qiskit과 같은 언어로 작성된 코드가 하드웨어에서 실행될 수 있는 저수준 양자 연산 시퀀스로 번역됩니다. 그러나 중요한 차이가 있습니다. 첫째, 양자 '고급' 언어는 전통적 기준으로는 여전히 매우 저수준입니다. 루프, 분기, 복잡한 데이터 구조가 없습니다. 따라서 추상화 격차가 더 작습니다. 둘째, 전통적 컴파일러와 달리 양자 트랜스파일러는 하드웨어 세부 사항으로부터 완전히 격리시켜주지 않습니다. 전통적 컴퓨팅에서는 프로세서의 내부 배선 등을 고려할 필요가 없습니다. 하지만 양자 컴퓨팅에서는 그런 세부 사항이 매우 중요합니다. 양자 컴퓨터의 모든 큐비트는 서로 연결되어 있지 않습니다. 따라서 두 개의 멀리 떨어진 큐비트에 게이트를 적용하려면 트랜스파일러가 데이터를 이동시키기 위해 추가 작업을 삽입해야 합니다. 이는 노이즈를 도입하고 회로 깊이를 증가시킵니다. 이 때문에 양자 개발자는 대상 기계에 대해 일부 지식을 갖추어야 합니다. 예를 들어, 큐비트 0과 큐비트 10을 사용하는 회로를 작성한다고 가정해 보겠습니다. 이 두 큐비트는 물리적으로 인접하지 않습니다. 트랜스파일러는 스왑 게이트를 사용하여 두 큐비트를 연결하는 방법을 찾을 것입니다—하지만 이는 오버헤드와 오류 위험을 증가시킵니다. 실제로, 개별 큐비트의 품질도 다양합니다. 양자 하드웨어는 매일 교정되며, 일부 큐비트는 다른 것보다 성능이 우수합니다. 따라서 알고리즘이 노이즈에 민감하다면 특정 장치에서 가장 품질이 좋은 큐비트에 제한하는 것이 좋습니다. Qiskit은 이러한 진단 정보를 확인할 수 있으며, 책에서 사용 방법을 설명합니다. **22: 양자 상태가 직접 복사되거나 완전히 관측될 수 없다는 점을 고려할 때, 개발자는 실제로 양자 알고리즘을 테스트하고 디버깅하는 방법은 무엇인가요?** **Elías F. Combarro:** 바로 여기서 클래식 시뮬레이션이 절대적으로 필수적입니다. 양자 코드를 작성하고 실제 하드웨어에서 실행한 후 예상치 못한 결과를 얻으면, 그 원인을 파악하기 매우 어렵습니다. 소음 때문인가요? 논리 오류 때문인가요? 아니면 양자 측정의 무작위성 때문인가요? 이를 구분하기 위해 먼저 클래식 시뮬레이터에서 코드를 실행합니다. 이 시뮬레이터는 결정론적이며 소음이 없으며, 완벽한 큐비트를 가정할 때 회로의 정확한 수학적 결과를 제공합니다. 이를 통해 실제 양자 하드웨어로 이동하기 전에 논리가 올바른지 검증할 수 있습니다. 한계는 규모입니다. 클래식 시뮬레이터는 엄청난 양의 메모리가 필요합니다. 예를 들어, 38개의 큐비트를 시뮬레이션하려면 8테라바이트의 RAM이 필요합니다. 39개의 큐비트를 시뮬레이션하려면 16테라바이트가 필요합니다. 따라서 지수적인 벽이 존재합니다. 하지만 30개 정도의 큐비트까지는 시뮬레이션이 여전히 가능하며, 디버깅에 매우 유용합니다. 실제로는 세 단계로 진행됩니다: 첫째, 완벽한 시뮬레이터에서 코드를 실행합니다; 둘째, 노이즈를 포함한 시뮬레이터를 사용합니다; 셋째, 실제 하드웨어로 이동합니다. 이 방식으로 오류의 원인을 격리할 수 있습니다—코드에 있는지, 노이즈 모델에 있는지, 아니면 물리적 장치에 있는지. **23: 양자 코드에서 가장 흔한 버그나 오류는 무엇인가요? Qiskit에는 이러한 문제를 디버깅하기 위한 특정 도구가 있나요?** **Elías Fernández Combarro Álvarez:** 양자 프로그램은 개발 과정에서 클래식 시뮬레이터에서 실행되기 때문에, 일반적인 Python 코드에서 사용하는 것과 동일한 표준 디버깅 도구(브레이크포인트, 검사, 로깅 등)를 사용할 수 있습니다. 가장 유용한 기술 중 하나는 회로 내 특정 지점에서 상태 벡터를 검사하는 것입니다, 특히 시뮬레이터를 사용할 때 말이죠. 게이트를 드래그 앤 드롭으로 회로를 구성할 수 있는 시각적 시뮬레이터도 있습니다. 이러한 도구는 파괴적인 측정을 수행하지 않고 시스템의 상태를 각 단계에서 관찰할 수 있습니다. 이는 매우 유용합니다. 상태가 어떻게 진화하는지 및 예상대로 동작하는지 확인할 수 있습니다. 물론, 20개의 큐비트를 다루는 경우 상태 벡터에는 백만 개 이상의 복잡한 진폭이 포함되므로 전체 상태를 검사하는 것은 항상 실용적이지 않을 수 있습니다. 하지만 많은 경우 회로에 구조나 대칭성이 있어 모든 숫자를 추적하지 않고도 발생 중인 현상을 추론할 수 있습니다. 일반적인 오류는 주로 개념적입니다. 예를 들어, 측정 결과가 상태에 미치는 영향을 잘못 이해하거나, 의도한 얽힘을 유지하지 않는 게이트를 사용하는 경우입니다. 인덱싱 오류도 발생할 수 있으며, 특히 회로 일부를 복사하거나 구성 요소를 모듈화할 때 자주 발생합니다. **24: 양자 계산은 확률적 결과를 생성하며, 결과는 하드웨어 백엔드에 따라 다를 수 있습니다. 개발자는 양자 실험의 재현성을 어떻게 보장할 수 있을까요?** **Elías Fernández Combarro Álvarez:** 엄밀히 말하면 불가능합니다. 양자 계산은 본질적으로 확률적이기 때문에 동일한 측정 결과를 정확히 재현할 수 없습니다. 대신 성공 확률을 높일 수 있습니다. 유용한 양자 알고리즘은 항상 어떤 수준의 성공 보장을 제공합니다. 예를 들어, Grover의 알고리즘은 올바른 답을 찾을 확률이 99.9%일 수 있습니다. 하지만 0이 아닌 확률로 실패할 수 있습니다. 1,000번 실행해도 올바른 결과를 놓칠 수 있습니다—매우 드물지만 가능합니다. 그것이 바로 양자 역학의 작동 방식입니다. 그러나 시뮬레이션에서는 재현성이 가능합니다. 시뮬레이터는 가짜 무작위 숫자 생성기를 사용하기 때문에, 고정된 무작위 시드를 설정하면 시뮬레이터 버전과 환경이 동일할 경우 항상 동일한 결과를 얻을 수 있습니다. 이것이 책에서 우리가 하는 것입니다: 독자들이 결과를 정확히 재현할 수 있도록 무작위 시드를 명시합니다. 요약하자면: 고정된 시드를 사용한 시뮬레이션에서는 재현성이 가능하지만, 실제 양자 하드웨어에서는 불가능합니다. 왜냐하면 무작위성은 근본적이고 피할 수 없기 때문입니다. **25: 개발자 경험을 논의해 보겠습니다. Qiskit와 다른 도구들은 많은 발전을 이뤘지만, 사용성, 문서화, 또는 도구 측면에서 여전히 어떤 격차가 남아 있다고 생각하시나요?** **Elías F. Combarro:** 앞서 언급한 문제 중 하나는 양자 소프트웨어의 빠른 변화 속도입니다. 예를 들어 Qiskit은 과거에 자주 업데이트되었고, 각 신규 버전은 기존 코드를 깨뜨릴 수 있었습니다. 최신 버전으로 업그레이드하면 두세 달 만에 스크립트가 작동하지 않을 수 있었습니다. 이 상황은 크게 개선되었습니다. 이 책을 작성할 때 Qiskit 2.0—중대한 신규 버전—이 우리가 책을 완성할 무렵에 출시될 예정이라는 것을 알고 있었습니다. 우리는 그 버전을 사용하지 않고 책을 작성했기 때문에 변경 사항이 무엇일지 몰라 걱정했습니다. 이것이 설명 장과 코드를 분리시킨 이유 중 하나입니다—업데이트를 쉽게 만들기 위해서입니다. 다행히, qiskit 2.0이 출시되었을 때 우리는 몇 가지 변경만 하면 되었습니다. 대부분의 코드는 바로 실행되었습니다. 그러나 문서화는 Qiskit뿐 아니라 이전 책에서 사용한 PennyLane와 같은 도구에서도 더 많은 작업이 필요한 분야입니다. 현실은 이러한 프로젝트의 많은 부분이 자원봉사자에 의존하고 있다는 점입니다. IBM과 Xanadu와 같은 기업에서도 이러한 라이브러리를 개발하지만, 모든 것이 완전히 문서화되어 있지 않습니다—특히 최신 기능들은 더욱 그렇습니다. 때로는 소스 코드를 읽어야만 어떻게 작동하는지 이해할 수 있습니다. 이 때문에 우리 책에서는 단순히 도구를 사용하는 방법을 설명하는 것뿐 아니라, 내부에서 어떤 일이 일어나는지 설명하려고 노력했습니다. 이렇게 하면 독자들이 예상치 못한 상황이 발생했을 때 막히지 않도록 할 수 있습니다. 예를 들어, 이 책을 작성하는 과정에서 Qiskit에서 결과 변수의 이름이 회로 시작 부분이나 끝 부분에서 측정 연산을 선언하는지에 따라 달라진다는 사실을 발견했습니다. 이 내용은 문서화되어 있지 않았고, 우리가 알아내는 데 시간이 걸렸습니다. 따라서 다른 사람들이 같은 어려움을 겪지 않도록 책에 명확한 설명을 포함시켰습니다. # **하드웨어 및 로드맵** **26: 하드웨어 환경에는 초전도 큐비트, 포획 이온, 광학 큐비트, 스핀 큐비트 등이 포함됩니다. 큐비트 연결성, 코히런스 시간, 게이트 충실도, 확장성 측면에서 주요 접근 방식을 비교해 주시겠어요?** **Elías F. Combarro:** 먼저 밝히자면, 저는 양자 하드웨어 전문가가 아닙니다. 제 배경은 알고리즘과 양자 소프트웨어입니다. 하지만 코드를 효과적으로 실행하려면 일부 하드웨어 기본 지식이 필요합니다. 그렇지 않으면 설명하기 어려운 결과를 얻을 수 있습니다. 각 기술은 장점과 단점을 가지고 있습니다. Qiskit을 통해 접근할 수 있는 시스템은 초전도 큐비트를 기반으로 합니다. 이는 현재 가장 성숙한 플랫폼입니다. 제조 측면에서 클래식 하드웨어와 유사하기 때문에 확장성에 유리합니다. 하지만 한계도 있습니다. 큐비트가 유용한 양자 상태를 유지하는 시간인 코히런스 시간은 매우 짧습니다. 보통 마이크로초 단위입니다. 이는 큐비트 간 간섭으로 인해 계산이 망가질 때까지 적용할 수 있는 게이트의 수를 제한합니다. 초전도 시스템의 게이트 충실도는 99.9% 이상으로 상당히 개선되었지만, 여전히 오류가 발생하며 특히 긴 회로에서 더 두드러집니다. 연결성 문제도 있습니다. 모든 큐비트가 직접 연결되어 있지 않아 더 많은 교환 작업과 노이즈가 발생합니다. 트랩된 이온은 더 긴 코히런스 시간(때로는 초 단위)과 일반적으로 더 우수한 연결성을 제공합니다. 하지만 확장성이 어렵습니다. 고품질 큐비트를 몇십 개는 얻을 수 있지만, 아직 수백 개나 수천 개는 아닙니다. 광학 시스템은 또 다른 유망한 방향입니다. 이 시스템은 더 긴 코히런스 시간을 유지하며 실온에서 작동할 수 있어 큰 장점이 있습니다. 하지만 특정 작업—예를 들어 얽힘 게이트—은 구현이 어렵습니다. 새로운 플랫폼으로는 라이드베르그 원자와 중성 원자 배열이 있습니다. 이들은 레이저를 이용해 개별 원자를 포획하고 조작하며, 독특한 장점을 가지고 있습니다. 예를 들어 광학 집게를 사용하면 원자를 물리적으로 이동시킬 수 있어, 멀리 떨어져 있는 큐비트 간 상호작용이 가능해집니다—연결성 문제를 해결할 수 있습니다. 하지만 초전도 시스템보다 연산 속도가 느립니다. 따라서 각 플랫폼은 장단점이 있습니다. 솔직히 말해, 대규모 실용적 양자 컴퓨팅을 가능하게 할 기술은 아직 발명되지 않았다고 생각합니다. 많은 연구팀이 다양한 방향을 탐구하고 있으며, 승자 전략은 완전히 새로운 것이 될 수도 있습니다. **27: 5~10년 후를 내다보며, 양자 컴퓨팅이 실용적 혜택을 제공할 현실적인 시기는 어떻게 보십니까?** **엘리아스 페르난데스 콤바로 알바레스:** 매우 어려운 질문입니다. 이 질문을 수년간 받아왔지만 여전히 예측하기 어렵습니다. 일부 분야는 예상보다 빠르게 발전했습니다. 예를 들어, 많은 물리적 큐비트에서 구성한 몇 개의 논리적 큐비트를 사용한 양자 오류 교정 초기 시연이 이루어지고 있습니다. 이는 매우 흥미로운 성과입니다. 동시에, 20년 전 양자 하드웨어가 가지고 있던 많은 한계들이 여전히 존재합니다. 따라서 상황은 복합적입니다. 최근 IBM 연구진이 양자 화학 문제에서 실제 양자 하드웨어로 고전적 정확도를 달성했다고 주장하는 논문을 읽었습니다. 이는 아직 양자 우위가 아닌 단순한 동등성 달성입니다. 하지만 이는 중요한 이정표입니다. 그들은 2026년까지 '실용적' 우위를 달성할 목표를 밝히기도 했습니다. 저에게는 낙관적으로 보이지만, 만약 실현된다면 놀라운 일이 될 것입니다. 개인적으로는 5년 정도라고 추측합니다. 하지만 내년에도 같은 질문을 받으면 여전히 5년이라고 답할 수도 있습니다. 따라서 정확한 시점을 예측하기는 어렵습니다. 일부 혁신이 상황을 급속히 가속화할 수 있지만, 그 전까지는 신중하게 낙관적인 태도를 유지하는 것이 현명합니다. **28: 양자 컴퓨팅을 기술 스택에 통합하려는 소프트웨어 아키텍트와 엔지니어링 팀에게 어떤 조언을 주시겠습니까?** **Elías Fernández Combarro Álvarez:** 좋은 질문입니다. 우리는 많은 기업들과 협력하고 있으며, 이들은 양자 기술을 워크플로우에 통합하려고 노력하고 있습니다. 이는 즉각적인 결과를 기대해서가 아니라, 때가 왔을 때 준비가 되어 있기 위해서입니다. 제 조언은 간단합니다: 지금 시작하세요. 양자 컴퓨팅이 귀사의 분야에 관련될 수 있다고 생각한다면, 가능한 한 빨리 탐색을 시작하세요. 학습 곡선은 가파릅니다. Python, C++, Rust를 이미 알고 있더라도, Java, C++, Rust를 알고 있더라도 양자 컴퓨팅은 완전히 다른 사고방식이 필요합니다. 루프도, 전통적인 데이터 구조도, 정보 복사도 없습니다. 측정이 모든 것을 바꿉니다. 프로그래밍에 대한 생각을 다시 배워야 합니다. 우리의 두 책에서 우리는 이 분야를 접근하기 쉽게 만들기 위해 노력했습니다. 받은 피드백을 바탕으로 보면 어느 정도 성공했다고 생각합니다. 하지만 여전히 쉽지 않습니다. 양자 컴퓨팅이 주류가 될 때까지 기다린다면 따라잡기 어려울 수 있습니다. ---- 일찍 시작할수록 유리합니다—이 분야를 이해하는 데도, 실용적으로 유용해질 때 이를 활용하는 데도 말이죠. * * * 이 대화에서 논의된 아이디어를 탐구하려면—다중 큐비트 시스템 모델링, 양자 키 분배와 같은 프로토콜 구현, Grover와 Shor의 알고리즘을 시뮬레이터와 실제 하드웨어에서 실행하는 방법 등—_**[양자 컴퓨팅 실용 가이드](https://www.packtpub.com/en-us/product/a-practical-guide-to-quantum-computing-9781835885956)**_를 참고하세요. 이 책은 Elías F. Combarro와 Samuel González-Castillo가 저술했으며, Packt에서 구매 가능합니다. 이 독립형 입문서는 Qiskit 2.1을 사용해 단일 큐비트 개념부터 완전한 양자 응용 프로그램까지 독자들을 안내합니다. 실행 가능한 코드, 명확한 수학적 설명, 양자 화폐부터 오류 내성 계산까지 다양한 예제를 포함하고 있습니다. 양자 프로그래밍을 실전에서 적용하려는 학생, 전문가, 자기 학습자에게 이상적인 출발점입니다