(이미지 출처 : https://www.bitdeal.net/)


블록체인 업계에 대해서 - 블록체인 전직 혹은 블록체인 대학원/국비학원/각종교육으로 고민중인 분들이
최근 많이 있는 것 같아서 대략 정리 해봅니다. 

먼저 

블록체인 업계가 앞으로 어떻게 될 지는 아무도 모릅니다.
다만 블록체인 관련한 업계는 최소 10년이상은 건재 할 거 같습니다. 
저는 "블록체인"이 탈중앙 디지털 자산의 기반으로 미래에 핵심적인 인프라로 남기를 희망합니다. 
(요 문장에서 만큼은 블록체인==이더리움을 말합니다) 

블록체인은 "스포츠" 와 같습니다. 즉 "스포츠" 전문가란 세상에 없습니다. 
블록체인에는 수 많은 한 우물을 파야 하는 분야가 있습니다. 그 한 우물을 파는 것에 대해서 우려가 됩니다.
현재 상황에선 물이 안나올 가능성이 매우 크거든요. 

일단 요약 부터 하자면 (범) 블록체인 업계는 크게 아래와 같은 5가지로써 바라보고 있습니다.

0. 블록체인 코어 개발 (극소수TO) 
1. 대중들 대상 -  블록체인을 화폐(코인)로 보고 보관/교환/투자/투기 하는 것에 대해 집중합니다.

2. 엔터프라이즈(기업) 대상 - 블록체인을 신뢰성 있는 분산DB로써의 역할에 주목합니다.
3. 블록체인의 힘을 빌릴 수도 있고 아닐 수도 있는 응용분야들 (예: SSI 신원인증, 금융권에서 시도중인 STO)
4. 블록체인이라는 이름을 빌려서 (훔쳐서?) 블록체인 본질과 전혀 다른 일을 하는것에 확장합니다.

위의4번은 아래내용에는 없습니다. 좀 민감한 주제라...ㅎㅎ


자 이제 아래 부터는 블록체인을 공부한다라는 의미와 업계에 대해서 좀 더 디테일하게 설명을 좀 해 보겠습니다

블록체인을 공부한다? 


"블록체인"을 공부한다라는 의미를  "구조공학","아파트/건설", "부동산" 을 공부 한다로 대략 비교해보겠습니다. 

블록체인 컴퓨팅 시스템 자체를 공부한다..)
1. 아파트 건설에 필요한 구성 요소인 구조공학기술 그 자체를 깊이있게 공부하는 것을 원하는 가  
   -> 블록체인에서 모두 신뢰성 있게 동일한 데이터를 갖게 하기 위한 합의시스템을  공부한다. 
2. 아파트 건설에 필요한 다른 구성 요소인 전기배선기술에 집중하려는가  
   -> 블록체인에서 각 노드간에 서로를 탐색하고, 신뢰성 있게 서로 연결되는 방법을 공부한다. 
   -> 블록체인에서 암호/보안에 관련된 연구를 한다. 
3. 아파트를 짓는 기술 전반을 원하는 가  (건설사에 들어가려는가?) (이더리움  오픈소스 기여 및  ConsenSys, 클레이튼 등 )
   -> 각 블록체인 전체의 핵심 아키텍쳐를 공부한다. 이와중에 유니크한 체인을 발명해 본다.  (+사이드체인,서브체인등) 
4. 각 아파트 건설사들을 감사/유지/보수를 하기 위한 기반 기술에 집중 한다. 
    -> 각 블록체인의 노드들을 관리 하며, 네트워크 개선을 위한 투표에 참여한다. (DSRV등)

블록체인 시스템의 존재 의미를 공부한다.)
5. 건축이 인간에게 어떤 의미를 갖는지? 어떻게 활용되야 인간을 위하는 길이 되는지 철학적 탐색..
   -> 블록체인의 진정한 쓰임새, 회계시스템, 탈중앙 시스템의 의미와 로드맵에 대한 고민..(블록체인경제연구소)

블록체인을 이용하기 편하게 하기위한 솔루션을 공부한다..)
6. 아파트를 사고 파는 부동산업에 대해 공부하려는가? 부동산 앱을 만들고 싶은가?  
  -> 탈중앙에 의한 코인이지만, 사용하기 익숙한 중앙에 의해 통제되는 교환/거래/투자 서비스를 만든다. (빗썸, 업비트 등)
   -> 탈중앙 교환/거래/투자 서비스를 만든다 (UniSwap등) 
7. 아파트에 대한 소유권을 편하게 관리하기 위한 앱을 만들고 싶은가?
  -> 다양한 코인들을 관리/보관 할 수 있는 지갑을 만든다. (메타마스크,코인베이스지갑등) 
8. 건축을 아마추어가 하기 편하도록 도와주는 중간 도구들을 만들고 싶은가?
   -> 백엔드 개발자가 블록체인을 몰라도 기존 DB(JDBC Driver) 사용하듯이 테이블,인덱스,제약,CRUD,SQL,모니터링을 사용하여 블록체인상에 데이터를 관리하게 하기 위한 미들웨어를 만든다.(오퍼스엠) 
9. 아파트를 만들거나 사는 것은 어렵다. 그냥 빌트인 아파트를 저렴하게 제공해서 몸만 와서 월세로 살게 하자. 
   -> 블록체인을 설치하고 관리하는 것은 매우 귀찮은 일이다. 해당 부분을 클라우드에서 BaaS(BlockChain as a Service)로 서비스한다. (kaleido,Alchemy,람다256등

블록체인을 이용한 응용서비스를 공부한다..)
10. 아파트에 기반한  대출/적금 해주는 금융에 대해 공부하려는가?
   -> 블록체인 네트워크 위에서 스마트컨트랙트를 이용해 SWAP, ICO, Crowdsoursing, DeFi 시스템을 구축한다.(상당수 업체)

11. 아파트에 기반으로 ...... 을 하려는가? (NFT, DID, 메타버스, Web3, 민간SI등등)
   ->블록체인과 내부의 스마트컨트랙트를 이용해 NFT, DID, 메타버스, Web3, 민간/공공 SI시스템을 구축한다.(오픈씨등 상당수 업체) 

블록체인과 다른 기술을 융합 하기 위해 공부한다..)
12. 아파트와 병원/생태학을 융합 하길 원하는가?  (블록체인을 활용한 정부과제들)
13. 아파트와 인공지능을 융합 하길 원하는가?   (블록체인을 활용한 정부과제들)
14. 블록체인을 이용한 증권의 토큰화 (STO)
15. 블록체인을 이용한 자기 주권 신원 (SSI)


