코인충 개발자의 자백서

by coolspeed

2011: 비트코인 첫 만남

나는 2011년에 비트코인 비평 블로그를 연재한 프로그래머다. 총 4탄까지 연재했다. 해당 시리즈 블로그글들은 아직도 인터넷에 올라와있고 열람이 가능하지만, 굳이 링크를 첨부하지는 않겠다. 당시의 1탄이 비평에 찬 목소리였는가 하면 4탄에 와서는 가능성을 열어두기도 했다. 어쨌든 2011년의 비트코인 관심은 그렇게 끝났다.

2013: SF작가

다시금 비트코인이 시야에 들어온건 2013년 나의 타임라인에서다.

내가 좋아하는 SF작가가 말하기를 비트코인은 굉장히 위대한 화폐가 될 수 있다고 한다. 그것으로 다중 서명 지갑을 만들 수 있는가 하면 이건 그냥 아주 작은 예시일 뿐이고 다양한 스마트 컨트랙을 만들 수 있다는 것이다. 돈에 프로그래밍이 가능하다는 것이다. 현재 중앙화 문제를 겪고있는 인터넷 도메인 네임 시스템(DNS)도 탈중앙화시켜 보다 공정하고 안전하게 만들어줄 수 있다고 한다. (당시에 이미 Namecoin이란 프로젝트가 존재했다.)

머리뚜껑이 날아갔다.

아니, 인류 최초로 은행 없이 돈이 저렴하게 전 지구적으로 유동될 수 있게 된건 그렇다 치자. WikiLeaks같은 프로젝트가 정부들의 눈에 벗어나도 후원 받을 수 있는 방법이 생겼다는게 <V for Vendetta>가 인생영화인 아나키스트 젊은이의 마음을 훔친 것도 그렇다 치자. 프리즘 폭로 사건을 젊은 나이에 겪은 개발자의 마음을 훔쳤다는 것도 그렇다 치자. 비트코인 얘기는 너무나도 상식에 벗어나고 전 지구적인 사기처럼 들리지 않는가.

하지만 이번에는 달랐다. 어려서부터 장자크 루소의 <사회계약론> 영향을 다분하게 받아온 사람이 커서 프로그래머가 되었을 뿐만 아니라, 동물사회에 엄청난 학문적 관심을 갖고있으며, 최근에는 고전 자유주의 경제학파의 뽕을 맞아 애덤 스미스 만능론에 들떠있었다. 이러다가 전 지구적으로 자유로운, 스마트 컨트랙을 통해 프로그래밍 가능한 화폐를 만나면 어떻게 될까? 상식을 버리기로 한다. 인생영화가 <V for Vendetta>뿐이 아니라 <매트릭스>도 있다고? 보나마나 빨간 약을 선택한 것이라고 스스로 생각하겠지.

2013: 기계의 반란

“아니 소제목이 그게 뭐냐, 무슨 B급 SF소설도 아니고” 라고 말할지도 모른다. 충분히 그런 말이 나올 만하다. 하지만 소제목은 진지하게 달았다. 나는 블록체인 역사를 회고하는 미래의 역사학자들이 2013년 이하 사건을 획기적인 사건으로 다룰 것이라고 생각한다.

지금 2018년에야 댄 라리머란 개발자가 유명한 블록체인 개발자와 유명한 블록체인 사상가로 잘 알려졌지만 2013년에는 그렇지 않았다. 댄 라리머가 2013년에 그의 아버지 스탠 라리머(Stan Larimer)와 토론한 내용을 바탕으로 스탠은 <비트코인과 로봇 3원칙>이란 글을 발표했다.

이 글이 최초로 DAC라는 개념을 제시했다. 이 글은 암호화폐/블록체인 업계에 센세이션을 일으켰다(하지만 아는 사람은 많지 않다). 그 센세이션의 예로 훗날 이더리움 창시자로 잘 알려졌으나 그 당시는 그리 유명하지 않던 비탈릭 부테린이 Bitcoin Magazine 에 <DAC 창립하기> 시리즈 글을 발빠르게 연재하는 것으로 열렬히 응답했다는 점이다. 다른 예로 이때 탄생한 DAC 개념이 나중에 발생한 블록체인 최대 해킹사건인 The DAO 해킹 사건의 불씨로 된다.

그럼에도 불구하고 이 개념은 글을 쓰는 2018년에도 여전히 잘 알려지지 않았다. 도대체 DAC가 뭔데?

DAC를 이해하기 위해서는 우선 기업을 이해해야 한다. 기업이란 무엇인가? 많은 사람들이 기업이 무엇인지 이해한다고 생각한다. 하지만 정말 그런가?

Continue reading

Advertisements

Kotlin언어 성공사례: Corda 블록체인(by R3)

Kotlin언어? 뭔 듣보잡? 성공사례가 있니?

찾아보니 있다.

corda_kotlin.png

