어릴 때부터 속 편한 게 제일이라는 신조를 지니고 누구보다도 단조로운 인생을 살리라 다짐했지만, 실패했다. 독실한 불교인으로 성심껏 성지순례를 해야 한다는 일념으로 중국과 티베트를 횡단하고 네팔을 거쳐 육로로 인도까지 갔다. 新서유기를 찍으며 횡단병을 얻어 여러 대륙을 횡단 혹은 종단하며 다닌 방랑 수행자이자, 늦깎이 프리랜서 프로그래머다.
처음 TLS 라이브러리를 만들기로 결심한 순간부터 긴 시간이 지났다. 당시 내가 만든 웹 개발 프레임워크에 Stateful한 가상 환경을 HTTP 프로토콜로 제공하는 기능을 완성했고, 이것을 HTTPS까지 동시에 지원하는 것으로 만들려고 했다. 내가 원하는 기능을 만들기 위해 고려하던 TLS 라이브러리 네 가지가 있는데, wolfssl, GNUTLS, openssl, Botan이었다. 내가 원하던 기능은 일반적이지 않고 약간의 tweaking이 필요해서, 라이브러리를 어느 정도 공부해야 할 필요가 있었다. 그런데 라이브러리들의 사용법이 어려워서 이런저런 매뉴얼을 조금씩 읽다가 포기하고 직접 만들자고 결심했다. 직접 만드는 것이 사용법을 배우는 시간보다 짧으리라는 중대한 오판을 했다. TLS가 얼마만큼의 방대한 지식이 누적돼 있는지도, 인증서의 내용도 아닌 형식만을 이해하는 데 Base64, PEM, DER 등 여러 가지 지식이 필요하다는 것도 몰랐다. 미리 알았더라면 어떻게든 기존의 라이브러리를 이용해서 기능을 완성했지, 직접 만들어야겠다는 생각은 꿈에도 하지 않았을 것이다.
무지와 오기가 나를 여기까지 오게 이끌었다.
돌이켜보면 "현대에 홍수처럼 쏟아지는 컴퓨터에 관한 지식 중 과연 암호학만큼 필수 불가결하고, 가치 있고, 오래 가는 지식이 얼마나 있을까"하는 생각도 든다. 내가 투자한 시간이 절대로 아깝지는 않다.
누군가는 또 어디서 나처럼 TLS의 어둡고 긴 터널을 통과하려고 하고 있을 것이다. 그 누군가의 Tunnel Loneliness Syndrome을 덜어주고자 이 책을 썼다. 조금이라도 도움이 되기를 바란다.