블록체인을 악용하여 한탕 하려는가?)
16. 다단계, 전세 사기 및 부동산 사기를 공부하려는가?
17. 아파트로 투기 하는 방법을 공부하려는가? 

기타)
18. 아파트를 사고 팔 때 법적 문제에 대해 공부하려는가? (변호사들) 
19. 부동산 언론? 부동산 유튜버?  등등 

위의 모든 것들이 블록체인업계와 링크되어 있습니다. 

그럼 학원은 무엇을 가르치는가?

학원의 교육과정은 위에서 9번을 하기 위함이며, 보통 아래와 같은 순서로 이루어 지는 거 같습니다.

1. 블록체인 플랫폼 하나를 선정하여 전반적인 이론들을 가르친다. (주로 이더리움)
2. 이더리움에 데이터를 넣고 빼는 것을 가르친다. 그 과정에서 이더리움의 내부언어(솔리디티)를 가르친다. with ERC21,ERC721
3. 자 이제 이더리움은 DB라고 생각하고, 해당 DB를 사용하기 위한 SDK(Web3j)를 가르친다.  |
4. 일반적인 웹프론트엔드, 웹백엔드를 가르친다. (Node.js, Spring, Html, CSS, Javascript, React 등)
5. 그 동안 배운 기술들을 가지고 솔루션을 개발해본다. 

결국 IT소프트웨어 생태계의 보편적 기술인 웹프론트엔드,백엔드가 핵심이며,
블록체인을 활용하기 위한 기본적인 기술을 양념으로 첨가 하게 됩니다.
이 기준으로 공부해야할 양은 웹프론트엔드, 웹백엔드가 압도적으로 많습니다.
결국 정해진 교육 개월수가 짧다면 모든게 겉핡기이라 어정쩡한 커리큘럼이 될 수 밖에 없습니다.
블록체인에 진심이라면 웹프론트엔드,벡엔드는 줄이고 솔리디티와 블록체인 서비스 환경에 대해서 많은 조사와 공부에 집중하는게 좋습니다. 이때 
블록체인에 대한 자기 확신이 필요 합니다.  블록체인에 대한 확신에 가득찬 사람의 이야기를 들으면 도움이 될 수 있습니다. 에르메스가 가치를 갖는 것과 포켓몬 카드가 가치를 갖는 것은 신봉자들이 있기 때문입니다. 블록체인도 그런 신봉자들이 많아 진 다면 가치를 갖게 되는 건 당연한거죠. 요즘 특히 NFT,메타버스,Web3 부분에서 그렇습니다. 

블록체인을 공부 할 것인가? 말 것인가?


1. 블록체인 그 자체를 개인적으로 공부하는 것은 매우 좋습니다. 훌륭한 분산시스템 + 컴파일러 + 보안 코드들이 오픈되어 있습니다. 하지만 역시 트레이드 오프입니다. 웹 백엔드, 프론트엔드만 해도 공부해야 할 것은 몇 만 페이지일 겁니다. 정해진 시간에 이걸 더 공부 할 수 있다고 생각한다면, 이 일을 더 잘하고 싶다면 블록체인 코어 공부하는 시간이 좀 아깝습니다. 여담인데 코테 수개월 공부 할 시간에 백엔드,프론트 공부를 하면 매우 많은 기반지식 및 실제 서비스 개발에 필요한 업무 지식을 얻을 수 있을 겁니다. 안타깝게도 블록체인  그 자체를 만드는 곳에 취업해서 그 자체를 개발 하는 일을 하게 될 가능성은 매우 가능성이 낮습니다.    

2. 블록체인을 신뢰성 있는 DB로 두고  웹프론트,백엔드를 만들고자 할 경우는 대략적인 이더리움 개념을 공부하면 됩니다. 사실 웹프런트엔드,백엔드에만 집중하는게 좋습니다. 블록체인은 블록체인 회사 입사하고 나서 필요한 부분을 공부해도 됩니다. 

3. 금융,인증등의 어떤 비지니스 로직을 해당 블록체인 내부언어로 블록체인에 넣는 것을 공부하고자 할 때는 그 부분에 대해서 집중적으로 공부해야합니다. 이것도 TO는 일반 벡엔드,프론트엔드 개발자에 비해 극히 적으며, 앞으로 더 많아질 거라 생각치도 않으며 딱히 개발자로서 메리트가 더 있는것도 아닙니다. 그리고 한방(돈)은 개발자와 무관합니다. ㅎㅎ  커리어에 대한 위험부담만 있을 수도 있습니다. 따라서 블록체인의 분산시스템 혹은 회계시스템등 활용에 관한 매력에 빠지신게 아니라면 그냥 하시던거 하는게 좋지 않을까 합니다. 이 분야는 애정이 있는자들의 놀이터가 되길 바랍니다.



아래는 제 블로그의 스폰서의 글입니다. 실제 강의 내용은 저의 의도와 상의 할 수 있습니다.


블록체인 업계와 개발, 이제 좀 감이 오시나요? 개발은 보면서 배우는 것이 아니라 직접 해봐야 하는거 아시죠? 그래서 이번에 패스트캠퍼스에서 지금 가장 핫한 블록체인 DApp 개발부터 클론코딩까지 싹 다 실습해볼 수 있는 무려 100시간 초격차 강의를 준비했다고 합니다!

블록체인 DApp 클론코딩만 배우는 것이 아니라 웹개발 기초부터 탄탄히 쌓을 수 있는 커리큘럼이라고 하네요.
1. 블록체인으로만 채운 100시간 커리큘럼
2. 한 번 구매하면 평생 소장 가능!
3. 웹개발 기초부터 탄탄히!
4. Solidity, Rust, NFT, P2E
5. DApp 개발과 클론코딩 실습
6. 40가지 기술스텍 습득
7. 질의응답 커뮤니티
8. 기술면접 기출문제집까지!

관심 있으신 분들은 패스트캠퍼스의 '한 번에 끝내는 블록체인 개발 A to Z' 강의를 통해 블록체인 개발자로 거듭나기 위한 인사이트를 얻고 실무에 활용할 수 있는 수준까지 나아가시면 좋을 것 같습니다!

▶ 지금 바로 강의 보러 가기 https://bit.ly/3xy040z

*본 포스팅은 패스트캠퍼스로부터 소정의 원고료를 지급받았으나, 작성자 본인의 경험을 토대로 주관적으로 작성한 게시물로 실제 강의 내용과는 상이할 수 있습니다.





