속지 말자 블록체인 다시 보자 가상화폐

블록체인이라는 망령


지난 추석쯤이었던 걸로 기억하는데 사진을 다시 돌이켜 보니 대략 5월쯤의 일이다. 회사에서 “우리도 이제 블록체인 기업으로 발돋움해야 한다”라면서 알트코인 발행 계획을 막 떠들기 시작한 것이 말이다. 이젠 하다 하다 이렇게 영세한 회사도 블록체인을 하겠다고 들먹이는구나, 정도만 생각하고 일단 가족 전체 나들이를 어디론가 좀 멀리 나갔다 올라오는 길이었다.

밀리는 고속도로 위에서 할 일이 너무 없어서 온갖가지 생각을 하다가, ‘그러고 보면 정작 블록체인이라는 게 어떤 기술인지 내가 잘 모르네’ 싶어졌다. 그러면 한번 그 블록체인이라는 게 실체가 뭔지 알아볼까? 한 두어 시간 잘 버릴 수 있을 것 같은 괜찮은 소재여서 당장 PHP blockchain example이라고 쳐 봤다. 아니나 다를까 누군가가 이미 만들어 놓은 예제 소스가 있었다.

블록체인 PHP 예제
github.com/ohmybrew/Blockchain-PHP

파일 갯수가 생각보다 너무 적어서 같은 파일을 이리 읽고 저리 읽고 모로 옆으로 훑어보다가 Block.php의 mine() 메소드가 핵심임을 알아보는 데는 15분이 걸렸고, 그 메소드가 하는 일을 파악하는 데는 3분 정도가 걸렸으며… 이제 모든 상황이 어떻게 돌아가고 있는 건지 파악한 후의 현자타임을 다 보내기까지는 족히 한 시간이 넘게 걸렸다.

채굴은 ‘암호 끝말잇기’일 뿐이다

이 예제 소스에서 mine() 메소드는 이렇게 되어 있다. 여러분은 이제 블록체인 채굴의 실체를 마주할 준비가 되셨는지?

public function mine() : self
{
$nonce = 0;
while (!$this->validateNonce($nonce)) {
$nonce++;
}
$this->state['nonce'] = $nonce;
return $this;
}

여기서 nonce란 고유 임시값을 뜻하는 용어다. 일단 그걸 0으로 잡고, 이 nonce에 +1을 해 가며 유효성을 검사하는 작업을 무한히 반복한다. 유효한 nonce가 되면 그걸 최신 nonce로 잡는다. 유효성 검사는 어떻게 하는 거냐고? 앞전의 nonce와 이번의 nonce를 붙여서 암호화했을 때 맨 앞에 특정 갯수만큼 0이 붙어 나오면 유효한 것으로 본다. 이게 전부다. 뭐라고?

한마디로 nonce란 특정 조건 – 앞전의 숫자와 이번의 숫자를 합친 걸 암호화한 결과가 특정 조건을 만족할 것 – 을 만족할 때까지 이번의 숫자를 +1해서 얻는 숫자다. 이렇게 만들어진 nonce는 다음 mine()이 호출될 때 앞전 nonce로서 호출되는데, 그 값은 분명 앞전의 nonce를 만들 때 쓰인 “앞전 nonce”와는 전혀 다른 nonce이므로, “마이닝” 자체는 항상 일방향 연쇄로 일어난다.

그리고 이렇게 “마이닝”을 해서 하나의 새 nonce를 얻어냈을 때, 그때 얻은 암호화 값을 전체 ‘블록체인’에 새로 등록하면 그게 블록체인 채굴의 전체 과정이다. 블록체인이란 결국 하나의 긴 배열(목록)이며, 거기에는 데이터를 꽂아넣을 수 있고, 그 데이터들 중에는 고유한 키도 포함할 수 있는데, 그게 바로 nonce 유효성 검사를 할 때 만든 암호화 값이다.

