블록체인

블록체인 거 쓸만하긴 해요?

1. 그냥 평범하게 두서를 작성하려다 말고, 직설적으로 말하기로 하였다. 아뇨. 그냥 쓸데 없고요. 특정 분야에서 아주 효과적일 뿐입니다.

2. 블록체인 한다고 하면 으레 듣는 소리 중 하나가, 블록체인 기술이 성장해야 나라가 발전한다는 70년대식 발언과 도대체 그거 쓸 데도 없는걸 왜 하는 약팔이짓 하냐는 질문일 것이다. 뭐 그렇다고 내가 블록체인 관련, 특히 이더리움 관련 일을 때려칠 생각이 있느냐 하면 그것도 아니고, 전자의 반응에는 "아 네 그러세요"로 후자의 반응도 "아 네 그렇군요"라고 반응을 할 수 밖에 없다. 뭐 생각하기는 자유롭고 실제 지금의 트랜드와 기술 관련된 부분들은 아예 블록체인 초창기와는 완벽하게 달라졌기 때문일 것이다.

이더리움 메인넷에 1200원 정도만 투자해서 스마트컨트랙트를 하나 배포하고, 그걸 거래소에 상장시키거나 ICO라는 이름을 대량의 돈을 벌던 시대는 지나갔다. 블록체인에 대해서 부정적인 시각이 생기게 된 이유도 아마 이 시기에 너무 강렬한 인상을 받았기 때문이라고 생각을 하는데, 8토막 정도 난 자신의 총 자산을 바라보면서 알고 보니 암호화폐가 상폐 직전의 주식 쪼가리와 별반 다를게 없다는 것을 몸으로 겪으니 다들 그런게 아닌가 싶다.

하지만 그것을 넘어서 공부를 계속 하고 암호화폐와 블록체인에 대해서 어느 정도 이해를 하게 된다면, 둘 중 하나가 될 것이 분명하다. 지금도 암호화폐 투자를 미친듯이 하고 있거나, 아니면 절대로 암호화폐는 건드리지 않으면서 블록체인만 하고 있거나.

3. 나는 후자의 사람이 되어버렸다. 보유 암호화폐 총 자산은 10만원도 넘어가지 않고, 그 10만원도 이더리움이나 개발 할 때 필요한 수준의 암호화폐 뿐이다. 손을 거쳐간 암호화폐는 많지만 (트론, 퀀텀, 비트코인, 이더리움 등등 거래소에 상장된 모든 걸 만져봤으니) 손을 거쳐서 남게 된 것은 결과적으로 하나 뿐이다. 토큰 이코노미나 여러 암호화폐의 난입 없는 용도와 목적이 분명한 암호화폐들의 생존과 소수의 메인넷만이 살아남아 시스템을 견고하게 유지하는 것, 그리고 가능하다면 인터체인이나 안정적인 시스템을 구축할 수 있는 프레임워크가 많이 나오는 것 뿐이 블록체인 기술이 살아남는 답이라고 생각한다.

4. 많은 한국 기업들이 메인넷을 개발하려고 하고 있지만, 사실상 제대로 된 메인넷은 비트코인과 이더리움을 제외하고 없다고 봐도 무방하고, 그 외는 대부분의 기술들을 이더리움과 비트코인에서 가져오거나 개선하는 수준에서 그치는 경우가 많다. PoS를 선구적으로 시도한 EOS나 QTUM 등은 좀 지켜볼만하지만, 실제로 시스템이나 어플리케이션이 제대로 돌아가는 시스템을 만드는 것은 세 가지에 종속되게 된다. 1. 이더리움의 EVM과 얼마나 잘 호환되는가. 2. 이더리움처럼 얼마나 생태계가 풍부한가 (e.g. 개발자의 수, 오픈소스 프로젝트의 수) 3. 거래소에 잘 상장되고 있는가 가 그것인데, 실제로 이 3가지 기준을 다 지키는 암호화폐는 극소수이다.