질문 리스트는 1. 블록체인 부분  2. 소프트웨어 일반/C++/Java/Go/Javascript 가 있습니다.
블록체인 부분은 블록체인 일반,이더리움,비트코인,하이퍼레저 패브릭,EOS에 한정되어 질문됩니다.
소프트웨어 부분은 저희 플랫폼이 기본적으로 성능 지향이라 C++ (17)으로 만들어져 있으며, Client SDK 는 자바로, SmartContract 와 특정서비스는 Go로 만들어지기 때문에 소프트웨어 일반과 각 언어에 대한 질문이 포함 됩니다. (모던 C++ 에 대한 깊이있는 이해는 필요. C 가 아닙니다. Go언어 전문가라면 C++에 대해서는 걱정 하지 않아도 됩니다.) 

질문은 면접관이 면접자의 분야에 맞게 몇가지를 선택 (주로 형광펜 )하여서 그리고 면접자가 자신의 분야 또는 공부한 것에 대해 선택하여 답변하는 방식 입니다. 전체를 물어보진 않습니다. 답변은 말을 통해서 하거나, 슈도코딩등 화이트 보드에 대략적으로 그려가면서 설명 할 수 있습니다.

새로운 영역이다 보니, 모두가 능동적으로 연구하고 스스로 해야 할 것을 찾는 분위기를 만들려고 합니다. 생각보다 빠르게 만들었다면, 다음 할일을 알아서 찾아보는 능동적인 인재상을 원하며, 생각보다 지연되는것에 대한 추궁을 하진 않습니다. 빠르게 만들기 보다는, 잘 만들기 위한 노력을 지원합니다.

마지막으로 생각나는데로 작성했지만 저도 잘 모르는 것들도 있습니다. 함께 모르는것을 공부하고 , 토론하고, 공유하는 마음으로 임하시면 될 거 같습니다. 이 블록체인 분야에서의 긍정적 열의가 가장 중요합니다.



질문 리스트 (VER 1.9.6) 

블록체인 부분 

블록체인 일반
0. 블록체인은 무엇인가요? 
1. 블록체인 트릴레마(Blockchain Trilemma)란 ? 
2. 
토큰과 코인의 차이는 무엇인가요? 
3. 크립토 이코노미 or 토큰 디자인 에 대해서 생각나는데로 말해주세요.
4. 이더리움에서 ERC20 표준을 만든 이유는 무엇인가요? 
5. Double Spending 문제, Replay Attack 문제, Eclipse Attack 문제 각각 무엇인가요?
6. DEX 와 0x protocol 에 대해서 말해주세요. 
7. Fabric  vs R3 vs EEA 의 Certificate management for permissioning 관점에서 주요 차이점

비트코인 
1. 비트코인에서 UTXO 란 무엇인가요?
2. 비트코인에서 트랜잭션 검증은 어떻게 이루어 지나요? input 값 내부의 previous output 의 신뢰 여부는?
3. 비트코인에서 SPV는 불룸필터를 왜 사용 되나요? 
4. 비트코인에서 Segwit 은 무엇인가요? 
5. Mnemonic phrases 과 HD Wallet 이란?  

이더리움
1. 이더리움에서 트랜잭션 검증은 어떻게 이루어 지나요
2. 이더리움에서 Transaction 과 RawTrancation의 차이는? 
3. 이더리움에서 트랜잭션 nonce 가 필수인 이유는? 비트코인은 왜 트랜잭션 nonce 가 없나요?
4. 이더리움에서 블룸필터는 왜 사용 되나요

5. 이더리움에서 머클패트리샤트리란 무엇인가요
6. 이더리움에서 RLP는 무엇인가요? 왜 필요한가요? Protocol buffer 와는 어떤 차이가 있나요
7. 이더리움에서 플라즈마란 무엇인가요
8. 이더리움에서 노드디스커버리는 어떻게 이루어 지나요
9. 이더리움에서 주소를 public key 자체가 아니라, 이더리움 경우 20byte로 줄여서 사용하는 이유는 무엇인가요.줄여진 주소를 가지고 서명을 어떻게 확인 하나요 
10. EIP-55 체크섬이란? 
11. 이더리움에서 블록싱크 방식은 어떻게 되나요
12. Parity 에서 warp-sync 란 무엇인가요? 
13. 이더리움에서 저장용량을 줄이기 위한 prunning은 어떻게 할 수 있을까요?
14. 이더리움에서 이벤트(logs)는 어떻게 발생되며, 클라이언트에서는 어떻게 감지하나요? 
15. 이더리움에서 Receipts정보는 용도가 무엇이며 언제 prunning 되나요?

하이퍼레저 패브릭
1. 하이퍼레저 패브릭에서 트랜잭션 흐름을 설명해 주세요.
2. 하이퍼레저 패브릭에서 genesis.block 은 무엇인가요?  channel.tx 를 통해서 만들어지는 첫번째 블록과 차이점은?
3. 하이퍼레저 패브릭에서 MVCC 충돌이란 무엇이고 낙관적 잠금이란? 

4. 하이퍼레저 패브릭에서 MSP 란 무엇인가요
5. 하이퍼레저 패브릭에서 채널MSP 와 네트워크MSP는 무엇인가요? 
6. 하이퍼레저 패브릭에서 nonce 에 대해서 말해주세요.  이더리움과 차이점은??
7. 하이퍼레저 패브릭에서 Fabric-CA가 하는 역할은 무엇인가요
8. 하이퍼레저 패브릭에서 RWSet이란 무엇인가요 
9. 하이퍼레저 패브릭에서 블룸 필터는 어떻게 사용 되나요
10. 하이퍼레저 패브릭에서 ACL 은 어떤 정보를 어떻게 가져와서 적용 되나요
11. 하이퍼레저 패브릭에서 저장용량을 줄이기 위한 prunning은 어떻게 할 수 있을까요
12. 하이퍼레저 패브릭에서 Kafka 는 왜 사용 되나요? RAFT 는 왜 등장 한 걸 까요?
13. 하이퍼레저 패브릭에서 토큰은 만들 수 있나요?  FabToken 왜 만들어 졌을까요?  
14. 하이퍼레저 패브릭에서 리더피어와 앵커피어란 무엇인가요?
15. 하이퍼레저 패브릭에서 Gossip Protocol 모듈의 역할은 무엇인가요?  
16. 하이퍼레저 패브릭에서는 왜 이더리움의 RLP 직렬화를 사용하지 않을 까요?
17. 하이퍼레저 패브릭에서 이벤트는 어떻게 발생되며, 클라이언트에서는 어떻게 감지하나요? 
18. 하이퍼레저 패브릭에서 TCert 를 대체하는 Identity Mixer에 대해서 말해 주세요.  
19. 하이퍼레저 패브릭의 Fabtoken에서 UTXO를 사용해서 이중지출이 안된다는데 왜 그렇죠? 근데 UTXO를 사용하는 비트코인은 이중지출 문제를 가지고 있습니다.대략적인 차이점은? 