CTO는 전 구글 시니어 엔지니어였다고 한다. CTO분이 얘기하신 Kotlin 선택 원인:

  1. 정적 타이핑 (그러고 보니 밀레니얼 세대 언어는 다 그런 것 같다)
  2. Java가 비즈니스 월드에서 중요해서. (하긴)
  3. 섹시해서 (구닥다리 Java랑 비교하니 그렇지)
  4. 배우기 쉬워서 그래서 구인이 쉬워서 (보통 Java구인을 하고 1~3일 트레이닝 시키면 코틀린 언어 코딩을 할 수 있다고 한다)
  5. IDE지원 잘되서
  6. 컴파일 속도가 빨라서 (Scala 저격하며)
  7. 문서화가 잘돼있어서
  8. 내가 할줄 알아서. 내가 좀 해봤는데 재밌어서

그러면서 하는 말이 Kotlin이 없었다면 Scala 썼을 것이라 한다.

마지막에 내린 결론이: 잘한 것 같다.


 

개인적으로 Kotlin이 정말 반갑다. JVM팬으로서 항상 언어가 아쉬웠는데, Java는 구닥다리고, Scala는 너무 복잡하고* Groovy는 언어가 아쉽고, (Scala 와 Groovy공통점이 모두 창립자가 포기했다는 점..) Clojure는 대중성을 전혀 염두에 두지 않은 것 같고. 그런 점에서 Kotlin은 JVM에게 복음과도 같았다.

특히 실행 가능한 환경이  JVM / Javascript VM / Native 로 다양해서 플랫폼에 발목 잡히는 일이 없도록 했다는 점도 칭찬하고 싶다. (마이크로소프트가 최근에야 터득한 점)

JVM, V8엔진, 네이티브 세가지 모두 점점 중요해지는 플랫폼인 것 같다. 아 WASM(Web Assembly)까지 지원하면 더욱 좋겠지만. 이게 미래가 될 수도 있으니. 걱정할 필요가 없는게 컴파일러 플랫폼이 LLVM이어서 WASM이 GC만 지원하면 WASM으로 컴파일 하는 것도 식은 죽 먹기일 거라는 점.

최근 홍민희님의 PyConKr 2017 발표 <파이썬과 다이아스포라>를 보고, 최근에 읽은 <사피엔스>와 결부해서 느낀 점이: 성공한 언어들은 모두 대중성을 키 피처로 치밀하게 기획된 것 같다는 점이다. 민족의 용광로처럼 말이다. (적어도 대량 전파됨을 성공의 척도로 본다면 그렇다)

심지어 Rust도 너무 결백증스러운 면이 있어서 대중성이 의심스럽다.

다행히 Kotlin은 대중성을 키 피처로 설계된 듯하다. 그것의 일환으로 Java월드 레거시에 대한 포용성도 잘 설계된 것 같다.

미래가 지켜볼만하지 않은가!

* 참고로 R3 Corda의 경쟁상대인 IBM hyperledger fabric 은 Go언어로 만들었다.

부록

* TIOBE 프로그래밍 언어 유행도 인덱스에 따르면 Scala는 D언어나 COBOL언어보다 인기가 적다: https://www.tiobe.com/tiobe-index/

 

블록체인은 성능이 개판인가?

개판이 아니다. 이건 미래 얘기가 아니라 현재 얘기다.

성능문제를 앓고 있는 것은 비트코인 네트워크이지 현역 블록체인 기술이 아니다.

다들 아시다싶이

비트코인 네트워크는 7 TPS 성능상한에 시달리고 있고, 이더리움 네트워크도 25 TPS 의 성능상한과 그리 멀지 않았다.

하지만 현역 Bitshares 블록체인DPoS 기술로 테스트 네트워크에서 3000 TPS 성능을 내기도 했다(그리고 출처). 비평자들은 이것이 어느정도 중앙화의 타협으로 이뤄낸 치팅이라고 하지만, 여기에서도 종교전쟁이 등장하는데, DPoS 파의 주장에 따르면 블록 생산노드수의 시점에서 DPoS 만큼 탈중앙화된 시스템도 없다고 한다.

3000 TPS 라면 Reddit 의 쓰기성능 요구를 커버하고도 남는다 [1]. 읽기는 어차피 캐싱과 CDN 으로 해결할거니까.

오프체인 연동도 현역기술이다

오프체인에 데이터를 두고 온체인에는 메타데이터만을 두는 것으로도 어마어마한 성능향상을 가져온다. 흔히들 알고있다싶이 블록체인은 공간사용에 있어서 비효율적이다. 하지만 오프체인 데이터를 통해 Sia coin 이나 Storj 같은 클라우드 (fog) 스토리지 블록체인도 현역이다.

여기까지는 현역 얘기고 지금부터는 미래 얘기다.

이더리움은 최초의 튜링 컴플릿 블록체인이다. 따라서 이더리움의 성능 확장 문제만 해결 하면 사실상 이더리움의 도미네이션이 예상된다. 따라서 이더리움의 성능 확장 로드맵을 살펴보기로 하겠다.

2017년 6, 7월쯤에 Raiden 네트워크 출시가 예정되어 있다