QTUM은 생태계 구축에 실패했고, EOS는 자체 VM으로 실질적으로 개발 관련해서 도움을 받을 데가 너무 적다. Tron의 경우 수수료 무료라는 장점이 있다지만, 그 장점을 상쇄하는 Java 기반의 클라이언트를 생각해보면 별로라는 걸 알 수 있고, 지갑 조차 제대로 작동 안 하는 ADA나 관리가 제대로 안 되는 IOTA 등등... 거의 영구히 ERC-20 토큰으로만 남아있는 대부분의 프로젝트들을 생각한다면, 사실 블록체인 서비스 중에서 믿을 만한 것은 탑 10코인 정도 밖에 안 된다는 결론만 나오게 된다. 그리고 그것들은 비트코인의 포크이거나 이더리움의 아류작들 뿐이다.

5. 이런 상황에서 왜 이더리움에 대한 집착이나, 이더리움에 의한 블록체인 체제 개편이 되어가고 있는가에 대한 질문에 대한 대답이 나오는 것이다. 몇 주 전에 이더리움 관련 발표를 했을 때, "왜 이더리움을 포크한 프로젝트가 그렇게 많느냐?"라는 질문이 나왔었는데, "실제로 이는 메인넷 개발에 있어서 스마트컨트랙트 실행 환경이 이더리움 VM이 실질적인 표준이 되어버렸고, 이더리움 기반 생태계가 실질적인 표준을 이끌어가고 있으며, 그리고 검증 받은 신입을 원하기 때문"이라고 대답을 하였었다. 실제로 Quorum이나 클레이튼/루니버스 모두 이더리움 기반으로 만들어지고 있고, 메타디움이나 몇몇 메인넷 개발사들도 이더리움 포크나 이더리움 구현체의 확장 정도에서 그치는 모습을 보여주고 있다. 메인넷을 처음부터 개발하고 알고리즘을 새로 개발할 여력 자체가 없는 것도 있지만, 개발 관련하여서 안전한 길을 택하려는 경우가 많다. 클레이튼과 루니버스가 대표적인 예인데, 이더리움을 포크하면서 얻을 수 있는 대부분의 이득을 얻으려고 노력하는 모습을 많이 보게 된다. Web3js의 포크 등의 기존 라이브러리의 재활용이나 JSON-RPC 관련 표준의 확장 정도로 손을 대고 끝을 내면서 기존 로우 레벨 서비스와의 호환성을 높이는 등의 일들이 그런 것인데, 이더리움 생태계가 확장 될 수록 반사 이익을 많이 받게 되는 것도 사실이고, 실제로 개발이나 런칭 관련해서 빠르고 유연하게 대처할 수 있다는 것도 사실이다.

6. 암호학에서 유명한 말이 있다. "자체 개발한 암호 알고리즘을 쓰면 100% 뚫린다"라는 것인데, 블록체인 기술에서 5할 이상인 암호학 관련한 부분이라는 것을 생각해보면 상당히 의미심장한 이야기 일 것이다. 일반적으로 secp256k1 타원곡선을 사용하여 암호화를 하고, keccak256을 이용하여 해싱하는 것은 일반적인 블록체인 서비스라면 다들 당연하게 여기는 부분일 것이다. (secp256r1 쓰는 리플 이런 것도 있지만) 대부분 사용하는 암호화나 기법들은 일반적으로 다들 알 만한 기술들이고, 이미 대부분 실생활에서 알게 모르게 적용이 되어있는 경우들이 많다. 하지만, 대부분 신경을 꺼도 되는 레이어나 배우기 힘든 부분들에 포진되어있다는 것이 문제일 것이다.