상황이 이해가 가는가? 말하자면 ‘채굴’이란 무한한 끝말잇기 게임이다. ‘블록’이란 그때그때 부르는 ‘끝말 이은 단어들’이다. 그리고 이 게임을 기록하는 기록원이 있다면, 그는 누가 어느 단어를 언제 말했고 특이사항은 무엇이었나 같은 메모를 잔뜩 적어놓은 무한히 긴 목록을 작성하게 될 텐데, 그게 그대로 ‘블록체인’ 그것이다.

그걸 무슨 대단한 일인 양 난리냐고? 내 말이 그 말이라 이 말이다!

블록체인은 기술일 뿐이다

뭔가를 개발하다 보면, 가끔, 어떤 자료의 위변조 방지가 필요해질 때가 있다. 정말 이게 이 사람이 이때 올린 데이터가 맞나? 다른 사람이 이 사람인 양 행세할 여지는 확실히 차단되어 있는가? 이 데이터는 어디서 퍼온 카피가 아닌 진본인가? 같은 거. 가끔 부딪히는 문제 상황이다.

확실히 블록체인 개념 자체는 이 문제를 해결하기에 아주 나쁘지 않은 수단이다. 뭔가 조건이 만족될 때까지 무한 루프를 돌아 버리고, 조건 만족 순간에 앞뒤 기록을 다 적어서 남겨 버리니까. 마치 끝말잇기 게임 기록지의 중간 어딘가에 어설픈 단어를 넣을 수 없는 것과 같다. 심지어 끝말잇기는 이를테면 ‘가’로 시작해 ‘지’로 끝나는 단어가 여러 개 있을 수 있기라도 한데 블록체인은 앞말도 암호고 끝말도 암호라서 그럴 수도 없거든.

Blockchain
(이 이미지는 개소리이다.)

물론 얻는 게 있으면 잃는 것도 있어서, 블록체인은 바로 이 무한 루프 검증 때문에 시간과 리소스를 많이 잡아먹는다. “채굴장”을 만들려고 그래픽 카드를 사재기한 사람들 얘기는 들어보셨을 것이다. 그게 그래서 그렇다. 암호로 시작해 암호로 끝나는 끝말잇기를 한 500번 해야 한다고 생각해 보라. 웬만한 컴퓨팅 파워로 배기겠는가? 당연하게도 한없이 시간이 걸린다.

그러므로, 블록체인이란 오로지 이러한 시간적 비용적 소모를 감수하고서라도, 어떻게든 앞뒤가 다르지 않은 일방향의 데이터 무결성을 확보해야 할 때에나 도입해볼 만한 것이 된다. 이를테면 SNS가 있는데, 누가 글을 쓰면, mine()을 실행해서, “이 사람이 누구 다음으로 글을 썼다” 하는 것을 기록해 놓을 수 있는 식이다. 물론 글을 쓸 때마다 서버는 다음 ‘블록’을 얻을 때까지 무한루프를 돌 것이고 글쓴이는 그걸 그저 기다려야 하겠지만.

그런 SNS를 누가 쓰냐고? 내 말이 그 말이라 이 말이다.

블록체인 산업이란 허상이다

‘잡거래소’라 불리는 국내 중소 비트코인/알트코인 거래소들을 보면, 정말 ‘듣도 보도 못한 잡것’이라 할 만한 ‘코인’과 ‘토큰’들이 군웅할거(?)를 하고 있다. 이 코인과 토큰들은 당최 무엇인가? 블록체인 기술을 도입해서 뭔가를 해내(겠다)는 서비스들의 블록 하나하나에 희소성과 브랜딩이 붙은 것이며, 말하자면 열심히 홍보댓글 써서 받은 일당 현찰 지폐에 적혀 있는 일련번호 같은 것이다.