EOS
1.
 EOS에서 트랜잭션 수수료는? 리소스 사용량 계산 방식은?
2. EOS의 뱅커 (Bancor)알고리즘 이란? 

하이퍼레저 인디

1. 인디에서 블록체인에 저장되는 정보는 무엇인가요?
2. 인디에서 블록체인에 저장되지 않는 정보는 무엇인가요?
3. uPort 방식과의 차이점은 무엇이며, 비교해서 장,단점은 어떻게 될 까요? 

컨센서스
1. Safety(finality) & Liveness 란? 
2. CFT와 BFT의 차이는 무엇인가요 
3. POW 와 POS 의 가장 큰 차이는 무엇이라고 생각 하나요? (Safety(finality) & Liveness 관점에서)
4. PBFT 알고리즘은 무엇인가요?
5. DPOS 알고리즘은 무엇인가요?
6. 패브릭의 E-O-V 식의 합의프로세스의 장점과 단점은 무엇인가요? 


블록체인 소프트웨어 일반/C++/Java/Go 

소프트웨어 일반
1. 주로 사용하는 리팩토링 3가지를 말해 주세요.
2. 주로 사용하는 디자인 패턴 3가지에 대해 말해 주세요.  Observer 패턴의 슈도코드 구현
3. 예외에 대해서 어떻게 생각하시나요? (예외 처리에 대한 6가지 화두 참고)
4. SOLID 원칙이란?
5. introsort란? 참고 
6. Concurrent Programming Without Locks 또는 Transactional memory란? 
7. 계속 실행되는 쓰레드들에게 일을 분배하고, 각 쓰레드가 모두 완수할 때 까지 확인&기다리는 로직을 구현.  
8. 공간(메모리)를 낭비해서 성능을 높이는 방식의 예를 3가지만 들어주세요.
9. Padding, Packing on memory alignmemt 은 무엇인가요? 
10. 최적화 패턴(사전계산,지연계산,배칭,캐싱,힌팅,해싱 특수화,이중 검사,더 큰 조각 선택)이란? 참고

JAVA
1. 자바의 메서드 인자 전달 방식과 Shallow Copy / Deep Copy 에 대해 설명 해주세요.
2. 자바에서 박싱/언박싱은 무엇인가요? 
3. 자바의 HashMap 은 어떻게 동작하나요?
4 자바 리플렉션은 무엇이며, 활용처가 어떤게 있을 까요?
5. 자바로 정렬 알고리즘 슈도코딩
6. 자바에서 불필요한 객체 생성을 피하는 방법은?
7. 성능 관점에서 자바 직렬화의 문제점은? 
8. fork-join 쓰레드풀에 대해서 말해주세요.
9. 다음 서블릿 호출 코드(필터들을 거친 후 target 이 한번 exectue 됨) 의 로직적 오류는?

//// Filter 
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {

        ...  인코딩처리 OR
        ...  로깅처리 OR
        ...  인증처리

        chain.doFilter(request, response);
     
        ...  
}

//// FilterChain

public class FilterChain { 
   private List filters = new ArrayList(); 
   private Target target; 
   
   int currentFilter = 0; 

   public void addFilter(Filter filter){ 
      filters.add(filter); 
   } 

   public Filter getNextFilter(){ 
      if(currentFilter < filters.size()){ 
           return filters.get(currentFilter++); 
      } 
      return null; 
   } 
   public void doFilter(String request, String response){ 
         Filter f = getNextFillter(); 
         if(f != null){  
           f.doFilter(request,response,this);         
         } 
           
         target.execute(request,response); 
   } 

   public void setTarget(Target target){ 
      this.target = target; 
   } 
} 

10. 다음 코틀린 코드를 설명 해보세요.

private class SynchronizedLazyImpl<out T>(initializer: () -> T, lock: Any? = null) : Lazy<T>, Serializable {
    private var initializer: (() -> T)? = initializer
    @Volatile private var _value: Any? = UNINITIALIZED_VALUE
    // final field is required to enable safe publication of constructed instance
    private val lock = lock ?: this

    override val value: T
        get() {
            val _v1 = _value
            if (_v1 !== UNINITIALIZED_VALUE) {
                @Suppress("UNCHECKED_CAST")
                return _v1 as T
            }

            return synchronized(lock) {
                val _v2 = _value
                if (_v2 !== UNINITIALIZED_VALUE) {
                    @Suppress("UNCHECKED_CAST") (_v2 as T)
                } else {
                    val typedValue = initializer!!()
                    _value = typedValue
                    initializer = null
                    typedValue
                }
            }
        }

    override fun isInitialized(): Boolean = _value !== UNINITIALIZED_VALUE

    override fun toString(): String = if (isInitialized()) value.toString() else "Lazy value not initialized yet."

    private fun writeReplace(): Any = InitializedLazyImpl(value)
}


C++
1. C++ 에서 기반 클래스의 가상 소멸자가 필요한 이유는?
2. C++ 에서 임시객체가 생성되는 이유는?   
3. C++ 에서 RVO란 무엇인가요?
4. C++에서 std::move 와 std::forward 에 대해서 논해주세요
5. C++ 에서 특수멤버함수는 무엇이며, 자동생성 조건들은? 
6. C++ 에서 성능하락&향상에 관해 알아야 할 기본적인 것들은 무엇이 있을까요?
7. 단일 행을 파싱해서 공백구분 단어를 모은후, 단어와 중복갯수를 출력하는 코딩 해 주세요. (성능,메모리 최적화로)
8. 문자열을 매개변수로 받아서 특정 캐릭터가 제거된 문자열을 리턴하는 함수를 코딩 해 주세요. (성능 최적화로)
9. C++ 에서 set 과 unordered_set in STL 의 차이점은?
10. C++ 에서 람다식을 쓸 때 캡쳐리스트는 무엇이며 [&] 와 [this] 는 무엇인가요?
11. C++ 에서 auto/ override /nullptr / constexpr / atomic 키워드에 대해 간략히 설명 해 주세요.
12. C++ 에서  policy / trait  란 무엇인가요? 
13. C++ 에서 중첩 의존 이름 (nested dependent name)이란?
14. C++에서 메모리 풀링은 어떻게 구현하나요? (풀링 방식 종류 및 고정크기,가변크기에 대해서 각각 논해 주세요) 
15. C++에서 아래 코드를 설명 해 주세요. (생산자-소비자 패턴중 소비자에 해당하며, 소비자는 여기 한 군데만 존재)   

