카테고리 없음

--blockchain developer의 자격요건--

JaeHyunShin 2020. 1. 24. 00:48

1. 비트코인 코어 기반

비트코인 외에 수많은 알트코인이 비트코인 코어를 기반으로 하고 있습니다. 단순히 말해서 소스가 C++라는 개발언어로 되어 있으면

비트코인 코어 기반이라고 할 정도입니다. 아니면 스마트컨트랙트를 지원하지 못하는 수많은 메인넷이 비트코인 코어 기반이라고해도

과언이 아닐 정도이죠. 

비트코인쪽에도 스마트컨트랙트를 구현하려는 시도가 있기는 하지만 이더리움이나 EOS 등에 비하여 코어나 블록 구조 자체에서 지원하는

구조가 아니기 때문에 좀 더 두고봐야하지 않나하는 생각입니다. 

스마트컨트랙트을 지원하지 않아도 되는 메인넷이면 대부분 C++을 통하여 비트코인 코어 기반으로 개발을 진행할 것입니다.

 

- C++(씨플플 또는 씨플러스플러스)

C++는 객체지향이며 구조적 프로그래밍이 가능한 개발 언어입니다. 오래된 만큼 수많은 자료와 라이브러리가 존재합니다.

아시다시피 비트코인은 알고리즘, 암호학, 자료구조, 네트워크 기술 등 수많은 오픈 소스 기반 기술이 포함되어 무척 방대합니다. 

혼자서 이 모든 기술과 소스를 분석하고 스터디한다면 무척 오랜 시간이 소요되겠죠. 

따라서 가장 중요하고 핵심적인 기술만을 나열하여 블록체인 개발자되기 위해 필수적인 기술을 제시하고자 합니다. 

 

- 필수적으로 이해가 필요한 기술

자료 구조 : 트리(이진트리, 머클트리), UTXO

알고리즘 : 비잔티움 장군 문제, 작업 증명(PoW), 타임스탬프

암호학 : 대칭키/비대칭키(공개키, 비밀키), SHA 해시함수(1, 2(256), 3(Keccak)), 타원곡선 전자서명(ECDSA)

네트워크 : TCP/IP, RPC(알피시), P2P(피투피), 마스터노드

보안 : SSL(에스에스엘)

DB : LevelDB(레벨디비, 비트코인 초기에는 버클리DB 사용)

 

- C와 C++

C와 C++의 차이는 객체지향 개발의 유무의 차이이지만 생산성이나 학습의 난이도면에서 확실히 C++이 더 어렵고 성능도 뛰어나다고 할 수 있습니다. 

문제는 C를 배우고 C++을 배우는 것과 바로 C++을 배우는 것의 차이입니다. 

이것은 정답이 없지만 쉽게 개발언어에 친숙해지기 위해서는 C부터 시작하는 것이 낫습니다. 

하지만 구조적인 프로그래밍과 객체 지향 프로그래밍을 체계적으로 공부하고자 마음 먹었다면 바로 C++에 도전해도 좋습니다.

 

- QT(큐티)

지갑(wallet)의 경우 운영체제에 따라 각각의 프로그램을 따로 개발한다면 개발력의 낭비가 따르죠. 

이 중 화면 인터페이스(UI/UX)을 공통으로 개발하는데 사용하는 것이 QT 입니다. 

윈도우, 리눅스, 맥을 지원하죠. 

QT는 암호화폐 지갑 외에도 각종 멀티미디어, 모바일 등 사용하는 분야가 다양합니다. 

QT지갑의 디자인을 바꾸려면 QT 소스를 고쳐야하죠. 

 

- 웹앱(WebApp)

PC 환경은 위와 같이 화면 인터페이스를 QT로 개발할 수 있는데 모바일 환경에는 웹 방식 개발 기법을 많이 사용합니다. 

모바일 지갑이 웹 브라우저로 동작하는 것이죠. 웹 서버에 접속하여 자료를 받아오는 구조인데 그러한 앱을 웹앱이라고 합니다. 

보통 웹 개발과 같이 웹앱에서도 HTML, CSS, 자바스크립트, PHP(피에이치피) 등을 개발에 사용합니다.

 

 

2. 이더리움 코어 기반

EVM 기반

 

- Go(고, Golang)

구글에서 만들어 배포한 개발 언어로 이더리움 블록체인 인터페이스 기술인 geth(게쓰)가 Go로 개발 되었습니다. 