문제는 첫째 그 일련번호가 반드시 블록체인 기술을 이용해 발급될 필요는 없을 뿐더러, 둘째 애초에 그 서비스에 그렇게까지 철두철미한 체이닝이 들어가야 할 필요도 없을 수 있고, 셋째 그게 뭐가 그렇게 새롭고 위대한 대수냐 이 말이다. 셋째가 잘 이해가 안 된다면, 시중에 난립하는 각종 스캠 코인의 백서를 줘패고 다닌다는 한 업체 대표님의 일갈을 들어보시라.

어떤 기업이 “우리는 컴퓨터 언어 C++을 써서 코딩을 했다”, “JAVA에 대한 이해도가 높다”, “루비온더레일즈를 사용하기 때문에 우리 비즈니스는 성공할 거”라고 말한다면 사람들은 크게 웃겠지만 유감스럽게도 지금 거의 대부분의 백서들은 이런 블랙코미디를 굉장히 심각한 얼굴로 진지하게 연출하고 있습니다.

황라열, 힐스톤PE(사모펀드) 대표
황라열 힐스톤PE 대표
ⓒ 매일경제

실제로 저걸 상상해 보면 너무나 크게 웃긴다. JAVA를 쓰건 코볼을 쓰건 (우스갯소리로) 중국 인력 백만 명을 동원해서 수작업으로 구현하건… 뭔가를 어떤 기술로 구현해내는 것 자체는 자랑거리가 아니다! 정말 자랑해야 할 것은 그 구현이 이룩하는 비즈니스 성과일 뿐이다!! 뭐가 그렇게 달고 맛있는지 뭣 때문에 사람들이 우르르 몰려와 돈과 시간과 마음을 쏟게 되는지 같은 아주 기본적인 사항이, 유독 ‘블록체인 업계’에서만큼은, 너무하다 싶을 정도로 빠져 있다!!!

배달의민족 이후 막 늘어난 지난 몇 년간의 ‘IT창업’ 시절에는 그나마 그 비즈니스 실체라는 것이 있기는 있었다. (너무 너무 낙관적이고 너무 너무 허황되어서 그렇지.) 그런데 이제 블록체인 기술을 이용한 뭔가를 한다는 놈들은 그 IT창업에서 한술 더 떠서, 기술 자체가 비즈니스의 실체가 되어 버리는, 그러므로 사실은 비즈니스 실체가 없는 경우가 적지 않아 보인다. 아니 실제로 그렇다.

앞으로 블록체인 관련 헛소리와 싸워야 할 때는 이렇게 해 보면 좋을 것이다

그럴 일이 있어서 코인판을 며칠 들여다본 사람으로서 정리를 하자면, 사실 이 글은 그럼에도 불구하고 ― “코인판 스캠인거 누가 모르고 투자하냐? 가치투자자야?” ― 소위 이 판에 ‘투자’라는 걸 하실 분들께는 대수롭지 않은 글이다. 저점에 사서 고점에 팔면 똥이든 된장이든 클링이든 익절은 할 수 있으니까. 이 글은 그들 외의 모두에게, 블록체인이라는 것의 현상 자체를 개발자로서 알리고 싶어서 좀 써본 것이다.

앞으로 살면서 뭘 읽거나 듣는데 갑자기 ‘블록체인’이라는 말이 튀어나와서 머리가 아파 온다면, ‘블록체인’을 “암호 끝말잇기”라고 바꿔서 들어 보기 바란다. 만약 그렇게 했는데도 전체 줄거리가 조리가 있다면, 그건 실제로도 사리 분별이 되는 괜찮은 말이다. 안타깝게도, 시중에 떠도는 대부분의 잡썰은, 블록체인을 ‘끝말잇기’라고 바꿔 부르는 순간부터 하나도 앞뒤가 안 맞는 개소리임이 드러나며 와르르 무너져내릴 것이지만.

코인제스트 원화거래가능 코인 목록
쫄리는 놈들 많을 것… ⓒ coinzest