스마트 계약(Smart Contract)이란?

스마트 계약은 블록체인 기술과 자주 함께 거론됩니다. 블록체인 2.0(2014년에 블록체인이 비트코인 외의  첫 번째 사용 사례를 얻었을 때)이 등장하면서 스마트 계약은 블록체인 기술의 귀중한 속성이 되었습니다. 스마트 계약은 본질적으로 매우 기술적 개념이지만, 이해하는 것이 꼭 어렵지만은 않습니다. 

본 가이드는 스마트 계약의 기초에 관해 소개합니다. 기사를 통해 스마트 계약이 무엇이고, 어떻게 작동하는지, 어디에 적용할 수 있는지, 그리고 심지어는 스마트 계약을 작성하는 방법의 기초에 관해 배울 수 있습니다. 

스마트 계약이란?

가장 간단하게 설명하면, 스마트 계약(smart contract)이란 일반 계약을 코드로 프로그래밍한 버전입니다. 스마트 계약의 목적은 모든 조건이 충족되었을 때 사전에 정의한 특정 계약을 자동으로 실행하는 것입니다. 모든 계약 조건이 수동적으로 프로그래밍되어야만 실행할 수 있기 때문에, 한 쪽 당사자에 유리한 세세 항목이 들어갈 여지가 크게 줄어듭니다. 

스마트 계약이 프로그래밍 가능한 블록체인 적용과 함께 세상에 알려지긴 했어도, 사실 훨씬 이전부터 존재했습니다. 컴퓨터 과학자이자 변호사, 암호학자인 닉 자보(Nick Szabo)는 1990년대에 처음으로 스마트 계약의 개념을 제안했습니다. 그는 스마트 계약을 “약속의 묶음으로, 디지털 양식으로 표현되며, 모든 이해당사자가 약속을 이행하는 프로토콜을 포함한다”라고 묘사했습니다. 현재의 적용 사례 외에도 스마트 계약은 일상 생활 모든 곳에 존재합니다. 자판기도 스마트 계약 기술의 가장 원초적 버전으로 간주됩니다. 자판기도 올바른 입력값을 넣었을 때 특정 결과값이 나온다는 원칙이 보장되기 때문입니다. 

계약이라는 이름에도 불구하고, 스마트 계약이 전통 계약처럼 법적 효력을 갖지는 않습니다. 그러나, 블록체인 제도에서는 법적 효력이 꼭 필요하지 않습니다. 미국 국립 표준 기술 연구소는 스마트 계약을 “코드와 데이터(때로는 함수와 상태로도 불린다)의 집합으로 블록체인 네트워크에 암호학적으로 서명된 거래를 통해 배포된다”라고 정의합니다. 이 정의는 이더리움과 비슷한 블록체인이 운영되는 방식과도 일치합니다.

블록체인을 이해하는 사람이라면 스마트 계약이 어떻게 블록체인 아키텍쳐에 부합하는지가 당연해보일 수 있습니다. 완전히 탈중앙화되어 어느 누구도 큰 권한을 갖지 않은 환경에서는 법규 준수나 합의를 처리할 중재자도, 제3자도 존재하지 않습니다. 합의는 인간의 간섭에 의존하지 않는 미리 정해진 메커니즘에 따라 도달할 수 있습니다. 프로그램의 준수 및 실행에 있어서도 마찬가지입니다: 스마트 계약은 이러한 개념의 프로그래밍된 구현체로 특정 개인이 이러한 권한을 가질 필요를 제거합니다. 

스마트 계약은 어떻게 작동합니까?

스마트 계약이 무엇인지 안다고 해서, 어떻게 작동하는지 이해하고 있다는 의미가 되지는 않습니다. 

간단히 설명하면, 스마트 계약은 그 위에 작성된 다양한 함수로 이루어져 있습니다. 사용자는 특정 함수를 호출하는 거래를 보내 스마트 계약과 상호작용합니다. 각 함수는 상세히 정의되어 있어 사용자가 정확히 무슨 함수이며 어떤 기능을 수행하는지 이해할 수 있습니다. 

