[가상화폐] 이더리움이 go를 사용하는 이유(개인적인 생각)

처음 이더리움을 분석하기 시작했을때,
익숙한 언어인 cpp로 개발된 클라이언트를 선택하지 않은 이유는, go 같은 상위레벨 언어에 대한 호기심이였습니다.

그리고, 어느정도 분석이 진행되면서
이래서 geth가 major client가 되었구나
cpp였다면 이런부분이 까다로웠겠구나
라는 느낌을 받게 되었습니다.

1 go루틴 + 익명함수
정확히는 아니지만 쓰레드와 개념이 비슷하니까
cpp였다면 callback함수를 작성하고 posix라이브러리를 포함시켜 쓰레드를 시작했을텐데, go에서는 딱 한줄이죠
go + 익명함수.

2 go 루틴간 동기통신인 channel과 null interface
cpp였다면 동기화 객체를 생성하거나, 이벤트를 생성/등록해서 핸들러에서 처리할텐데, 데이터가 상대 루틴의 로컬에 있다면 읽기가 까다로워집니다.

go채널은 빈 인터페이스 타입으로 선언해서 모든 타입을 보낼수 있죠. 메소드가 없는 빈 인터페이스는 결국 모든 오브젝트를 표현가능한 void 포인터처럼 사용가능하니까요.
더군다나 select문 안에서 채널을 읽기가 블록킹형태로 동작하기 때문에 이벤트 핸들러를 예쁘게 짤수 있습니다.

3 채널을 사용한 구독시스템의 쉬운 구현
이더리움은 Subscribe와 feed로 구성된 구독시스템을 활용하는데, 이때 채널이 강력한 힘을 발휘합니다.

너의 이벤트를 내가 만든 이 채널을 통해 받고싶어
이벤트가 발생하면 이채널로 데이터를 줄래? 라고 구독을 하면서 채널을 전달합니다.
그리고나서 이제 go루틴에서 채널을 읽기만 하면 이벤트 핸들러 작성 끝. 어마어마하기 간편하네요.

구독 함수를 오픈하는 입장에서도 채널을 수신하면 편합니다. 이벤트가 발생하면 feed함수를 사용하게 되고,feed함수내에서 고루틴을 활용해 나에게 등록된 채널들에게 데이터를 쓰면 상대방의 수신 문제로 특정 채널에 블록킹이 일어나더라도 다른 채널들은 문제없이 받을수 있죠.

cpp였으면 서로다른 이벤트로 처리를 하던,
논 블록킹 모드로 처리를 하고 수신여부를 확인하고..
암튼 꽤나 복잡해질텐데 go로 구현하니 뭔가 깔끔한 느낌이 납니다.

4 defer로 함수 소멸자 역할하기
함수가 중간에 문제가 생길경우, 혹은 종료되었을때
defer루틴안에서 여러가지 리소스를 정리할수 있습니다.
물론 cpp만큼 컴팩트하게 관리하진 못하겠지만
이더리움이 메모리를 그렇게 타이트하게 매니지해야하는
속성의 프로젝트는 아니니까요

5 다양한 패키지
devp2p라이브러리나 cmd line interface,
rlpxe등등 많은 패키지가 존재합니다.
패키지가 많다는건 모듈화가 그만큼 잘된다는 뜻일테고요
효율적으로 코딩이 가능하게 될것 같습니다.

마치며,
이더리움 덕분에 좋은 언어를 하나더 배우게 되어
참 좋습니다. 다행히 텐서플로도 go를 지원하니까
업무연관성도 아예 없진 않겠지요.
(이건 너무 어거지네요ㅎㅎ)

0
0
이 글을 페이스북으로 퍼가기 이 글을 트위터로 퍼가기 이 글을 카카오스토리로 퍼가기 이 글을 밴드로 퍼가기

블록체인 기술

번호 제목 글쓴이 날짜 조회수
181 채굴 ░░░░❤️NEW 오 피 출 장❤️░░░░✅전원 20 대❤️여대생 VIP 코스✅100% 리얼 실 사 오피출장2 03-08 193
180 가상화폐 ░░░░❤️NEW 오 피 출 장❤️░░░░✅전원 20 대❤️여대생 VIP 코스✅100% 리얼 실 사 오피출장2 03-08 222
179 정보 ░░░░❤️NEW 오 피 출 장❤️░░░░✅전원 20 대❤️여대생 VIP 코스✅100% 리얼 실 사 오피출장2 03-08 200
178 정보 KEEP!T Column: 블록체인 진영 시리즈(1) 제도권의 시도들 icon Work4Block 04-07 3,894
177 정보 KEEP!T Column: 구글 이후의 시대 - 조지 길더 icon Work4Block 03-15 4,233
176 정보 KEEP!T promotion: 광고에 블록체인의 핵심적 가치를 붙이면 생기는 일 icon Work4Block 03-07 3,459
175 정보 [인터체인 시리즈 I]코스모스 네트워크 I - 데이터 상호운용 방법과 텐더민트 합의 알고리듬 icon Work4Block 01-25 4,840
174 가상화폐 (코인비평) 라인 링크(Link)의 BTC 보상정책과 봉이 김선달 icon Work4Block 01-15 3,277
173 정보 KEEP!T History: 블록체인史 (최종) 블록체인의 새 패러다임을 제시한 이더리움 icon Work4Block 01-10 4,124
172 가상화폐 [eosDAC] 크리머 : 커스토디안 출마 선언 및 당선 공약 + eosDAC의 가치 상승 전략 icon Work4Block 01-02 3,516
171 가상화폐 (코인비평) 퍼블리토(Publyto)....스팀에 필요한 것이 이런 것이 아니었을까? icon Work4Block 01-02 2,927
170 가상화폐 [EOS는 도태될 것인가? 도약할 것인가?] 1편 : 기존 기업 블록체인(댑) vs EOS 블록체인(댑) icon Work4Block 12-26 4,538
169 가상화폐 (코인비평) 스팀(steem)의 진정한 호재 ; 구글 애드센스 도입 icon Work4Block 12-13 5,333
168 가상화폐 [EOS] 댄라리머 : 열심히 보단 똑똑하게 일해라. (CPU를 위한 효율적인 컨트랙트 개발)] (번역)) icon Work4Block 12-13 3,798
167 가상화폐 KEEP!T column: 하이퍼레저 패브릭(Hyperledger Fabric)의 거래 흐름 icon Work4Block 12-13 3,665
166 가상화폐 [번역+사견] 개발자들이 EOS를 사용해야 하는 이유 5가지. + 개발자 FAQ icon Work4Block 12-11 3,562
165 가상화폐 [CODEOS] 새롭게 배포된 EOSIO v1.5.0을 소개합니다. icon Work4Block 12-10 3,251
164 정보 블록체인은 살아날수 있는가 -ㅅ- icon Work4Block 12-10 3,277
163 정보 KEEP!T Column: UN SDG와 블록체인 icon Work4Block 12-06 3,605
162 가상화폐 EOS Snapshot 기능 소개 icon Work4Block 11-27 3,906