튜링 완전성: 그 의미, 이더리움에 필요했던 이유, 그리고 비트코인이 이를 피한 이유

튜링 완전성: 그 의미, 이더리움에 필요했던 이유, 그리고 비트코인이 이를 피한 이유

전통 금융업계에 종사하는 친구가 예전에 제게 이더리움은 블록체인 상에서 금융 애플리케이션 전체를 실행할 수 있는데 비트코인은 단순히 주소 간 송금만 가능한 이유가 뭐냐고 물어본 적이 있습니다. "둘 다 블록체인이잖아."라고 그는 말하며 "실질적인 차이점이 뭐야?"라고 되물었습니다.

튜링 완전성에 대해 설명하려고 했지만 그의 눈빛이 흐릿해지는 것을 보고 다시 비유를 들어 설명했습니다. 비트코인은 자판기입니다. 돈을 넣고 버튼을 누르면 원하는 상품이 나옵니다. 자판기는 만들어진 목적대로만 작동하고 그 이상은 아무것도 하지 않습니다. 이더리움은 요리사가 있는 주방입니다. 요리사에게 어떤 레시피와 충분한 재료만 주면 무엇이든 만들 수 있습니다. 반복문("걸쭉해질 때까지 저어라"), 결정("너무 짜면 물을 넣어라"), 창의력("남은 재료로 즉흥적으로 디저트를 만들어라"). 요리사는 어떤 지시든 따를 수 있습니다. 하지만 자판기는 그럴 수 없습니다.

그 비유는 완벽하지 않습니다. 컴퓨터 과학자라면 제가 지나치게 단순화한 부분을 여러 가지 지적할 겁니다. 하지만 그 비유 덕분에 제 친구는 "그럼 왜 누군가는 자판기가 되려고 할까요?"라는 적절한 질문을 던지게 되었습니다.

그 질문은 암호화폐 업계의 튜링 완전성 논쟁 전체를 관통하는 핵심입니다. 보안 대 유연성, 예측 가능성 대 성능, 비트코인 대 이더리움. 그리고 짜증스럽게도, 답은 양쪽 모두 옳다는 것입니다.

이 아이디어의 기원과 1936년 수학 논문이 여전히 중요한 이유는 무엇일까요?

앨런 튜링은 1936년, 23세의 나이에 "계산 가능한 수에 대하여"라는 논문을 발표했습니다. 그 논문에서 그는 마치 장난감처럼 간단한 기계를 설명했습니다. 여러 칸으로 나뉜 테이프, 기호를 읽고 쓰는 헤드, 그리고 헤드가 읽은 내용을 바탕으로 무엇을 해야 할지 알려주는 규칙들. 테이프, 헤드, 규칙. 이것이 바로 기계의 전부입니다.

아직도 소름이 돋는 부분은 바로 이것입니다. 튜링은 이 터무니없이 단순한 기계가 어떤 컴퓨터든 할 수 있는 모든 것을 계산할 수 있다는 것을 증명했습니다. 일부가 아니라, 모든 것을 말입니다. 지금 당신의 휴대폰도 테이프와 헤드 연산을 하고 있고, ChatGPT를 실행하는 서버도 마찬가지이며, 자동차에 있는 칩도 그렇습니다. 그는 이 모든 것을 지구상에 전자 컴퓨터가 단 한 대도 존재하지 않았던 1936년에 증명했습니다. 이 논문은 거의 90년이 되었지만, 전 세계 모든 컴퓨터공학과에서 여전히 첫 학기에 가르치고 있습니다.