네트워크 사용자가 스마트 계약을 정의합니다. 스마트 계약 언어로 코딩할 수 있는 사람이라면 누구나 자신만의 스마트 계약을 작성할 수 있으며, 배포하기 위해 충분한 네이티브 토큰만 보유하면 됩니다. 배포 비용은 사용하는 네트워크와 계약 조건에 따라 결정됩니다. 

현실 세계 예시로 무역 협정을 들 수 있습니다. 양측이 계약 조건에 동의했다면(양측이 거래 결과 얻게 되는 결과물과 계약 조건, 재협상 조건 등) 보통 중립적 제3자가 계약이 정확히 이행되는 것을 보장합니다. 그러나 중립적 제3자의 서비스를 사용하기 위해서는 비용이 수반되며 중립을 유지하지 않거나 상황에서 본인의 이득을 취하지 않을 것을 신뢰할 수 있어야 합니다. 이러한 위험성에 대한 가장 간단한 해결책은 제3자의 존재를 완전히 제거하는 것입니다. 그렇다면 누가 과연 중재자 역할을 수행할 수 있을까요?

사람들이 기계만이 달성할 수 있는 중립성을 선호하는 것도 바로 이러한 연유 때문입니다. 현대 기술 수준으로는 아직 기계가 자신만의 선호나 이익을 갖지 않기 때문에 위와 같은 문제에서 최고의 해결책이 됩니다. 다른 말로 하면, 스마트 계약을 프로그래밍하여 기계에 맡기면, 모든 당사자가 공개적이며 투명하게 거래 조건에 합의할 수 있으며(스마트 계약은 명확히 코딩하지 않은 어떠한 것도 수행할 수 없기 때문에) 따라서 잠재적 부정 행위를 예방할 수 있습니다. 게다가 변호사를 선임하는 것에 비해 스마트 계약에 배포하고 계약을 실행하는 비용이 적기 때문에 전체 비용도 절감할 수 있습니다. 

스마트 계약은 모든 내용이 코딩된 그대로 실행될 것을 보장합니다. 복잡한 프로그램이 아니기 때문에 기초적 프로그래밍 지식만 있다면 누구나 코드를 읽고 이해할 수 있습니다. 가독성은 네트워크의 다른 참여자와 좋은 협업 관계를 구축하고 모든 것을 투명하게 유지할 때 매우 중요합니다. 

스마트 계약은 어디에 사용할 수 있습니까?

