Redux 공부 필기

  1. Redux의 혁신은 상태를 한곳에 몰아넣은 것, 상태와 ‘상태 변경자’들을 분리한 것이다. 맞다, WAS들이 이미 하고 있는 그것 맞다. (AWS Lambda가 왜 ‘람다’인지 생각해보라.)
  2. 상기 혁신을 통해 핫 리로딩(hot-reloading)을 지원한 것이 키 피처중 하나였다. 역시 WAS들이 이미 하고 있는 그것 맞다.
  3. 모듈화는 상태를 찢어놓음으로 달성한게 아니라 함수를 찢어놓음으로 달성한다. 찢어진 함수들은 ‘함수 합성’을 통해 다시 합쳐질 수 있다.
  4. 키 피처중 다른 하나는 시간 여행 디버깅(Time Travel Debugging)이다. (Redux라는 네이밍의 중의적 의미중 하나. 후술.) Visual Studio나 WinDbg에서 지원하는 그거 맞다. 다만 Redux가 먼저 나왔고 따라해도 VS와 WinDbg가 따라했을 것 같다.
  5. 시간여행의 비결이 뭐냐? 애플리케이션 상태를 1개의 불변(immutable) 객체에 저장하는 것이다. 상태가 바뀔 때 어떠카냐고? 불변형 객체를 하나 새로 만들면 된다.
  6. 그렇게 하게되면 메모리 사용량이 무식하게 늘어나지 않냐? 아니다. 최적화되어 필요한 부분만 증분으로 늘어난다. 즉 상태변경을 하는 일반 애플리케이션과 큰 차이가 없다. (특히 웹앱의 생명주기상 더욱 문제 안된다.)
  7. 메모리 사용량이 폭증하지 않는 마법의 비결이 뭐냐? 답은 의외로 간단했다. 얕은 복사(Shallow Copy)다. 진짜 천재다.
  8. 물론 이상 모두 Redux의 핵심을 짚었다고 할 수 없다. Flux – Redux 진화 라인의 핵심은 액션의 단방향 흐름이다. 즉 이벤트 소싱이다.
  9. 이벤트 소싱과 상태의 예측성 모두 게임 쪽에서 훨씬 일찍부터 태동하고있던 사상이었고, DB쪽에서는 옛날부터 이미 구현된 현실이었다.
  10. 물론 수렴 진화(Convergent evolution)에서 그 어떤 가지도 모두 동등하게 중요하고 대체불가하다.
  11. 함수형 프로그래밍 신도들은 immutable 의 승리가 보일 것이고, 데이터베이스 힙 가이들은 “THE LOG IS THE DATABASE”가 보일 것이고, 이벤트 소싱파들은 이벤트 소싱이 보일 것이고, CRDT연구자들은 CRDT가 보일 것이고, Redis 애호가들은 Redis가 보일 것이고, 블록체인 신도들은 블록체인이 보일 것이다.
  12. “Redux”는 “Reduce”(“맵리듀스”의 그 “리듀스” 맞다)와 같은 라틴어 어원을 갖는다. 위에서 언급한 것처럼 “(과거의 것을) 되찾음”이란 뜻이 있다. 그리고 reduce는 함수형 프로그래밍에서 잘 알려진 패턴인데 억지번역을 해보자면 ‘귀납 합병’ 같은거다. 필자도 지금 알게 된건데 “fold”가 더 표준적인 용어더라.
  13. 정말 블록체인으로 Redux를 구현한 사람이 있다.
  14. Redux는 놀랍도록 짧다. 핵심 코드 99줄 구현을 갖고있는 것으로 유명하다. 그도 그럴것이 React Europe이란 컨퍼런스에 ‘핫 리로딩’ 관련 기술공유를 하기 위해 PoC 목적으로 급조해 만들어졌다고 한다. (거봐 그냥 WAS를 본딴거라니까)
  15. Redux개발자들은 이미 페이스북에서 채갔다.

코인충 개발자의 자백서

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

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