누군가 어떤 시스템이 "튜링 완전하다"라고 말할 때는, 튜링의 테이프 머신을 시뮬레이션할 수 있다는 뜻입니다. 즉, 반복문을 실행하고, 데이터에 기반하여 결정을 내리고, 메모리에 데이터를 저장하고, 어떤 알고리즘이든 실행할 수 있다는 의미입니다. 여러분의 노트북은 튜링 완전합니다. 하지만 주머니 계산기는 그렇지 않습니다. 그리고 제가 사람들에게 자주 이야기하는 재미있는 사실이 하나 있습니다. 마인크래프트의 레드스톤 회로는 기술적으로 튜링 완전합니다. 사람들은 게임 안에서 작동하는 컴퓨터를 만들었습니다. 유용한 컴퓨터는 아니지만, 어쨌든 작동하는 컴퓨터는 만들었습니다.

튜링 완전

이것이 비트코인에서 어떻게 나타나는가: 사토시 나카모토는 왜 제한을 선택했는가

사토시는 의도적으로 단순하게 설계된 비트코인 스크립트라는 프로그래밍 언어로 비트코인을 만들었습니다. 서명을 검증하고, 다중 서명 지갑을 처리하고, 시간 조건에 따라 자금을 잠그는 기능만 있을 뿐입니다. 반복문도 없고, 복잡한 분기도 없으며, 거래 간에 상태를 유지하는 기능도 없습니다.

이것이 왜 중요한지 처음 이해하게 된 것은 이더리움의 DAO 해킹 사건에 대한 기사를 읽었을 때였습니다(이 사건에 대해서는 나중에 자세히 설명하겠습니다). 재귀 함수 호출로 인해 스마트 계약에서 1억 5천만 달러가 빠져나갔는데, 개발자들이 전혀 예상하지 못한 무한 루프에 빠져 자기 자신을 호출할 수 있었기 때문입니다. 비트코인에서는 그런 해킹이 불가능합니다. 가능성이 낮은 것이 아니라, 불가능합니다. 비트코인 스크립트는 자기 자신을 호출할 수 없습니다. 루프도, 재귀도 불가능합니다. 이더리움에 1억 5천만 달러의 손실을 입힌 그런 종류의 버그를 표현하기에는 언어의 한계가 너무 큽니다.

그러한 제한이야말로 특징입니다. 모든 비트코인 스크립트는 예측 가능한 방식으로 종료됩니다. 스크립트를 읽으면 정확히 어떤 작업을 수행할지 알 수 있습니다. 놀랄 일도 없고, 예상치 못한 동작도 없습니다. 1조 달러가 넘는 가치의 네트워크를 보호하는 데 있어 "지루하고 예측 가능한" 것은 약점이 아니라 설계상의 선택입니다.

비탈릭이 만든 것은 무엇이며, 그것이 모든 것을 어떻게 바꿨는가

비탈릭 부테린은 2013년 이더리움 백서를 발표했을 당시 19세였습니다. 그의 질문은 간단하면서도 혁신적이었습니다. 블록체인 자체가 어떤 프로그램이든 실행할 수 있다면 어떨까? 단순히 "A에서 B로 코인을 보내는 것"이 아니라 컴퓨터가 할 수 있는 모든 것을 할 수 있다면 어떨까?

이더리움 백서가 나왔을 때 저는 대학생이었어요. 비트코인 포럼에서 누군가가 공유해준 PDF 파일로 읽어봤죠. 댓글의 절반은 비탈릭 부테린이 천재라고 했고, 나머지 절반은 그가 만드는 시스템은 금방 해킹당할 거라고 했어요. 둘 다 맞았죠.

이더리움은 튜링 완전성을 확보하는 두 가지 핵심 요소를 갖추고 2015년에 출시되었습니다. 솔리디티는 스마트 계약을 작성하기 위한 프로그래밍 언어로, 반복문, 조건문, 상태 저장, 함수 호출 등 필요한 모든 기능을 제공합니다. 이더리움 가상 머신(EVM)은 네트워크의 모든 노드에서 이러한 스마트 계약을 동시에 실행합니다. 이 둘을 통해 개발자는 자신이 작성할 수 있는 모든 코드를 배포할 수 있습니다.