스마트 계약의 가장 큰 장점 중 하나는 프로그래밍 가능한 사실상 모든 것에 사용될 수 있다는 점입니다. 물론 일부 사용 사례가 더욱 흔하기도 합니다. 아래에는 스마트 계약이 사용되는 대표적 예시를 소개합니다:

  • 디지털 신원: 인터넷에서 개인정보보호 문제가 중요해지며 사용자가 접근하는 웹사이트의 회사가 사용자로부터 어떠한 정보를 취득하는지에 관한 우려가 높습니다. 이러한 내용도 쉽게 스마트 계약으로 정의할 수 있습니다. 스마트 계약을 사용하면 개인 정보를 공개하지 않으면서도 콘텐츠 큐레이션 목적으로 필요한 정보만 선택적으로 공유할 수 있습니다. 
  • 증권: 금융 산업은 특히나 다양한 이해관계자 사이의 마찰이 심각한 시장이며 증권을 거래하고 보유하는 경우에 더욱 그러합니다. 모든 것을 스마트 계약으로 자동화하면 중간매개자의 존재를 완전히 제거할 수 있습니다. 이 경우 프로그램이 통제하며 배당금을 지급하고 기타 다른 결제를 수행하며, 부채를 관리하고 전체 워크플로우를 개선할 수 있습니다. 
  • 대출: 대출이나 담보대출도 많은 이들의 불만이 가득한 영역입니다. 스마트 계약 결제를 적용하면 제3자에게 돌아가는 비용을 줄이며 전체 비용을 절감할 수 있습니다. 그 결과 합리적 금리를 유지하면서도 한쪽에 불리한 세세 조항이 없다는 것을 보장할 수 있습니다. 게다가, 월별 지급을 자동화하면 모든 참여자의 작업이 단순해집니다. 
  • 공급망: 블록체인의 가장 유명한 사용 사례 중 하나로, 공급망 관리에서 스마트 계약의 활용성이 매우 높습니다. 재고 추적부터 모든 이해관계자에 자동으로 업데이트 정보를 제공하는 것까지, 스마트 계약은 투명성을 높이고 잠재적 사기 가능성을 현저히 낮출 수 있습니다. 
  • 에스크로: 제3자의 개입이 필요한 다른 모든 활동과 마찬가지로, 에스크로 역시 자동화의 수혜를 가장 크게 볼 수 있는 영역입니다. 스마트 계약을 활용하면, 자금이 안전한 곳에 보관되었다가 모든 조건이 만족되면 드디어 지급됩니다. 스마트 계약을 사용하면 도난이나 사기의 가능성도 낮추면서 모든 과정을 투명하게 관리할 수 있고, 가장 중요한 점은 이러한 서비스를 저렴하게 사용할 수 있게 된다는 점입니다. 
  • 보건 시스템: 의료 데이터는 매우 민감한 정보이며 대부분의 관할권은 미허가된 접근을 금지해 개인을 보호하는 법률을 시행하고 있습니다. 스마트 계약을 사용하면 데이터를 보호할 수 있을 뿐만 아니라 누가 데이터에 접근할 수 있는지도 통제할 수 있습니다. 궁극적으로, 사람들은 의료 연구원에게 수수료를 받고 의료 데이터를 제공할 수 있으며, 이 과정에 수반되는 모든 이해관계자의 윤리적 걱정을 덜 수 있습니다. 
  • 급여: 급여를 지급해야 하는 직원을 둔 기업체라면 자동으로 급여를 지급하며 상당한 비용을 절감할 수 있습니다. 무급 휴가 등을 차감해야 하는 경우에도 빠르고 간단하게 반영할 수 있습니다. 시급제로 근무하는 직원의 경우에도 쉽게 적용할 수 있습니다. 

위에 나열한 스마트 계약의 사용 사례는 일부에 지나지 않습니다. 단지 스마트 계약이라는 기술을 들었을 때 얼마나 다양하게 활용할 수 있는지를 보여주기 위한 몇 가지 사례에 불과합니다. 제대로된 인프라만 갖춘다면 스마트 계약은 위에 소개한 사용 사례를 능가하는 기능을 제공할 수 있습니다. 

스마트 계약의 이점