Raiden 네트워크는 비트코인쪽의 SegWit 과 라이트닝 네트워크 기술을 베꼈다 모티브로 한다. 이 기술은 외계기술인데, 요즘 블록체인 기술을 좀 안다 하는 사람들은 모두 이 기술을 이해할 것이다. 이 기술때문이 아니었다면 크립토커런시 시장이 시총 현재 10% 일때 자금유입이 멈췄을 것이라 생각된다.

이 기술이 왜 대단하냐면 이 기술이 (일부 까다롭지 않은 전제조건하에서) 성능을 거의 무한으로 끌어올릴 수 있기 때문이다. Too good to be true? Do your research.

Continue reading

“정부혁신과 블록체인” 국회토론회 박창기 강연 장정숙의원 2016년 11월 30일, 외1편

생각했던 것보다 한국에서 훨씬 활발하게 블록체인이 토론되고있음을 발견했다.


“정부혁신과 블록체인” 국회토론회 박창기 강연 장정숙의원 2016년 11월 30일

박창기 강연 “블록체인과  4차산업혁명” LG인화원 160818

Amazon S3 보다 10배 싼 클라우드 스토리지?!

SiaCoin  의 가격이 하루사이에 80% 가 치솟지 않았다면, 친구가 근래에 자주 언급했음에도 불구하고 나는 SiaCoin 을 “그냥 또하나의 알트코인” (Just Another altcoin) 으로만 간주했을 것이다.

공홈: http://sia.tech/

에서도 알 수 있지만, 그들의 슬로건은 아래와 같다:

sia_slogan

홍보하는 몇가지 키 포인트:

Amazon S3 보다 10배 싸다고 한다.

Far more affordable

Sia’s decentralized cloud is on average 10x less expensive than current cloud storage providers. Storing 1TB on Sia costs about $2 per month, compared with $23 on Amazon S3. Calculate your savings below!

다른 클라우드 저장 솔루션과의 가격비교도 홍보하고 있더라.

sia_storage_price_chart

홍보영상도 있다. 잘 만든 것 같다. 한번 볼까나.

참고로 필자는 여기까지 읽고 바로 투자를 결정했다.

오늘 가격이 이정도로 치솟은 것도 많은 사람들이 필자처럼 “무릎 치기 결정”을 해서인게 아닌가 생각해본다. 그야말로 “눈먼 투자”다.

Continue reading

DB 정규화를 하지 않는 이유

DB 정규화를 하지 않는 이유는 한마디로 성능이다.

그렇다면 DB 정규화는 왜 성능을 해치는가?

1. DB 정규화는 테이블을 많이 나누게 하고, 테이블이 맣아지면 Join 이 많아진다. 그리고 Join 은 성능에 큰 악영향을 미친다.

1.1 Join 은 테이블 락 (Lock) 을 일으키고, 테이블 락은 병렬성의 큰 적이다.

아마 이 이유가 No-SQL 이 부상하게 된 가장 주된 원인이 아닐까 생각한다.

Python 의 GIL 이랑 같은 원리.

1.2 Join 은 여러 테이블을 가로지르는 다중 Disk-seeking 을 일으킨다. 한마디로 데이터 국지화의 적이다.

컴퓨터 하드웨어와 소프트웨어에서 많은 최적화장치들의 작동근거가 데이터 국지화이다. 이 가정이 깨질 경우 데이터 액세스가 굉장히 비싸진다.

DB 정규화는 공간을 가장 절약하는 방식이다 (i). 하지만 저장공간은 저렴하다 [1].

공간을 절약하는건 당연히 죄가 아니다. 심지어 공간을 절약해야 시간도 절약되는 경우가 많다. 그리고 이것 역시 “정규화가 성능에 좋다” 라고 주장하는 사람들의 한가지 근거이다.

하지만 알고리즘이란게 어느 선에 도달한 뒤에는 불가피하게 시간과 공간 사이의 트레이드오프에 직면하게 된다.

정규화는 공간 절약의 극한에 서있다.

이는 이론적으로도 당연하게 시간을 트레이딩 할 여지가 있음을 의미하지만, 많은 실천결과들이 역시 이 결론을 뒷받침해주고 있다.

또한 위의 1.2 와 결합시켜서 살펴보면 알게 되는데, 데이터 양을 줄인다고 무조건 시간이 절약되는게 아니라, 다수의 경우 데이터 국지화가 성능에 훨씬 큰 영향을 미친다. 이것은 실천적으로도 많이들 이중화 (Redundency) 로 정규화를 타파해 성능향상을 이룩하고 있는 산업현황과도 매칭된다.

또한 이 점은 저장 매개체의 랜덤 액세스와 순서적 액세스 사이의 수량급을 초월하는 성능 gap 의 배경속에서 더욱 확대된다. 이것은 물리적인 HDD 에서 유독 두드러지지만 SSD 에서도 상황은 비슷하다.

정규화는 쓰기에 최적화되어 있다. 하지만 읽기가 훨씬 중요하다.

Continue reading