바로 그 결정 하나가 디파이(DeFi)가 존재하는 이유입니다. NFT가 존재하는 이유, DAO가 존재하는 이유, 그리고 어느 한 회사도 통제하지 않는 프로그램을 통해 수십억 달러가 흐르는 이유이기도 합니다. 유니스왑(Uniswap)부터 에이브(Aave), 오픈시(OpenSea)에 이르기까지 암호화폐 분야의 모든 흥미로운 애플리케이션은 이더리움이 임의의 코드를 실행할 수 있기 때문에 가능한 것입니다.

하지만 비탈릭 부테린은 모험을 감행했습니다. 유연성의 힘이 복잡성의 위험보다 클 것이라고 믿었던 것입니다. 2016년 DAO 해킹 사건은 그의 모험을 혹독하게 시험했고, 매년 수십억 달러의 손실을 초래하는 DeFi 해킹 공격 또한 그의 모험을 계속해서 시험하고 있습니다. 그리고 비트코인 커뮤니티는 이러한 손실을 지적하며 "이것이 바로 우리가 단순함을 고수한 이유"라고 주장합니다. 양쪽 모두 일리가 있습니다.

정지 문제와 가스 요금이 존재하는 이유

처음 이해했을 때 밤잠을 설치게 했던 부분이 바로 이겁니다.

튜링은 1936년 논문에서 불편한 사실을 증명했습니다. 즉, 어떤 알고리즘도 임의의 프로그램을 보고 프로그램이 종료될지 아니면 무한 루프에 빠질지 확실하게 판별할 수 없다는 것입니다. 이는 우리가 아직 해결하지 못한 기술적 문제가 아닙니다. 수학적으로 불가능한 문제입니다. 증명되었고, 이미 해결되었습니다. 아무리 발전된 컴퓨터라도 모든 프로그램에 대한 정지 문제를 해결할 수는 없습니다.

내 노트북에서 무한 루프는 짜증나는 정도입니다. Ctrl-C를 누르면 해결되죠. 하지만 블록체인에서 무한 루프는 재앙입니다. 모든 노드가 모든 스마트 계약을 실행하고 있습니다. 만약 하나의 계약이 멈추지 않고 계속 실행된다면, 해당 블록체인을 실행하는 전 세계의 모든 노드가 멈춰버립니다. 네트워크가 마비되는 거죠.

이더리움의 해결책은 단순하지만 효과적입니다. 바로 가스(gas)입니다. 모든 연산에는 가스 비용이 발생합니다. 거래에 가스를 할당하고, 가스가 소진되면 코드가 실행을 멈춥니다. 작업이 완료되었는지, 송금 도중이었는지 여부는 중요하지 않습니다. 가스가 0이 되면 실행이 종료됩니다. 이것이 바로 이더리움의 가스 수수료가 변동하는 이유입니다. 간단한 송금은 21,000 가스, 복잡한 DeFi 스왑은 200,000 가스, 온체인 아트가 포함된 NFT 발행은 50만 가스가 필요합니다. 가스 비용은 각 노드가 수행해야 하는 연산량에 따라 결정됩니다.

비트코인은 이 문제를 살펴보고 "안 돼"라고 말했습니다. 루프를 작성할 수 없고, 루프에 갇힐 수도 없습니다. 모든 스크립트는 종료됩니다. 가스 메커니즘도 필요하지 않습니다. 언어 자체가 "영원"을 표현하기에는 너무 제한적입니다.

2016년 6월: 그 이론이 1억 5천만 달러라는 현실이 된 순간

암호학에서 튜링 완전성에 대한 모든 논의는 결국 이 순간으로 귀결됩니다.

DAO는 이더리움 블록체인 기반의 1억 5천만 달러 규모 투자 펀드였습니다. 스마트 계약과 커뮤니티 거버넌스를 통해 자금이 유입되고, 투표를 통해 자금 배분처가 결정되었습니다. 코드는 복잡했으며, 반복문, 조건문, 계약 간 호출, 실행 도중 상태 변화가 있는 등 튜링 완전성이 허용하는 모든 요소를 포함하고 있었습니다.