회사나 개인이 활용할 수 있는 스마트 계약의 혜택은 대부분 위의 예시로부터 추론할 수 있습니다. 그러나 명확하게 보이는 이점 외에도 다양한 장점이 있습니다. 아래에서 스마트 계약에 내재된 이점에 관해 알아보겠습니다. 

  • 신뢰: 신뢰성, 더 정확히 말하자면 무신뢰성(trustlessness)이란 특정 계약 조건이 실행되기 위해 누군가를 절대적으로 신뢰할 필요가 없다는 의미입니다. 스마트 계약은 스스로의 주체성이 없기 때문에 모든 거래 내용이 코딩된 그대로 실행될 것을 보장할 수 있습니다. 
  • 보안: 블록체인과 스마트 계약의 개념을 이루는 암호학 덕분에 대부분의 다른 기술적 솔루션에 비해 거래 내용을 안전하게 보호할 수 있습니다. 
  • 속도: 수동으로 모든 것을 처리하는 것에 비해 스마트 계약으로 자동화하면 속도가 상당히 향상됩니다. 중재자를 사용하는 경우에는 특히나 그들의 업무 방식에 따라 시간이 더 소요되기 때문에 모든 것을 스마트 계약으로 실행하면 회사 전체적으로 시간을 크게 절약할 수 있습니다. 
  • 비용 절감: 위의 속도 향상과 비슷한 맥락에서, 제3자 개입 절차를 제거하면 그들에게 지불하는 서비스 수수료를 절감할 수 있습니다. 
  • 자주성: 중간 매개자에게 의존하지 않기 때문에 사용자가 스마트 계약의 내용에 관해 더 큰 통제권을 행사할 수 있습니다. 게다가 계약에 참여하는 당사자 수가 감소하며 누군가 실수할(혹은 조작할) 가능성도 크게 낮출 수 있습니다. 
  • 정확성: 스마트 계약을 작성할 때 실수가 발생하지 않는 한, 코드에 적혀 있지 않은 다른 내용이 실행되는 것이 물리적으로 불가능합니다. 
  • 투명성: 스마트 계약은 직접 눈으로 읽고 원하는 내용이 포함되었는지 확인할 수 있을 뿐만 아니라, 블록체인에 저장되기 때문에 모든 관련 데이터가 투명하게 공개됩니다. 기업의 경우 감사에 소요되는 시간이 줄어들 수 있습니다. 
  • 쉬운 사용성: 코드를 읽기 어렵게 작성하는 것도 가능합니다. 그러나 고품질의 코드는 읽고 사용하기 쉬우며, 결국 길고 어려운 법적 문서에 비해 가독성이 높기 마련입니다. 

스마트 계약의 다른 이점은 개인의 사용 사례에 따라 달라질 것입니다. 하지만 어느 사용 사례이든 모든 절차가 쉬워진다는 공통점이 있다는 점이 중요합니다. 

스마트 계약의 잠재적 약점

당연하게도, 어떠한 기술도 만병통치약은 아닙니다. 블록체인과 스마트 계약의 경우에도 특히나 이러한 명제가 적용됩니다. 비교적 새로운 기술이며 여러 산업에 오랫동안 존재해온 문제에 대응하는 만큼, 많은 사람들은 블록체인과 스마트 계약 기술이 현실적으로 해결 가능한 범위보다 훨씬 더 많은 것을 해결해줄 것으로 기대합니다. 아래에는 스마트 계약이 직면할 수 있는 몇 가지 문제입니다:

  • 법적 효력 없음: 이름의 유사성에도 불구하고 스마트 계약은 실제 계약이 아닐 수 있습니다. 계약이 법원에서 효력을 갖지 않을 수 있지만, 이는 개별 사건에 따라 달라질 수 있습니다. 
  • 규제적 불확실성: 기술이 아직 새로운 만큼 정부의 규제가 확립되지 않은 경우가 많습니다. 거래의 내용에 따라 규제가 필요하지 않을 수 있지만, 중요할 수도 있기 때문에 법적 문제를 해결하는 과정이 까다로운 작업이 될 수 있습니다. 
  • 세금: 스마트 계약 거래의 세금은 어떻게 처리할 수 있을까요? 일부 경우는 전통 금융 절차에서 비슷한 선례를 갖기도 하지만, 가상화폐가 새로 등장한 만큼 새로 고려할 요인도 많습니다. 
  • 버그 해결: 어떠한 코드도 완벽할 수 없으며 버그가 발생하기 마련입니다. 일부의 경우 이미 늦었을 때 발견되기도 합니다. 하지만 블록체인 거래는 되돌릴 수 없으며 꽤나 값비싼 실수가 될 수 있습니다. 
  • 계약 철회: 스마트 계약은 보통 직설적이기 때문에 법원에서 전통 계약을 철회하는 것처럼 되돌릴 수 있는 방법이 없을 수 있습니다. 
  • 모두가 코드를 읽을 수 있는 것은 아니다: 간단히 설명하면, 모두가 코딩의 기초를 이해하고 있지는 않습니다. 이론적으로는 세세 조항이 들어가는 종이로 출력한 문서에 비해 직관적이어야 하지만 코드를 읽을 수 없다면 코드로 무엇이든 작성해도 알 방법이 없습니다. 
  • 현실 세계 정보를 얻을 수 없다: 스마트 계약은 합의 알고리즘이 위협 받을 수 있어 블록체인 밖의 정보에 접근할 수 없습니다. 이러한 문제를 극복하기 위해 오라클(oracle)이라는 것이 등장했습니다. 