7. 블록체인이 프로그래머에게 그렇게 와닿지 않는 기술이 돼 버린 부분도 이것의 연장선상이다. 블록체인은 사실 4차 산업혁명 같은 단어로 인식되기 일쑤인데, 실증도 덜 되어있을 뿐만 아니라, 사용하기도 까다로운 무언가가로 인식되어지고, 거기다 그렇게 익숙하지 않은 기술들의 조합이기 때문일 것이다. 완벽한 "탈"중앙화는 무엇이며, 그것이 갖고 있는 의미는 무엇인가? 사실 별다른 감흥이 오지 않는 단어들의 연속인건 사실이다. 탈중앙화 이런 단어를 갖다 버린다고 하더라도, 비신뢰 환경에서 신뢰할 수 있는 네트워크의 구축이 얼마나 중요한지에 대해서는 DoH나 GPG/PGP나 뭐 다양한 도감청 이슈나 프라이버시 이슈를 위한 암호학을 이용한 솔루션들을 생각해보면 별로 공감할 건덕지가 없는 것도 사실이다. 뭐 프로그래머 중에서 GPG/PGP 키 걸어 놓고 특수한 이메일 클라이언트를 쓰고, 메일서버는 따로 구축해서 사는 사람이 얼마나 있는지 손으로 세어보면 답이 나오지 않는가. DoH 같은 경우 그냥 DNS들과 웹 브라우저 제작사들이나 신경 써야할 일이고 (뭐?) 실제로 프로그래머가 dig 같은 명령어만 써도 뭐 준수한게 아닌가 싶다. (뭐??) 좀 대 놓고 말하면, 보안하는 사람들(해커는 아니다)과 프로그래머들이 사이가 안 좋은 이유가 대부분 이것인데, 까놓고 말해서 자유, 개방성, 프라이버시를 이야기하지만 거기 아래에 있는 기술에 대한 이해는 서로 아예 다르며, 기술에 대한 이해나 접근 방식이 아예 다르기 때문이 것이다. 정확히는 구현체를 구현하는 입장이나, 구현체가 뚫리지 않도록 하는 경우나, 그것을 갖다 쓰는 경우나, 그것을 공격하여 무력화하는 것에 초점이 맞춰져 있는 네 그룹 정도로 나뉘어져 있다고 생각을 하고 있는데, 이게 실제로는 완벽하게 4개로 나뉘어지는 경우는 별로 본 적이 없다. 뭐 웹 개발하면서 Let's Encrypt의 도움을 받긴 하지만, XSS에 대한 직접 구현을 해야할 것이고 (뭐 따로 라이브러리 가져다 쓰는 경우도 있지만), 반대로 HTTPS Strip 같은 공격을 감행하는 툴을 직접 짜서 돌리는 경우는 꽤 있지만, XSS는 OWASP에서 XSS 유즈 케이스 가져와서 쭉 넣고 "아 XX 요즘 기성 프레임워크는 말야~~" 하는 경우도 있을 것이다. (실제로 둘 다 봤다) 뭐 여튼, 이렇게 말해서 미안하긴 하지만, 일반적으로 코어 기술을 이해할 필요가 없는 것들이 많다는 것이다. 추상화 덕택이긴 하지만, 결과적으로 이러한 것들은 많은 개발자들이 블록체인에 대한 관심을 끄도록 하는 주요한 이유이기도 할 것이다.

이는 "로우레벨을 알아야해요!"라는 떡밥과 직간접적으로 연관이 되어있다. 사실, Keccak256이랑 Blake256 중 왜 Keccak256이 왜 SHA3으로 채택되었는지에 대해서 알 필요는 없다. 그것이 정말로 크리티컬한데 쓰이는 경우를 제외하고는 말이다. 해시 콜리전이 일어나면 안되는 상황 (e.g. 포렌식 할 경우 md5/sha1 둘 다 써서 각각 해시값을 뜨는 경우가 종종 있다. 잠시만 sha1이라고? 그렇다.) 이 있다던지, 아니면 같은 값을 넣었는데 패딩이나 인코딩 문제로 다른 값이 출력되는 경우가 절대로 없어야하는 경우라던지, 뭐 아님 왜 Salt 같은걸 쳐야지 비밀번호를 안전하게 보관할 수 있다는 것인지(e.g. 레인보우 테이블), 왜 몇몇 해쉬 알고리즘은 비밀번호 보관에 적절하지 않은지에 대한 부분들은 그 때 가서 배워도 될 부분이고, 그리고 사실 대부분 암호 라이브러리들이 알아서 다 해주는 경우가 허다하다. 그렇기에 프로그래머들에게는 "프로그래머가 수학 잘 해야한다는 소리"의 연장선상이자, "로우레벨이 얼마나 중요한데" 시리즈는 사실 자신의 지적 오만함을 나타내기 위해서 존재하는 것처럼 보일 때가 많다는 것이다. 