누군가 취약점을 발견했습니다. 출금 기능은 먼저 ETH를 전송하고 그 후에 잔액을 업데이트했습니다. 공격자는 출금 버튼을 호출하여 돈을 받았고, 잔액이 업데이트되기 전에 함수가 다시 호출되었습니다. 그리고 또 다시, 또 다시 호출되었습니다. 재진입이 가능해진 것입니다. 개발자들이 의도하지 않았던 무한 루프가 발생하여 매 주기마다 자금이 빠져나갔습니다.

이런 일이 비트코인에서 일어날 수 있을까요? 아닙니다. 비트코인 스크립트는 자기 자신을 호출할 수 없습니다. 다른 스크립트를 호출할 수도 없고, 무한 루프에 빠질 수도 없습니다. 비트코인을 평범하게 만드는 바로 그 점이 이러한 특정 공격을 불가능하게 만드는 이유입니다.

이더리움 커뮤니티는 하드포크를 통해 체인을 분리하고 도난 사건을 되돌리기로 투표했습니다. 이 분리로 이더리움 클래식이 탄생했습니다. 개발자들은 교훈을 얻었고, 재진입 방지 장치가 표준이 되었으며, "검사-효과-상호작용" 패턴이 정설로 자리 잡았습니다. 하지만 근본적인 진실은 변하지 않았습니다. 튜링 완전 코드라 할지라도 개발자가 예상하지 못한 버그가 항상 존재할 수 있다는 것입니다. 이는 이더리움의 결함이 아니라 수학적 특성의 결과입니다.

튜링 완전

비트코인의 제약이 줄어들고 있습니다: Taproot와 BitVM을 사용해 보세요.

비트코인의 경우, 튜링 완전성과 튜링 불완전성을 구분하는 경계가 예전만큼 명확하지 않습니다.

Taproot은 2021년 11월에 출시되어 Bitcoin Script의 기능을 확장했습니다. 더욱 복잡한 조건부 지출, Schnorr 서명을 통한 향상된 개인 정보 보호, 거래 조건이 실행될 때까지 숨겨지는 Merkelized 추상 구문 트리 등이 포함됩니다. 여전히 튜링 완전하지는 않지만 이전보다 표현력이 훨씬 향상되었습니다.

2023년에 제안된 BitVM은 한 단계 더 나아갑니다. 이는 임의의 연산을 오프체인에서 수행한 다음 비트코인에서 결과를 검증하는 시스템을 설명합니다. 다시 말해, 실제 연산은 다른 곳에서 이루어지고, 비트코인은 누군가 결과에 이의를 제기할 경우에만 개입하는 것입니다. 이론적으로 이는 스크립트 언어 자체를 변경하지 않고도 특정 사용 사례에 대해 비트코인을 사실상 튜링 완전하게 만들 수 있습니다.

저는 비트코인 개발자들에게 BitVM에 대해 이야기해 봤는데, 그들의 반응은 흥미로웠습니다. 그들은 BitVM의 기능에 대해서는 기대감을 드러내면서도 위험성에 대해서는 두려움을 느끼고 있었습니다. 그중 한 명은 이렇게 말했습니다. "서두르지 않을 겁니다. 사람들이 이 시스템에 수조 달러를 넣어두고 있습니다. 만약 우리가 더 화려하게 만들려고 하다가 시스템을 망가뜨린다면, 아무도 우리를 용서하지 않을 겁니다." 이러한 신중함은 당장 비트코인 DeFi를 사용하고 싶은 사람들에게는 답답하게 느껴질 수 있습니다. 하지만 시스템에 수조 달러를 투자한 사람이라면 오히려 안심이 될 것입니다.

방향은 어쨌든 더 풍부한 표현력을 향해 나아가는 것입니다. Taproot는 이미 가능성의 범위를 확장했고, BitVM은 이를 더욱 확장할 것입니다. 하지만 비트코인이 이더리움처럼 될 거라고 기대하지는 마세요. 두 문화가 너무 다르기 때문입니다.

