Seunghyun Yoo

Posts | Development | About

[KR] Blockchain and communication

내가 이해하는 블록체인은 “복제된 상태 기계” (replicated state machine)이다. 다시 말해 인터넷 상에서 돌아가는 하나의 컴퓨터라 할 수 있다. “상태”를 정의하는 방법은 무궁무진하다. 비트코인의 상태는 “잔고”라 할 수 있다. 이후에 비트코인을 조금씩 바꾼 특수 목적 블록체인들이 우수수 쏟아져 나왔는데, 이더리움은 이를 일반화하고 싶어 가상 머신을 도입했다. “프로그램을 실행한 결과”를 “상태”로 정의한다면 사실상 컴퓨터로 할 수 있는 동일한 일을 할 수 있다. 조금 다른 얘기지만, 가상 머신을 도입하게 되면 필연적으로 서비스 거부 공격에 노출되게 되는데 (무한 루프가 들어있는 프로그램을 업로드한다면?), 프로그램이 종료될 지 정확히 예측하는 방법(halting problem)은 없기 때문에 이더리움은 이를 시장 원리에 맡기는 방법으로 실용적으로 풀어냈다.

어떤 사람들은 블록체인의 느린 성능을 문제 삼는다. 이를테면 비트코인이나 이더리움이나 할 것 없이 TPS가 10개/초를 넘지 않는다는 것이다. 그러나 이런 느린 속도는 블록체인의 설계를 보면 필연적인데, 어떤 작업을 여러 컴퓨터가 분산해서 처리하는 것이 아니라 모든 컴퓨터가 동일한 작업을 처리하기 때문에, 블록체인 시스템의 속도는 개별 컴퓨터의 속도에 제한을 받을 수 밖에 없다. 또한 네트워크 상에서 모든 상태들이 공유될 때까지 어느 정도 시간을 들여 기다려줄 필요성이 있기 때문이다. 아직은 블록체인을 분산(Distributed) 시스템이라고 부르기는 어려운 것이, 비록 공간적으로는 분산되어 있지만 작업 처리 관점에서 보면 단일 컴퓨터와 다를 바가 없기 때문이다. 따라서 최근의 동향은 기존 데이터베이스에서 많이 고민하던 주제의 반복이다. 테이블을 가로로 쪼개느냐 (horizontal partitioning) 아니면 세로로 쪼개느냐 (vertical partitioning)의 관점에서 시스템 개선 방안이 나오게 되는 것이다.

블록체인이 상태 기계라는 점에서 컴퓨터의 동어 반복이기 때문에, 다양한 어플리케이션들이 쏟아져 나올 수 밖에 없다. 사실 인기를 많이 끌고 있는 어플리케이션들을 그대로 블록체인의 세계로 옮겨오면 되는 것이다. 나는 ICO (initial coin offering) 등에 대해서는 유보적인 태도를 취할 수 밖에 없는데, 아직 만들어지지 않은 어플리케이션을 돈을 주고 산다는 것은 다소 이해하기 어려운 일이다(나도 해보고 싶다는 생각이…). 그리고 자신들이 플랫폼을 선점하려고 하지만, 먼저 나왔다고 해서 플랫폼을 선점할 수 있는 것은 아니다. 한국에서는 싸이월드, 그 전에는 아이러브스쿨이 Facebook보다 먼저 나왔고, 동시대 경쟁하던 Myspace는 자취를 감췄다. 개중에는 자신들의 플랫폼을 “강매”하는 경우도 있는데, 이는 처음에 블록체인이 나오게 된 이유(빚잔치를 하던 금융사들을 납세자의 돈 + QE 정책으로 구제금융해준 것 = 이익은 내가 손해는 사회로!)와 완전히 상충되는 것이다. 저런 moral hazard가 가능했던 이유는 법정 통화의 사용이 기본화(강제)되었고, 정부가 마음대로 발행량을 조절할 수 있었기 때문이다. 그래서 비트코인의 통화량은 의도적으로 Deflationary로 만들어졌다 (물론 이런 디자인이 바람직하다고 할 수는 없다). 플랫폼 선점 경쟁보다는 쓸만한 애플리케이션들이 먼저 나와야 한다고 생각한다.

여하튼 블록체인을 어느 경우에 사용하면 좋을까에 대해서 고민을 해보자면, 여러 사람들이 참여를 하는 가운데, 정보를 공유/공개/공증하는 경우에 유용하다. 개인간의 메시지는 굳이 블록체인을 사용할 이유가 없다. 왜냐하면 가장 저렴한 방법은 아래 그림처럼 point-to-point로 메시지를 전달하는 것이기 때문이다.

의료 기록등을 올리는 것에 대해서도 반대하는 입장인데, 개인 비밀 데이터를 아무리 암호화하더라도 세상에 깨지지 않는 암호 알고리즘은 없기 때문이다. 불변성(Immutability)와 결합되어 최악의 결과를 초래할 수도 있다. Bit의 복제 가격이 0이라는 점을 감안한다면 블록체인이라는 공간에 개인 정보를 올리는 것은 좋은 솔루션이 아니라고 생각한다.

블록체인의 커뮤니케이션 모델은 위 그림처럼 broadcasting이고, 모든 참여자들에게 정보를 전달하는 것을 기본으로 한다. 또 하나의 플랫폼을 쓴다는 관점에서 규격화된 통신을 하게 될 가능성이 높아져 보다 효율적일 수 있다. 보통은 서로 다른 주체가 메시지를 주고 받을 때 표준이 없어 제각기 다른 방식으로 메시지를 주고 받아 비효율이 초래되는데, 예를 들어 무역 관련해서 상품의 상태/배송/계약 관련 문서들을 공유하기 위한 플랫폼으로 블록체인을 사용하는 것은 괜찮다고 생각한다. 이 통신 모델의 별개의 장점이 있다면 메시지가 즉각 전달될 필요성이 없다는 점이다. 암호화폐가 블록체인의 킬러앱이었던 것처럼, 어떤 “자산”의 성격을 지니는 것들도 블록체인의 세계로 옮겨올 수 있다. 게임 아이템이나 하다 못해 프로그램 코드도 블록체인 상에서 디지털 자산으로 기능할 수 있다. 또 하나 “공증 가능”의 성격을 활용하여 제3자의 개입 없이도 어떤 계약을 이행하도록 만들 수 있다. Code라는 용어 자체가 “법전”에서 나왔는데, 다시 법적인 관계를 기술하는 데 컴퓨터 코드가 사용된다는 점이 흥미롭다. 그렇다면 파생되는 질문은 어떻게 합리적인 “표준” 계약을 만들 것인가? 라는 질문이 나오고, 이 질문이 요즘 내가 하게 되는 연구 고민이다. :)