8. 좀 너무 날 것의 말을 해 버렸는데, 사실 하고 싶은 말들이 그것이다. 블록체인 기술에 대해서 비판적인 경우에 대해서 제일 짜증 났던 부분 중 하나는 여기 적용되는 기술이 실제로, (자조적으로 말하지만) 비대칭키로 싸인을 한 데이터 덩어리들을 해시드 링크드 리스트로 만들어서 토렌트로 공유하는 것과 차이가 없다는 것이고, 매번 욕 먹는 부분들의 대부분은 이미 논의가 되었거나 논의가 되고 있는 부분들이기 때문일 것이다. 그렇기에 "블록체인이 약 파는 기술이에요?"라는 질문에 대답이 언제나 맥 빠진 소리의 "아 네 그러죠 하하" 인 것은 이 이유 때문이다. 이더리움 커뮤니티의 많은 주제들은, 분산처리, 비신뢰 환경에서 신뢰 담보, 게임이론, P2P 네트워킹, 분산 데이터 저장, 타원 곡선 암호, 샤딩, 합의 알고리즘, 블록 팩킹 알고리즘 등등이고, 통신 관련된 부분은 위스퍼나 libp2p에서 열심히 구르고 있고, 분산 스토리지는 IPFS나 온톨로지 같은 애들, 분산처리는 gWASM 쓴다고 난리치는 golem 같은데에서 열심히 해결을 하려고 하고 있다. 그 누구도 500기가나 2테라 바이트 정도 되는 블록체인 전체 트랜젝션 데이터를 받아 놓기를 원하지 않는다는 걸 모두가 알고 있고, Light Node들의 구성을 통해서 안정적인 거래를 만들 수 있도록 하는 것을 다음 목표로 하고 있다. 실제로 로우레벨에서 안 되서 개선을 하려고 삽질하는 경우들이 많고, 대부분 학부에서 제일 지루했던 수업들에서 다루는 주제들을 열심히 다루고 있는 것도 문제이다. 신경을 쓸 일이 없는 로우레벨의 일들이 대부분이고, 문제 해결 방식도 대부분 결국 수학의 도움을 받아야하고 증명 과정이 계속 필요하다는 것도 관심을 별로 못 받는 이유이기도 하다. 하지만 겉으로 보기에는 블록체인이 무엇을 해결하느냐, 실생활에 쓸 수 있는 라이브러리가 있느냐, 이걸 어떻게 써야하느냐 이런 질문을 하는 사람들이 이해가 안 가는 것도 아니다.

9. 저번에도 말 했지만, 블록체인에 대한 지식을 무기화하거나 비즈니스화하는 경우가 제일 문제이다. 이더리움 포크 뜨고 뭐 기술력있는 것처럼 자랑을 하는 건 좀 아니라고 생각을 하고, 사실 라이브러리 만들고 더 안정적인 서비스들을 만들어야할 시점에 그걸로 ICO 땡기고 있지를 않나, 오딧팅을 돈 받아먹고 하지를 않나 (근데 우리도 그렇긴하다 ㅎㅎ; 보안 감사가 되게 하는게 없어 보이긴하지 ㅠㅠ), 라이브러리 파편화를 가속화시키지를 않나, 거지 같은 일들이 매일 벌어지고 있다. 거래소, 메인넷 개발팀, 지갑 개발팀, 홍보/마케팅팀, 그리고 마켓 메이킹이라고 하는 자전거래하는 사람들 등등 별의별 군상들의 집합이기도 하다. 토크나이제이션, ERC-721, ERC-1155, 탈중앙화 게임 플랫폼, 커스터디, DeFi 등등 말도 안되는 단어들이 난무하면서 정작 하는 건 하나도 없는 경우들을 한 두 번 본 것도 아니다. 매번 뭐 만들었다고 하는데, 저 라이브러리 떼오고, 이 라이브러리 떼와서 키메라 만든 다음에 기술력 있다고 하면 뭐 어쩌라는 것인가. 사실 이런 분위기가 블록체인 업계에 대해서 표면적으로 이해를 하는 사람들에게 안 좋은 이미지를 주고 있는건 사실이다.