Buffer BufferPool::get_buf(){
   Buffer* buf = nullptr;
   std::unique_lock<std::mutex> ul(_mtx, std::defer_lock);

   while (buf == nullptr){
    ul.lock();
    if (_pool.empty()) _cond.wait(ul);

    if (!_pool.empty())  // 여기서 pool 이 empty 일 경우는?
    {
       buf = _pool.get();
    }
  }

   .... DO something ....
  return buf;
}

15. C++ 에서 다음 코드를 설명 해 주세요. (비동키 통신을 통해서 패킷을 읽어 오는 상황)

void Handler::recv(evpp::Buffer* msg) {
    
    std::lock_guard<std::mutex> lock(_recvMtx);
    evpp::Slice s;
    int         needLen;
    uint16_t    size;
    uint16_t    type;
    
    while (msg->length() > 0) {
        // receive message size.
        if (_recvLen < EVPP_TCP_HEADE_SIZE) {
            needLen = EVPP_TCP_HEADE_SIZE - _recvLen;
            s = msg->Next(needLen);
            std::memcpy(_recvBuf + _recvLen, s.data(), (int)s.size());
            _recvLen += (int)s.size();
        }
        
        if (_recvLen < EVPP_TCP_HEADE_SIZE) {
            return;
        }
        
        type = *(uint16_t*)_recvBuf;
        size = *(uint16_t*)(_recvBuf + 2);
        
        // receive message.
        needLen = (EVPP_TCP_HEADE_SIZE + size) - _recvLen;
        if (needLen > 0) {
            s = msg->Next(needLen);
            std::memcpy(_recvBuf + _recvLen, s.data(), (int)s.size());
            _recvLen += (int)s.size();
        }
        
        if ((uint16_t)_recvLen == (EVPP_TCP_HEADE_SIZE + size)) {
            if (type == Message::Type::message) { // general message
                _msgHandler(_remoteId, _recvBuf + EVPP_TCP_HEADE_SIZE, size);
            }
            else { // control message
                _ctrlHandler(_remoteId, type, _recvBuf + EVPP_TCP_HEADE_SIZE, size);
            }
            
            _recvLen = 0;
        }
    }
}



Golang
1. Go의 덕타이핑의 장,단점은 무엇인가요?
2. Go에서 고루틴&채널은 무엇인가요? Actor 패턴과의 차이점은? 
3. Go에서 아래 코드를 설명 해 주세요.

func GetProposal(propBytes []byte) (*peer.Proposal, error) {
	prop := &peer.Proposal{}
	err := proto.Unmarshal(propBytes, prop)
	return prop, errors.Wrap(err, "error unmarshaling Proposal")
}


4. Go에서 select 문은 어떻게 사용되나요? 아래 코드를 설명 해 주세요.

package main

import (
   "fmt"
   "time"
)

var scheduler chan string

func consuming (prompt string){
      fmt.Println("consuming 호출됨")
   select {
   case scheduler <- prompt:
      fmt.Println("이름을 입력받았습니다 : ", <- scheduler)
   case <-time.After(5 * time.Second):
      fmt.Println("시간이 지났습니다.")
   }
}

func producing (console chan string) {
   var name string
   fmt.Print("이름:")
   fmt.Scanln(&name)
   console <- name
}
func main() {
   console := make(chan string, 1)
   scheduler = make(chan string, 1)

   go func(){
      consuming(<-console)
   }()

   go producing(console)

   time.Sleep(100 * time.Second)
}
func (p *MsgPipeRW) WriteMsg(msg Msg) error {
  if atomic.LoadInt32(p.closed) == 0 {
    consumed := make(chan struct{}, 1)
    msg.Payload = &eofSignal{msg.Payload, msg.Size, consumed}
   select {
    case p.w <- msg:
      if msg.Size > 0 {
      // wait for payload read or discard
        select {
          case <-consumed:
          case <-p.closing:
        }
      }
      return nil
    case <-p.closing:
    }
  }
  return ErrPipeClosed
}