모든 새로운 블록체인이 튜링 완전성을 선택한 이유는 무엇일까요?

실제로 논쟁을 종식시킨 것은 바로 이것입니다. 이제 아무도 튜링 불완전 블록체인을 만들지 않습니다. 솔라나, 카르다노, 폴카닷, 애벌랜치, BNB 체인. 모두 튜링 완전하며, 임의의 프로그램을 실행할 수 있습니다. 시장은 프로그래밍 가능성을 선택했고, 이제 남은 질문은 튜링 완전 시스템을 더 빠르고, 저렴하고, 안전하게 만드는 방법입니다.

각 블록체인은 서로 다른 절충안을 선택했습니다. 이더리움은 EVM과 솔리디티를 택했습니다(가장 큰 생태계, L1 캐시 수수료가 가장 높음). 솔라나는 러스트를 사용하여 병렬 실행을 위한 Sealevel을 구축했습니다(빠르지만 개발하기 어려움). 카르다노는 하스켈과 형식 검증을 선택했습니다(수학적 엄밀성, 도입 속도 느림). 하지만 이들 모두 튜링 완전성을 요구했는데, 이는 스마트 계약, DeFi, NFT, DAO 등 맞춤형 로직이 필요한 모든 것을 실행하고 싶었기 때문입니다.

보안 문제는 분명히 존재합니다. DeFi 해킹으로 매년 수십억 달러의 손실이 발생하고 있으며, DAO 해킹 사건은 단지 시작에 불과했습니다. 하지만 업계에서는 프로그래밍 가능성의 이점이 위험보다 크다고 결론 내렸습니다. 심지어 의도적으로 기능을 제한했던 최초의 블록체인인 비트코인조차도 Taproot와 BitVM을 통해 더욱 표현력이 풍부해지는 방향으로 나아가고 있습니다.

저는 암호화폐 업계에 오랫동안 몸담아 오면서 두 종류의 블록체인을 모두 폭넓게 사용해 봤습니다. 비트코인 거래는 매번 예상대로 정확하게 확인되었고, 이더리움 스마트 계약은 솔리디티(Solidity) 덕분에 예상치 못한 동작을 보여주기도 했습니다. 솔리디티는 복잡한 코드를 작성할 수 있게 해줘서 저도 모르게 놀랄 만한 결과가 나오기도 했죠. 이 두 가지 경험 모두 제 관점을 형성하는 데 큰 영향을 미쳤습니다.

논쟁의 핵심은 튜링 완전성이 좋은지 나쁜지가 아니라, 무엇이 필요한가에 대한 것입니다. 최대한 안전하고 예측 가능한 디지털 결제 시스템을 원한다면 비트코인의 설계 방식이 적합합니다. 하지만 금융 애플리케이션, 게임, 신원 확인 시스템 또는 맞춤형 로직이 필요한 모든 것을 구축하려면 튜링 완전성이 필수적입니다. 오늘날 암호화폐가 흥미로운 이유 대부분은 19세 청년이 위험을 감수할 가치가 있다고 판단했기 때문에 가능했습니다.

유니스왑이나 에이브, 또는 다른 어떤 디파이 프로토콜을 사용할 때마다 이 생각을 합니다. 제가 하는 모든 스왑은 튜링 완전 가상 머신에서 실행되는 코드입니다. 모든 거래에는 아무도 예상하지 못한 버그로 인해 전체 계약의 자금이 고갈될 수 있는 이론적인 위험이 따릅니다. 그럼에도 불구하고 저는 이러한 프로토콜을 사용합니다. 제게는 그 유용성이 위험을 감수할 만한 가치가 있기 때문입니다. 하지만 저는 위험이 존재한다는 사실을 결코 잊지 않습니다. 그리고 비트코인이 다른 길을 선택했고, 그 길에는 나름의 지혜가 있다는 것도 잊지 않습니다. 자판기는 절대 당신의 돈을 훔치지 않습니다. 하지만 요리사는 부엌을 태워버릴 수도 있습니다.