10. 좀 이야기를 틀어서, 블록체인이 암호학에 도움이 되는가? 라고 한다면 분명히 아닐 것이다. 암호학은 원래 가던 길이 따로 있었다는 것도 사실이고, 타원 곡선 암호가 블록체인 덕분에 반짝 뜬 건 있지만, 실제로 검증된 몇 곡선을 제외하고는 추가적인 연구를 하려고 하지는 않는 경향이 크다. BLS가 예외적이긴 하지만, 이 경우 이더리움의 스케일링 관련해서 생기는 문제들에 대해서 해결을 위해 도입이 되고 연구를 하고 있는 부분이고, 이더리움 재단에서 지원과 연구를 한다지만, 실제로는 뭐 자기들이 쓸 부분만 도움을 주는 것도 사실이고, 대놓고 말해서 이 쪽 전문가가 부족한 건 사실이다. 암호학이 만만한 분야도 아니고, 결국 수학자들이 나와야할 부분인데, 결국 할 수 있는건 역시 이더리움이나 비트코인을 그 사람들의 계좌로 쏴 주는 것 밖에 없지 않나 싶다. 뭐 여튼, 블록체인 기술들이 다른 학문이나 타 기술들의 성숙도에도 영향을 받고 있다는 것인데, 실제로 커뮤니티도 슬슬 한계를 느끼는 것인지 외부에 있는 라이브러리들 갖다 쓰는 것도 일반화가 되었고, 브릿지나 레이어2 이런 이야기들을 하면서 블록체인 밖의 데이터에 대한 논의들도 충분히 되어가고 있다. OpenSSL 1.1 쓰면 정합성 깨져서 OpenSSL 1.0을 무조건 깔아 써야하는 비트코인 같은 걸 보면 아직도 복장이 터지지만, 조금식 조금씩 개선이 되는 모습을 보여주고 있고, 결국 zmq나 leveldb나 뭐 여튼 이것저것 기워서 비트코인 클라이언트가 만들어지고 있고, 그 과정에서 각종 외부 라이브러리 컨트리뷰션도 하는 모습이 조금씩 보이고 있다는 것도 희망적이라고 하면 할 수 있다. 결국 외부, 아님 다른 커뮤니티와 소통을 얼마나 잘 하느냐에 따라서 블록체인 기술이 성장하냐 하지 않느냐가 결정 될 것은 거의 자명한 일이다.

11. 다시 원 주제로 돌아가자면, 제일 쉽고 빠르게 프로그래머들이 블록체인을 쓰게 하는 방법은 IPFS와 Ethers.js와 INFURA를 섞어서, 블록체인에 블로그 글 쓸 수 있는 블로그 서비스를 운영하면 되지 않냐는 것이다. (스팀잇이나 비슷한 아이디어를 가진 서비스들이 있긴하다) "블로그 글을 쓰려면, 스토리지 사용 비용을 내셔야합니다. 그리고 블록체인을 통해 블로그 글에 대한 위변조 여부를 검증 가능합니다." 정도면 될 것 같다는 생각이 계속 드는 것이다. 사실 Github Pages를 그렇게 불편한데도 열심히들 쓰는 거 보면, 그리고 Git이라는 일종의 Hash 기반의 블록체인과 비슷한 형태로 자료 저장을 하는 (사실 그렇다. 여러분은 알게 모르게 블록체인을 쓰는 것이다) 버전 관리 시스템을 꾸역꾸역 좋다고 쓰는 걸 보면 블록체인도 충분히 마조히즘을 느끼면서 쓸 것 같다는 느낌이 계속 든다.

사족을 덧붙이자면, 요즘 관심 기술은 DAT Protocol, libp2p, orbit db 같은 분산 스토리지 기술들이고, 그 다음로 관심을 갖는 분야는 역시 Auth 관련한 부분들이다. DID나 FIDO 같은 것들인데, 이 부분들에 대해서 좀 깊은 이야기를 써야하지 않나 싶은 것이다. 뭐 DID는 지금 개나소나 하고 있는 것도 있고...

더 사족을 붙이자면, 이 글을 퇴고하기 귀찮아서 1.5번 읽고 갖다 버린 글이라는 것이다. 다시 읽어도 횡설수설이긴 한데, 요즘 글을 남이 읽으라고 쓰는게 아니라 자기 만족을 하려고 쓰는 거라서 더더욱 그렇게 되고 있다. 아 그래서 로우레벨을 알아야하느냐고? 아니 그렇진 않다. 그러나, 로우레벨을 알아야만하는 분야들도 좀 있다는 것을 알아 줬으면 한다. 뭐 그렇기에 아무도 이해를 못 하는 기술이 탄생했지만 :(