Go가 최근 다양하게 많이 사용되고 있는데 마이닝 풀 개발에도 사용되고 있습니다.

 

- 파이썬(Python)

테스트나 머신러닝 등에 많이 사용되는 파이썬은 geth와 같이 파이썬 이더리움에도 사용되고 있습니다. 

 

- 이더리움 이해에 필요한 기술

자료 구조 :트리(패르리샤머클트리), 어카운트 시스템, DAG, 토큰

알고리즘 : 지분 증명(PoS), 스마트컨트랙트, 오프체인/사이드체인/플라즈마

암호학 : Ethash

네트워크 : EVM

보안 : KYC/AML

DB : 샤딩

 

 

3. 이더리움 DApp 개발

- 솔리디티(Solidity)

이더리움에서 스마트컨트랙트를 개발하기 위한 언어입니다. 토큰 개발에도 사용합니다. 

스마트컨트랙트는 계약을 자동실행하는 구조로 1997년 닉 자보(Nick Szabo)가 처음 제안하였습니다. 

스마트컨트랙트 개발 관리에는 현재는 트러플 프레임워크를 많이 사용합니다. 

라이브러리로는 오픈제플린을 많이 사용합니다. 

특히 토큰 개발에서 SafeMath는 필수적이죠. 

 

- 가나슈(Ganache) 외 테스트용 블록체인

이더리움 개발 테스트에 사용할 수 있는 개인용(프라이빗) 블록체인입니다. 

이더리움 메인넷에서 테스트를 할 수 없으므로 가나슈 같은 블록체인을 이용합니다. 

또는 트러플 디벨로퍼나 이더리움 테스트넷을 이용할 수도 있습니다. 

아니면 메타마스크에서 Ropsten 테스트넷 등을 이용할 수도 있습니다. 

 

- 자바스크립트

Node.js(노드제이에스)

이더리움 DApp(디앱 또는 댑) 개발에서 절반 이상은 웹개발이라고 생각합니다. 

따라서 DApp 개발에는 웹개발자들이 유리하다고 봅니다. 

특히 자바에서 Node.js로 웹개발 트렌드가 바뀐 현재는 Node.js를 아는 것이 도움이 될 것입니다. 

자바에서 나온 것이 자바스크립트지만 Node.js의 경우 완전히 독립된 언어로 간주될 만큼 

웹개발에서 특별히 생산성이 높습니다. 

 

- DB

웹개발에 사용되는 DB는 MySQL(마이에스큐엘)이나 마리아DB, MongoDB(몽고디비) 등 수많은 RDBMS 중에서 하나를 정해서 

숙달되는게 좋습니다. 오픈소스인 마리아DB가 즐겨 쓰이는데 개발 의뢰를 받을 경우 DB가 정해지는

경우도 있습니다. 이미 사용되는 DB가 있는 경우죠. 

상용인 경우 오라클, MS-SQL, DB2 등이 있습니다. 

DB 변환이 필요한 경우도 있으므로 확실히 공부가 필요합니다. 

물론 SQL 쿼리를 작성하는 것도 꾸준한 학습이 필요하죠. 

(NoSQL을 사용한다고해도)

 

- OS

리눅스를 대부분 서버용 OS로 많이 사용하는데 개인은 그 중 우분투를 많이 사용합니다. 

하지만 기업 입장에서는 우분투보다는 CentOS(센트오에스) 같은 것을 더 선호합니다. 

버전업은 느리지만 안정적이기 때문입니다. 

또한 레드햇 계열이라는 인지도도 작용합니다. 

혹시 외주 의뢰를 받을 때 그점을 고려하시기 바랍니다. 

 

 

4. 그 외

추가로 아래와 같은 블록체인이 있는데 EOS(이오에스)와 하이퍼레저 패브릭의 경우 사설 교육 과정도 있습니다.

각각의 블록체인에도 스마트컨트랙트가 포함되는 경우가 있으므로 그쪽을 학습하셔도 됩니다. 

이더리움 기반의 블록체인은 제외하였습니다.  

보통 EVM을 기반으로 하기 때문에 이더리움 개발과 큰 차이는 없을 것입니다. 

 

- EOS

확장성을 높인 블록체인

 

- IBM 하이퍼레저 패브릭

기업용 블록체인

 

- R3 코다

금융쪽 블록체인

 

 

개인의견으로 정리한 것이기 때문에 혹시 수정이나 추가할 부분이 있다면 알려주시기 바랍니다. 

 

감사합니다.