각각의 단점의 중요성은 위에 언급한 이점과 마찬가지로 실제 사용하는 스마트 계약에 따라 달라집니다. 그렇지만 장단점을 인식하고 있다면 스마트 계약을 사용하고자 할 때 더욱 현명한 결정을 수행할 수 있습니다. 

오라클이 무엇인가요?

블록체인과 스마트 계약을 논의할 때 두 기술의 목표 모두 제3자의 의존성을 제거하는 것이라고 몇 차례 이야기했습니다. 그러나 어떠한 상황에서는 불가피합니다. 이러한 상황에는 현실 세계의 정보를 스마트 계약에 입력해야 하는 경우도 포함됩니다. 

블록체인 오라클이 바로 이 역할을 수행하는 제3자입니다. 오라클은 온체인 데이터(블록체인)과 오프체인 데이터(현실 세계데이터)를 연결해줍니다. 오라클은 스마트 계약의 범위를 넓혀줍니다. 오라클이 없다면 스마트 계약은 블록체인 내부에서 추출할 수 있는 정보만으로 운영되며, 사실 이러한 정보는 많지 않습니다. 

오라클은 데이터 조작을 방지하기 위해 보통 탈중앙화되어 있습니다. 다시 말해 모두 동일한 데이터를 보내며 대다수가 보내는 데이터가 옳은 것으로 인정됩니다. 만약 특정 오라클이 자주 불일치하면 악의적이라고 간주하고 처벌되기도 합니다. 오라클에는 다양한 종류가 존재하며, 어느 유형을 적용할지는 네트워크와 사용자의 필요에 따라 달라집니다. 

스마트 계약 작성하는 방법

스마트 계약을 작성하려면, 이 목적에 사용되는 프로그래밍 언어를 최소한 하나 이상 구사해야 합니다. 이더리움 블록체인의 경우 두 개의 개발자 친화적 언어 솔리디티(Solidity)와 바이퍼(Vyper) 중에 선택할 수 있습니다. 또한 가스도 필요합니다. 스마트 계약의 거래가 복잡할수록 더 많은 가스가 필요합니다. 각 거래는 코드를 실행시키기 위해 지불할 가스량을 특정합니다. 따라서 전체 요금은 전체 요금은 총 가스량에 가스 가격을 곱한 값이 됩니다. 

스마트 계약 작성 방법은 대체로 무엇을 하고 싶은지에 따라 달라집니다. 간단할수록 빨리 작성할 수 있으며 프로그래밍 지식이 기초적인 수준이어도 괜찮습니다. 온라인에는 스마트 계약 작성을 도울 수많은 튜토리얼이 존재합니다. 

계약은 블록체인에 배포하기 전에 컴파일되어야 합니다. 컴파일 과정에서 모든 코드를 정확히 작성하고 제대로 작동하는지도 확인할 수 있습니다. 

더 자세한 내용이 궁금하다면 이더리움 웹사이트에 방문할 수 있습니다. 웹사이트는 스마트 계약이 작동하는 방식을 단계별로 설명합니다. 

마치며

본 가이드의 설명에서 볼 수 있듯이 스마트 계약은 이전에 수동으로 수행하던 작업을 자동화할 수 있는 방법으로 블록체인 기술이 제공하는 높은 보안과 투명성, 불변성을 특징으로 합니다. 스마트 계약에 단점도 존재하지만 실제적으로 문제를 해결할 수 있는 잠재력을 가졌기 때문에 어떻게 스마트 계약을 사용하고 직접 작성할 줄 안다면 귀중한 능력이 될 것입니다. 초보자라면 어떻게 자동하는지 이해하는 것도 좋은 출발점이 됩니다.