질문이 있으십니까?

이더리움, 솔라나, 카르다노, 폴카닷, 애벌랜치, BNB 체인, 그리고 거의 모든 최신 스마트 계약 플랫폼이 여기에 해당합니다. 디파이(DeFi), NFT, 탈중앙화 애플리케이션에 대한 시장의 요구가 프로그래밍 가능성을 필요로 하기 때문에 튜링 완전성 없이는 새로운 블록체인이 개발되지 않고 있습니다.

완전히 그렇지는 않지만, 기능은 점차 향상되고 있습니다. Taproot(2021)는 조건 논리를 추가했고, BitVM(2023)은 온체인 검증을 통한 오프체인 연산을 제안했습니다. 이러한 기능들은 비트코인을 완전히 튜링 완전하게 만들지는 않으면서도 프로그래밍 가능성을 높여줍니다. 비트코인 커뮤니티는 급진적인 변화보다는 신중하고 점진적인 개선을 선호합니다.

2016년, 1억 5천만 달러 규모의 이더리움 펀드가 재진입 버그로 인해 인출되는 사건이 발생했습니다. 인출 기능이 잔액 업데이트 전에 ETH를 전송한 것입니다. 공격자는 해당 기능을 재귀적으로 호출하여, 계약이 잔액을 따라잡기 전에 매번 더 많은 ETH를 인출했습니다. 이는 이더리움 언어가 재귀 호출을 지원하기 때문에 가능한 일이며, 비트코인 스크립트는 재귀 호출을 지원하지 않기 때문에 비트코인에서는 불가능합니다.

튜링은 어떤 알고리즘도 임의의 프로그램이 멈출지 아니면 영원히 실행될지를 결정할 수 없다는 것을 증명했습니다. 블록체인에서 무한 루프는 전체 네트워크를 마비시킬 수 있습니다. 이더리움은 가스를 사용하여 이 문제를 해결합니다. 모든 연산에는 가스가 소모되며, 가스가 고갈되면 실행이 중단됩니다. 비트코인은 자체 언어가 무한 루프를 표현할 수 없기 때문에 이 문제를 완전히 회피합니다.

의도적인 설계였습니다. 비탈릭 부테린은 이더리움을 범용 컴퓨팅 플랫폼으로 만들고자 했고, 사토시는 비트코인을 안전한 결제 네트워크로 만들고자 했습니다. 코드가 단순할수록 악용될 가능성이 적습니다. 이더리움의 강력한 성능 덕분에 탈중앙화 금융(DeFi)과 NFT가 탄생했습니다. 비트코인의 한계는 1억 5천만 달러 규모의 DAO 해킹 사태와 같은 버그 발생을 막았습니다. 두 플랫폼 모두 각기 다른 목적에 적합한 선택입니다.

튜링 완전 시스템은 충분한 시간과 메모리가 주어진다면 어떤 컴퓨터 프로그램이든 실행할 수 있습니다. 반복문을 실행하고, 결정을 내리고, 데이터를 저장할 수 있습니다. 여러분의 노트북은 튜링 완전 시스템입니다. 하지만 계산기는 그렇지 않습니다. 블록체인에서도 마찬가지입니다. 이더리움은 튜링 완전 시스템입니다(어떤 스마트 계약이든 실행할 수 있습니다). 비트코인은 튜링 완전 시스템이 아닙니다(특정 유형의 거래만 처리할 수 있습니다). 이 개념은 앨런 튜링이 1936년에 발표한 논문에서 비롯되었습니다.

Ready to Get Started?

Create an account and start accepting payments – no contracts or KYC required. Or, contact us to design a custom package for your business.

Make first step

Always know what you pay

Integrated per-transaction pricing with no hidden fees

Start your integration

Set up Plisio swiftly in just 10 minutes.