소란한 시절이 일단락된 듯하다. 2017, 2018년을 휩쓴 암호화폐 열풍은 많은 이들을 뒤흔들었다. 혁신적인 기술의 선도자라고 생각하고 뛰어든 이들이 하루 아침에 역사상 가장 우아한 기술 사기에 가담한 투기자로 내몰리기도 하고, 위험한 행동을 하는 자식 바라보듯 걱정하는 이들은 답답한 꼰대 소리를 듣기도 했다. 뭔지 몰라도 상관없으니 한탕 벌기만 하자는 사람도 있었겠다. 미래에 어떤 평가를 받게 될지는 모르겠지만, 암호화폐와 더불어 전국민이 블록체인이라는 단어를 들어보게 됐다.
블록을 이으면 무슨 일이 벌어지길래 그리 야단들일까? 혁명이니 제2의 인터넷이니 하면서 말이다. 혼란스럽고 누구 말도 믿기 어려울 때 우리가 할 수 있는 확실한 방법은 직접 따져보는 것이다. 상황이 계속 빠르게 변하는 경우라면 더더욱 근본 원리를 이해해서 결국 스스로 판단하는 수밖에 없다. 우리는 이미 뉴스도 믿기 힘든 혼란한 시절에 여러 분야의 전문가가 되어보지 않았던가!
블록체인이 암호학, 네트워크, 분산 시스템, 데이터베이스, 프로그래밍 언어 등 여러 분야의 요소 기술이 결합된 기술이다 보니 어디서부터 손대야 할지 막막할 수 있는데, 그럴 때 이 책이 좋은 선택이 될 것이라 생각한다. 이 책은 다른 블록체인 서적에 비해 조금 두툼한 감은 있지만 블록체인을 이해하는 데 필요한 기초 이론까지 다루고 있는 점이 특징이다. 이미 알고 있거나 조금 부담스러운 부분은 건너뛰고 읽어도 좋다. 워낙 빠르게 변화 중인 분야다 보니 읽는 시기에 따라 맞지 않는 내용도 생기겠지만, 그래도 기초를 많이 다루고 있어 수록된 내용의 유효 기간이 비교적 길지 않을까 조심스레 생각해본다.
암호화폐는 블록체인의 첫 애플리케이션일 뿐이고, 묵묵히 일하고 있는 업계 종사자분들 덕분에 블록체인은 조용히 그 쓰임새를 넓혀가고 있다. 데이터를 다루는 분야에 있는 나로서는 사용 형태를 제한하는 방식으로 기존 기술을 조합해, 데이터를 중앙 기관에 두지 않고 온전히 관리하면서 데이터의 소유자가 소유권을 가지고 공유할 수 있다는 개념에 감탄하게 된다. 다른 분야에 있는 사람이라면 또 다른 매력을 느낄 것이다. 이 책이 블록체인을 깊이 이해하는 데 도움이 되길 소망한다. 아직 번역어가 자리 잡지 않은 용어가 많아 어려움이 있었는데 부디 괜찮은 결정이었기를 바라며, 부족한 부분은 고스란히 역자의 책임이니 질책과 더불어 독자분들의 많은 제의를 부탁드린다.
그저 먼 얘기 같았다. '양자 컴퓨팅'이라는 말은 극소수의 연구자에게나 의미 있는 얘기 같았는데, 어느새 주변에서 양자 컴퓨팅 얘기가 심심치 않게 들려온다. 물론 아직 양자 컴퓨팅의 경이로운 계산 능력을 적용할 수 있는 문제는 지극히 제한적이며, 실용화까지 20~30년은 걸릴 것으로 예측되고 있다. 하지만 하드웨어 측면에서는 점차 다룰 수 있는 큐비트 수가 늘어나는 추세고, 소프트웨어 측면에서는 고전적인 컴퓨팅을 이용해 양자 컴퓨팅을 시뮬레이션해볼 수 있는 환경에 이르렀다. 공룡 기업들은 이미 IBM Q 익스피리언스(Q Experience), 마이크로소프트 애저 퀀텀(Azure Quantum), 아마존 브라켓(Amazon Braket)과 같은 클라우드 양자 컴퓨팅 서비스를 내놓으면서 사용자를 선점하려 발 빠르게 움직이고 있다.
양자 컴퓨팅에 관심을 갖고 도전해 보려는 이들이 많아졌지만, 그만큼 양자 컴퓨팅 이론의 벽을 넘지 못하고 포기하는 사람도 많다. 이 책은 『Quantum Computing: An Applied Approach』라는 원제에 걸맞게 실용적인 관점에서 양자 컴퓨팅이 작동하는 과정을 익힐 수 있게 해준다. 이 책의 백미는 2부에서 시뮬레이션 라이브러리를 활용해 파이썬(Python) 언어로 작성한 소스코드와 함께 양자 컴퓨팅을 설명함으로써 이해도를 높인 부분이다. 최근 2020년 3월에 구글에서 머신러닝 플랫폼인 텐서플로와 양자 컴퓨팅 라이브러리인 서큐(Cirq)를 통합한 텐서플로 퀀텀(TensorFlow Quantum)을 발표했는데, 이 책에서 주로 서큐 라이브러리를 사용하기 때문에 머신러닝에 관심이 있는 독자라면 다음 단계로 나아가기에도 좋을 듯하다. 3부에서 양자 컴퓨팅의 기초를 이루는 대수학 내용을 차근차근 설명한 부분도 유익한데, 특히 각 개념이 양자 컴퓨팅에 쓰이는 이유를 잘 설명하고 있다. 저자의 의도상 양자 컴퓨팅 이론 내용은 상대적으로 간략히 다루고 있는데, 더 자세한 내용을 원하는 독자라면 이 분야의 대표적인 교과서인 마이클 닐슨(Michael Nielsen)과 아이작 추앙(Isaac Chuang)의 『Quantum Computation and Quantum Information』(Cambridge University Press), 데이비드 맥마혼의 『양자 컴퓨팅 이론 해설(Quantum Computing Explained)』(에이콘, 2020) 등 다른 이론서를 참고하면 좋겠다.
양자 컴퓨팅이 생각보다 빠르게 우리에게 다가오고 있다. 2011년에 최초의 양자 컴퓨터인 D-웨이브 원(D-Wave One)이 등장한 이래, 실용화할 수 있는 양자 컴퓨터를 개발하려는 노력이 계속되고 있으며, IBM Q Experience와 같은 서비스를 이용해 양자 컴퓨팅을 시뮬레이션해 볼 수 있는 환경에 이르렀다. 양자역학의 원리를 이용한 병렬 계산을 통해 고전적인 컴퓨터로는 해결하지 못했던 문제를 해결할 수 있다는 기대가 조금씩 현실화되고 있다. 기존 컴퓨터로는 계산이 오래 걸려 사실상 해를 구하기가 어려운 특정 연산에 근거한 정보 보안과 같은 분야에는 큰 변화가 일어나리라 예상된다.
기존 컴퓨터의 한계를 뛰어넘을 수 있는 잠재력 덕분에 양자 컴퓨팅에 대한 관심이 점차 높아지고 있지만, 양자 컴퓨팅을 이해하려면 전산 관련 지식뿐만 아니라 부담스러운 양자역학과 대수학 지식이 필요하다. 그러다 보니 양자 컴퓨팅 관련 도서나 기사, 온라인 자료 등을 보면 어려운 물리, 수학을 완전히 배제한 채 내용을 너무 가볍게 다루거나, 전공 연구자들만 알아볼 수 있도록 너무 어렵게 설명하는 경우가 대부분이다. 그래서 그 간극을 건너가기가 매우 어려운데, 이 책이 다리를 놓아주기를 기대한다.
저자인 파라그 랄라 교수는 이 책에 양자 컴퓨팅의 기초를 이해하는 데 필요한 양자역학과 대수학 내용을 모두 포함하면서도 필요한 내용만 간결하게 담으려고 시도했다. 분량을 많지 않게 유지한 측면은 바람직하지만, 보충 설명이 적어 요점을 간추린 강의 노트 같은 느낌이 들기도 한다. 이 책과 더불어 물리와 양자역학의 기초를 익히고 싶다면 2019년 초에 전면 개정판이 나온 『최무영 교수의 물리학 강의』(책갈피)를 추천한다. 그 외에 양자역학에 관한 다양한 도서가 『김상욱의 양자 공부』(사이언스북, 2017)의 부록 또는 한국물리학회 웹진에 실린 <양자 세계를 여행하는 히치하이커를 위한 가이드>에 잘 소개돼 있으니 참고하기 바란다. 양자 정보 처리 분야의 책으로는 양자 정보 이론의 관점에서 세상을 설명하는 블라트코 베드럴의 『물리법칙의 발견』(모티브룩, 2011)과 세스 로이드의 『Programming the Universe』(Knopf, 2006)라는 책을 살펴보기 바라며, 에이콘출판사에서 펴낸 『양자 컴퓨터 프로그래밍』(2019)을 참고해 이론과 실습을 함께 익혀보는 것도 좋겠다.
지금 옆에 놓여 있는 스마트폰에서 연합학습이 수행 중일 수도 있겠다. 연합학습이란 훈련 데이터를 한데 모으지 않고 협력적으로 수행하는 머신러닝 기술로, 구글에서 2016년에 「Federated Learning: Strategies for Improving Communication Efficiency」라는 논문을 발표하면서 하나의 용어로 자리 잡혔다. 연합학습은 기존의 머신러닝 기술이 지닌 한계를 넘어 컴퓨팅 자원 소모의 분산, 프라이버시 보호, 개인 맞춤형 학습 등을 실현할 수 있는 대안으로 주목받으며 구글, 애플, IBM 등의 거대 기업을 비롯해 많은 테크 기업에서 연구를 진행 중이다. 이에 발맞춰 국내에서도 네이버, 카카오S, KT 등 여러 기업에서 연구 개발을 진행하고 있으며 학계에서도 연구는 물론이고 학회 강좌 등을 통해 기술 전파에 힘쓰고 있다.
이 책은 직접 연합학습 프레임워크를 개발한 저자들이 기존의 머신러닝 기술에 익숙한 개발자, 연구자에게 연합학습 분야의 연구 동향을 두루 정리해서 알려준다. 연합학습이 발전해온 전반적인 흐름이나 관련 개념을 익히는 데는 알맞으나 실습 위주의 머신러닝 실용서는 아니며 한 분야를 깊이 다루고 있지 않다. 이 책을 시작점으로 삼아 전체적인 지형도를 파악한 다음, 이를 발판으로 좀 더 구체적으로 관심 있는 분야로 나아가면 좋으리라 생각한다. 실제로 연합학습을 구현해보려면 저자들이 참여한 페드(AIFedAI) 그룹의 페이트(FATE)를 비롯해 텐서플로 페더레이티드(Tensorflow Federated), IBM 페더레이티드 러닝(Federated Learning), 인텔의 오픈(FLOpenFL), 엔비디아(NVIDIA)의 클라라(Clara), 오픈마인드(OpenMined)의 파이시프트(PySyft) 등 여러 오픈소스 연합학습 프레임워크가 나와 있으므로 개발 환경이나 성향에 따라 선택해 사용해보길 바란다.
이 책은 우리말로 연합학습을 처음 소개하는 책이라서 그만큼 책임을 느낀다. 기존의 머신러닝 개념에 더해 분산학습까지 고려해야 하는 연합학습의 특성상 일반 개발자나 사용자로서는 연합학습에 접근하기가 더 어려운 것이 사실이다. 아무쪼록 이 책이 독자분들이 연합학습에 다가가는 데 도움이 되기를 소망한다.
테스트는 중요한 자산이다. 테스트가 차곡차곡 쌓여갈수록, 소프트웨어의 품질과 개발자들의 유산도 함께 쌓인다. 테스트 베이스의 크기와 수준만 봐도 그 회사와 제품을 어느 정도 신뢰할지 결정할 수 있다. 하지만 대다수의 개발자는 하기 귀찮은 일로 문서 작성과 테스트를 꼽는다. 어떤 일이든 사람들이 하기 귀찮아 하는 경우는 들어가는 노력에 비해 얻는 것이 적거나 일이 불편하고 까다로운 경우이다.
테스트를 통해 얻는 것은 분명하다. 소프트웨어의 품질. 품질이라는 압축된 용어를 굳이 쓰지 않더라도, 실무자는 개발할 때 테스트의 중요성을 체감한다. 테스트가 없이는 이미 출시한 제품의 수정이 불가능하다. 버그 없는 소프트웨어는 없지만, 적어도 테스트가 커버하는 범위 내의 동작이 이전과 동일함을 보일 수는 있다. 탄탄한 테스트 베이스가 있으면 개발자는 제품이 새로 수정한 부분 때문에 다른 기존 동작이 바뀌는지 걱정할 필요 없이 마음 놓고 작업할 수 있다. 문제는 테스트를 작성하는 일 자체가 불편하고 까다롭다는 데 있다. 생각해보면 우리는 테스트하라는 말만 들었을 뿐, 슬기롭게 테스트하는 방법을 배우고 익힌 적이 없다. 직접 시행착오를 겪고 나서야 겨우 테스팅 관련 자료나 서적을 찾아보지만 실제 상황과 맞는 내용을 찾기도 쉽지 않다.
이 책은 소프트웨어 테스팅의 기본 원칙부터 테스트를 수월하게 작성하는 실제적인 기법들을 풍부한 예시와 함께 전해준다. 저자는 또한 소프트웨어를 설계할 때부터 테스팅을 염두에 두어야 함을 역설하고 좋은 설계안을 추천하고 있다. 이에 깊이 공감하며, 유지보수를 위해 코드의 가독성이 점점 중요한 요소가 됐듯이 테스트 용이성도 소프트웨어 개발에서 더욱 중요한 요소로 자리매김해야 할 것이라 생각한다. 원서가 출간되어 번역을 맡은 시점부터 출판 시점까지 3년이 넘는 시간이 흘렀지만, 이 책의 가치가 전혀 퇴색하지 않았다는 생각이 든다. 이 책이 시류에 편승하는 내용이 아니라 근본 원칙과 기본기를 담고 있음을 방증한다. 저자의 의도를 올바로 전달하려 노력했으나, 부족한 부분은 고스란히 역자의 책임이다. 질책과 더불어 독자 분들의 많은 제의를 부탁드린다.