Javascript 
0. 자바스크립트에 대한 열의는? 
1. Javascript 에 대한 깊은 이해 (자바스크립트 완벽가이드 or You Don’t Know JS 시리즈 필독) 
2. browser 동작에 대한 이해 (https://d2.naver.com/helloworld/59361)  
3. built-in Javascript objects / browser objects  / HTML DOM objects 란?  
4 .Javascript 에서 객체 생성 방법은? 
5. 다음을 실행하면 무엇이 출력되는가?

name = "john";

var myObject = {

	name  : "foo",

    func1 : function(){

		 sayName =  function() {

				console.log("My name is " + this.name);     

				};

      	         sayName();  

            } 
};

myObject.func1();  // ??  


6. 다음을 실행하면 무엇이 출력되는가? (클로저, 유효범위 )

var obj = document.getElementById("input1");

var items = ["click", "keypress"];

for (var i = 0; i < items.length; i++) {

	(function() {

		obj["on" + items[i]] = function() {

			console.info("thanks for your " + items[i]);   // ??

		};

	})();

}


7.  __proto__ 와 prototype 의 차이는?
8.  ajax 와 websocket 통신의 차이는?  
9.  async await 를 사용하는 상황에 대해서 말 해주세요.
10. React & CSS 스타일링에 대한 포토폴리오 

분산시스템
1. CAP 이론이란? 
2. consistent hashing 이란 무엇인가요?
3. HAProxy 란? 
4. RAFT 는 무엇인가요? 
5. white-board architecture 는 무엇인가요?
6. Zookeeper 는 무엇이고 사용예 2가지를 말해주세요. 

컴파일러 
1. AST 와 LLVM 이란?
2. 이더리움의 solidity 언어와 다르게, go, c++을 사용하면 비결정적 문제가 생깁니다. 무슨 의미인가요?
3. 이더리움의 solidity 언어는 어떤식으로 리소스에 대한 과금을 하나요?
4. EOS에서는 어떤식으로 리소스에 대한 과금을 하나요?
5. solidity 처럼 C++이나 Go로 만든 프로그램에서 CPU,Memory,Storage 를 사용한 만큼의 지표를 구하고 싶을 때 어떻게 할 수 있을까요?

6. EOS-VM or ewasm의 동작방식을 설명해 주세요.

암호학
1.HMAC / PKI / ECDSA / ECDH는 무엇인가요
2. diffie-hellman 키 교환 알고리즘은 무엇인가요? 
(Diffie-hellman은 ECC 계열 (ECDH) 를 사용하고, 키값을 2048bit 이상으로 사용한다)
3. Logjam 취약점이란?
4. 하이퍼레저 패브릭의 ECert 란 무엇인가요? 패브릭에서는 왜 사용하나요 
5. 하이퍼레저 패브릭의 TCert 는 왜 없어졌고, 대체제는 무엇인가요 
6. ECC 개인키,공개키는 수학적으로 어떻게 만들어지며 비트코인의 secp256k1 소스를 보고 함수를 설명 해 주세요.
7. group signature vs aggregation signature vs threshold signature 의 차이점은?
8. 모네로에서 ring signature 란 무엇인가요?  
9. Fabric IDentity Mixer 에서 영지식 증명은 어떻게 사용되나요?
10. zk-SNARKs 와 zk-STARKs 와 
Schnorr proofs 의 차이점은?
11. 하이퍼레저 패브릭의 Fabtoken에서 StateDB에 UTXO들이 저장된다는데, 사용자 계정(지갑주소)은 어떻게 연결될까요? 연결되는게 가시적으로 보인다면 UTXO인데도 불구하고 개인정보에 취약하지 않을까요? 해결방법은? 
12. (BBS+ Signature : https://eprint.iacr.org/2016/663.pdf) 논문을 설명해 주세요. 
 

DB
1. ACID 란 무엇인가요? 
2. 디스크 기반 페이지 관리에 대해 다음 코드를 설명 해 주시고, 주석을 참고하여 한 라인의 코드를 넣어 주세요.

struct BufferManager {
        FILE * fp;
        int pageSize;
        int maxPageNo;
        int lastFreePageNo;
};

void init(cahr * name, int size){
    bufferManager = malloc(sizeof(BufferManager));
    bufferManager->fp = fopen(name, "rb+");
    if (bufferManager->fp == NULL) {
		createF(name,0644);
        bufferManager->fp = fopen(name, "rb+");
    }
    bufferManager->pageSize = size;
    bufferManager->maxPageNo = 0;
    bufferManager->lastFreePageNo = -1;
}


BOOL readPage(int pageNo, BYTE * buffer) {
    int ret;
    fseek(bufferManager->fp, pageNo * bufferManager->pageSize, SEEK_SET);
    ret = (int) fread(buffer, sizeof(BYTE), bufferManager->pageSize, bufferManager->fp);
    rewind(bufferManager->fp);
    if (ret > 0 ) return TRUE;
	else return FALSE;
}

BOOL writePage(int pageNo, BYTE * buffer) {
   //생략
}

int newPage(){
 int freePageNo, nextPageNo, offset;
 if(bufferManager->lastFreePageNo == -1 ){
    freePageNo = ++(bufferManager->maxPageNo);
 }
 else {
    freePageNo = bufferManager->lastFreePageNo;
    offset= freePageNo * bufferManager->pageSize;
    fseek(bufferManager->fp, offset, SEEK_SET);
    fread( & nextPageNo, sizeof(int), 1, bufferManager->fp);
    if (nextPageNo == -1) 
      bufferMananger->lastFreePageNo = -1;
    else 
      /* 여기에 들어 갈 한 라인의 코드는?? */
 }
return freePageNo;
}

void freePage(int pageNo) {
   int offset;
   offset = pageNo * bufferManager->pageSize;
   fwrite(& (bufferManager->lastFreePageNo), sizeof(int), 1, bufferManager->fp);
   /* 여기에 들어 갈 한 라인의 코드는?? */

}


3. 트랜잭션에서  Two Phase Commit 이란 무엇인가요?
4. 저널링 / WAL (write-ahead logging) 은 무엇인가요?

5. Red&Black tree & B tree & Skip lists 자료구조를 비교해주세요.

6. LSM (log structed merge tree)은 대략 무엇인가요?
7. leveldb 와 redis 의 특징 및 차이점은?

MQ
1. Kafka 의 브로커,토픽,파티션은 무엇인가요?
2. Kafka 에서 acks 옵션은 무엇인가요? acks=0,1,2 각각에 대해서 말해주세요.
3. Kafka와 RabbitMQ의 차이점은?

네트워킹 / 소켓
1. 소위 응용레벨에서 RPC 방식과 스트리밍 방식의 차이점은 무엇인가요? 
2. 멀티쓰레드/Select/Java NIO/ ePoll /IOCP 방식의 소켓통신 차이점을 아는 만큼 말해 주세요. 
3. 소켓통신시 성능 향상을 위해 할 수 있는 것들은 무엇들이 있나요. 최대한 많이 말해주세요.
4. 소켓통신에서 타임아웃은 무엇이고 Nagle 알고리즘은 무엇인가요?
5. 소켓통신상 SSL/TLS flow를 간략히 말해주세요
6. React 방식과 Proact 방식의 차이점은 무엇인가요?  (in POSA2) 

Reactor Event Handling Allows event-driven applications to demultiplex and dispatch service requests that are delivered to an application from one or more clients.
Proactor Event Handling Allows event-driven applications to efficiently demultiplex and dispatch service requests triggered by the completion of asynchronous operations, to achieve the performance benefits of concurrency without incurring certain of its liabilities.

7. NAT 와 UPnP 는 무엇인가요?
8. gRPC (C++) 의 동기.비동기 구현에 대해 말해 주십시요.

인프라 & 데브옵스 아키텍쳐 

애자일 관리 기법 (*JIRA)
프로덕트 & 형상 관리 (Bitbucket) 
도커 + 쿠버네이트등 컨테이너화
빌드자동화 (* Bamboo ) 
테스트자동화  (* 유닛 테스트 gTest 연구) 
이슈등록자동화 (*JIRA)
정보 공유 위키 관리 (confluence)
정보 공유 채팅 관리 (slack) 
디플로이 자동화
서비스 관리 자동화  
네트워킹 인프라에 대한 이해 
수직 / 수평 분활에 대한 이해 
무정지 시스템 이해 및 구축 (무정지 리소스 증축등) 
AWS 매니지먼트 



사족)

오픈북 면접은, 면접자가 어떤 회사,학교,전공 출신인지 상관없이 현재 실력으로 판단하며, 나이,경력,성별,국적(외국인 환영) 등 이런 요소들은 평가에 영향을 미치지 않기 위해 노력 하고 있습니다. 면접시 토론을 잘하는게 최우선 순위입니다. 물론 완전할 수 없음은 인정하고 있습니다. 신뢰비용을 다시 정산하기 위한 최소한의 노력은 하려고 합니다.

우리가 면접을 볼 때를 생각해보면, 황당한 질문이 나올 수도 있고 - 모든 지식을 머리속에 두고 있지 않기 때문에 - 운에 따라서 모르는 질문만 나올 수도 있습니다. 이에 따라 우리는 사측에서 필요한 지식이 무엇인지 구체적으로 오픈하고, 이 중 선택하여 질문을 하거나, 면접자 본인이 자신이 잘 하는 것을 선택해서 답변을 하는게 서로 유리 할 거라 판단 하였습니다. 사측은 이를 통해서라도 준비된 인재, 블록체인 분야에 집중하는 인재를 구인 할 수 있을거 같습니다.

질문 리스트들에 대한 모든 것을 세부적으로 기억하고 있어야 채용한다는 의미는 아닙니다. 세상은 변하여서 머리속에 모든 것을 담아 두는 시대는 아니라고 생각합니다. 다만 자신의 관심 분야에 대한 Why? 는 기억하고 있어야하며 무엇을 어떻게 찾아야 하는지에 대한 나침판은 필요하겠지요. 저도 모르는 100% 완벽한 답을 원하는것 보다는 공부는 하였는지, 어떤 생각을 가지고 있는지 어떻게 이해하고 있는지, 모르는 것을 명확히 표현하는지에 대한 검토를 하려 합니다.
 

 


이름에서 느껴지듯이 Economy of Things (이하 EoT) 는 IoT 의 인프라를 이용해서 경제 활동에 이용한다는 개념인데, 블록체인과는 어떤 관계일까? 이것을 이해 하기 위해 먼저 사물인터넷과 블록체인에 대해 간단히 알아보자. 

IoT (사물인터넷)

사물인터넷이란 각 사물들이 인터넷으로 연결 (직접 연결되지 않아도 된다. 보통 게이트웨이등을 통해서 연결됨) 되는 현상을 말하는데, 스마트폰의 확산 + 강력한 센서 + 사물로 부터 나온 빅데이터를 저장 할 수 있는 저장공간의 발전 및 기계 학습을 통한 추가정보생산이라는 저변에 의해 탄생 된 개념이다.
홈의 각 가전들도 사물이 될 수 있고, 공장의 많은 기계들도 사물이 될 수 있으며, 빌딩도 마찬가지이다. 만약 홈,공장,빌딩의 사물들에 대한 에너지를 효율적으로 활용하기 위해 그것들을 인터넷으로 연결해서 인간의 개입 없이 서로 소통하게 하고, 스마트폰을 통해서 인간과 소통하게 한다면 그런 부분에서 여러가지 BM( BEMS,HEMS,FEMS base on IoT) 이 탄생 할 수 있게 된다. 


블록체인

블록체인은 데이터를 분산해서 처리를 하되, 그 데이터에 대한 신뢰를 개인간 서로 믿을 수 있게 만드는 기술이라고 볼 수 있다. (컴퓨터공학적으로 해쉬,비대칭암호화,링크드리스트,P2P 등의 기술을 기반으로한 쿨한 아이디어를 통해 완성한다.) 상호 신뢰를 위해서 기존에는 위임된 기관(은행,부동산중개소,페이팔,마스터카드 등등)를 통해 거래를 해야 했던 구조를 벗어나, (은행등을 유지하기 위한 비용을 없애고) 각자(이 글을 보고 있는 당신)가 해당 기관이 되어 분산된 형태의 신뢰 구축 시스템을 만들기 위한 기술 토대이다. 주체가 있는 프라이빗 블록체인이 있으며 완전히 일반 개인에게 분산 시키는 것을 퍼블릭 블록체인이라고 한다. 주요 특징은 모든 거래에 대한 기록을 담은 전자장부를 모든 개인(정확히는 마이닝 하는 노드)이 공동 소유하여, 거래에 대한 신뢰를 구축 한다는 점이다. 여기서 어느 기간동안의 기록을 담은 장부를 블록이라고 칭하며, 그 다음 기간의 장부들과 서로 연결되어 있기 때문에 블록체인이라고 한다. 

퍼블릭 or 프라이빗 블록체인과 사물인터넷이 결합된 세상을 꿈꿔보는 소프트웨어 개발자로써 지금 당장은 기술에는 설레지만 사회에 초래되는결과에 대해서는 부정적인 입장이다. 신뢰 비용은 낮추되, 개인간의 균형은 기울어지게 될 까봐 우려된다. 많은 지식 공유/토론이 필요하다. 당장은 퍼블릭 블록체인에 대해서는 폐해 및 구현 상 문제점 이 많아 보이고 그렇다고 프라이빗으로 하자니 과연 그게 블록체인 철학에 부합하는 것일까? 하는 의문도 있다.



Economy of Things ??

이제 두가지 개념에 대한 설명을 들었으니, 이걋을 잘 합쳐서 어떤 새로운 개념을 만들 수 있지 않을까 생각하는 사람이 생겨 날 것이라고 추측하는것은 어렵지 않다. 여러분도 지금 바로 생각해 보라.

"사물들 간에 인간의 개입없이 블록체인을 통해 신뢰 기반의 거래를 할 수 있는 인프라" 

이게 떠올랐을 것이며, 나도 마찬가지이다. 이제 앞으로의 글을 통해 우리가 떠올렸을 개념이 다른 사람들도 떠올렸을 개념인지 확인 해 보는 시간을 갖도록 하자. 


실제 말해지고 있는 Economy of Things 들 


IBM

구글을 통해  "Economy of Things" 를 검색해보면 IBM The Economy of Things 이 먼저 나오는데, 싸이트에서 제공하는 PDF의 내용을 살펴보면, 기존 IoT에 의해 조성된 인프라를 경제활동에 참여 시킨다는 아이디어이다. 블록체인은 따로 언급되지 않고 있다. 


Elavon

두번째는 Elavon사 (2011년에 창립된 신용카드 결재 처리 시스템 개발사. 북미 3대 업체의 하나로 매년 처리하는 크레딧 카드 결제 금액은 2000억 달러를 초과하고 있다.) 에서 소개하는 PDF 를 살펴보자. EoT를 실현되는 여정으로 다음과 같이 소개하고 있다.

1. 스마트 기기 출시&확산 (영국가정에 평균 18개의 스마트 디바이스가 있는것으로 조사 되었다)
2. 기기와 경제와의 콜라보레이션 (사고 파는 대상이 넓어지며 행위가 자율적,지능적으로 변화 한다)
3. 신뢰 할 수 있는 거래에 대한 위임 (자신의 회사가 필요하다는 야그~, 하지만 블록체인이라면? 필요 없지 않을까?)
4. 거래 빅데이터 기반의 인공지능 학습에 의한 예측을 통한 진보 

역시 블록체인은 따로 언급되지 않고 있다. 

그리고 다음과 같은 고민을 하고 있다.


Nasdaq 홈페이지 (What Is The Economy of Things?)

nasdaq 홈페이지에서는 위의 IBM의 사례를 들어 설명하고 있다. 즉 IoT 가 물리세계를 디지탈화(digitizing)하는 것이라면, EoT 는 물리세계를 유동화(liquification) 하는 것이다. 

또한 과연 누가 이득을 볼 것인가에 대한 질문을 던지고 있다. 단지 소형칩 제조사?  :-) 


Weeve  https://tokensale.weeve.network/


마지막으로 내가 관심가지고 보고있는 weeve 사다. 이 회사에서는 드디어 블록체인이 언급되었다.
EoT 를 이해하는 3단계 방식  에서는 위에서 설명한 것들을 말하고 있다. 따라서 진부하다.
Weeve 가 EoT 를 말하는 방식  에서는 자신들의 플랫폼을 설명하고 있다.


마지막으로 이회사가 출판한 다음 논문을 소개 해 드린다. 블록체인과 IoT의 만남이다.

https://prismic-io.s3.amazonaws.com/test-eq%2F1a817904-e7fa-4001-b3e0-ec9a20b00c52_whitepaper_technology.pdf


아이디어는 이렇다.


-- 작성중 -- 


한글,한국어 공부했다고 멋진 소설이 안나오듯이, 해쉬,비대칭암호화,링크드리스트 ,p2p를 학생때 이해했다고 블록체인/비트코인등의 멋진 알고리즘,아이디어를 만틀 수 있는 것은 아니다. "천지차이"

컴퓨팅파워, (특히) 저장용량, 네트워크의 엄청난 발전으로 그 동안 알고있었던 기술,아이디어를 확장,발전시킨 빅데이터,딥러닝,사물인터넷(특히 스마트폰 같은 개인화 네트워크 덕분) 등은 모두 "블럭체인" 의 탄생과 궤를 같이 하고 있다고 볼 수 있다.



"규제 받지 않는 인간(민간)의 무한한 탐욕"


신뢰의 사회적 비용을 낮추는 탈중앙화 때문에 역설적이게도 민간 자본 괴물이 나타날 수도 있을 거란 우려가 드는 것은 왜 일까.. 즉 사회적 비용은 낮추지만, 균형은 더욱 무너트리는..앞으로 누군가 (or 단체) 는 이 탐욕을 위해서 계속 시도 할 것인데, 누군가(or 단체)는 이 탐욕에 뒤떨어져서 손해를 보는 세상이 온다면 참 마음 아플것 같다.


요즘 방송에 나오는 유시민 작가님의 말하는 것에서의 몇가지 기술 스펙적 오류 (있다) 는 저 주장에 크게 흠이 잡히지 않는다. 유시민 작가는 컴공/역사/경제/인문학적인 기반하에 주장을 펼치기 때문이기 때문이다. 따라서 " 좀 더 제대로 공부했으면 " 라고 유시민작가에 비판을 하는 사람들은 공염불에 그칠 것이다. 저런 논쟁은 좀 더 제대로 비트코인 스펙을 공부한 사람이라도 찬/반, 흑/백을 알 수 있는 문제가 아니기 때문이다. 컴퓨터 공학적으로의 불록체인 이해와 인문학/경제학 적으로의 블록체인 이해 양쪽이 합쳐져야만 하는 문제인데다가 양쪽을 합쳐서 잘 이해하고 있다고 해도 정답을 맞출 수 없는 문제이기도 하기 때문이다. 따라서 유시민 작가의 논리/의견을 반대 하는 사람들은 좀 비겁해 보이는 "좀 더 제대로 공부 했으면" 을 대신해서 그냥 자신들의 논리로 반박하는게 좋지 않을까 한다.

이제 논점을 바꾸어 보자.

지금 당장은 저런 투기성 문제에 힘을 실어줘서, 한 단락은 정리 하는게 좋지 않을까 한다. 지금 현실적으로 큰 문제가 있는데 토론의 방향이 그냥 지나쳐 줄 수는 없을 것이다. (저런 토론 자체를 자신의 코인가격이 떨어 질까봐 싫어하는 일부 투기 코인꾼들에겐 미안하지만) 투기성 및 기술적 한계등 뻔하게 있는 문제에 대해 빨리 썩은 가지는 처 내고 보다 발전적인 논의로 나아가길 기대한다. 지금 당장 혹은 몇년 내로 블록체인의 응용 제품들이 나오고 활성화 되는 시대가 되지 않는다고 생각 된다. 그 과정에서의 이런 잡음은 당연히 필요하다고 보며, 너무 서두를 필요도 없으며 차분히 준비하면 된다. 유시민 작가님과 지금 상황에서 대적(?) 하기 위해서는 그 논점에서는 님 말씀이 옳습니다.라고 인정하자. 그리고 이제 그럼 비트코인의 한계를 벗어난 다른 시스템들의 효용성과 퍼블릭 or 국가적 프라이빗 블록체인 (유시민 작가 의견으로는 이게 퍼블릭. 공공재니깐.) 블록체인과 사물인터넷과의 접점 및 그런 탈중앙기반 신뢰 시스템이 4차혁명에서의 어떤 역할을 할 수 있는지, 국가 경쟁력과는 어떤 상관관계가 있을 것인가에 대한 심도있는 토론을 해 가도록 하는 방향으로 가닥을 잡아야 할 것이다.


개인적으로 퍼블릭 or 프라이빗 블록체인과 사물인터넷이 결합된 세상을 꿈꿔보는 소프트웨어 개발자로써 지금 당장은 기술에 대해서는 설레지만 사회에 초래되는 결과에 대해서는 부정적인 입장이다. 신뢰 비용은 낮추되, 개인간의 균형은 기울어지게 될 까봐 우려된다. 많은 지식 공유/토론이 필요하다. 당장은 퍼블릭 블록체인에는 폐해 및 구현 상 문제점 이 많아 보이고 그렇다고 프라이빗으로 하자니 과연 그게 블록체인 철학에 부합하는 것일까? 하는 의문도 있다.





+ Recent posts