개발자를 위한 Loom SDK: 번개처럼 빠른 DApp 성능을 위한 인덱싱 계층의 사용

Loom Network Korean
Loom Network Korean
7 min readJun 6, 2018
Mysql, Postgre, ElasticSearch 인덱싱

이 글은 Matthew Campbell가 쓴 Loom SDK for Developers: Using an Indexing Layer for Lightning-Fast DApp Performance를 번역한 글입니다. 오역이 있으면 Private Note 기능으로 알려주세요!

DelegateCall.com

많은 분들이 우리에게 어떻게 DelegateCall이나 Steemit처럼 성능이 좋은 소셜 미디어 사이트를 블록체인 위에 만들 수 있냐고 묻습니다.

Steemit은 Reddit과 Medium의 기능들을 제공하는 블록체인 상의 첫 소셜 네트워크이지요. DelegateCall을 계획할 때, 우리는 Steemit에서 많은 걸 배우며 나아갔습니다.

사용자의 관점에서 가장 중요한 것 중 하나는, 빠르고 인터랙티브한 프론트엔드입니다. 검색, 태그, 알림 같은 기능과 함께 말이지요. 이들은 이더리움 위의 솔리디티로는 달성하기 어려울 겁니다. 불가능하지 않다면 말이지요.

그래서 이것이, 우리가 DelegateCall에서 보조적인 오프체인 인덱싱 계층을 만들기로 한 궁극적인 이유입니다.

블록체인에서 검색하기 — DelegateCall 인터페이스

인덱싱이 뭔가요?

인덱싱은 블록체인의 데이터를 더 성능이 좋은 보조 데이터베이스에 저장하는 것입니다. 스마트 컨트랙트에서 이벤트를 받아, 별도의 큐(Queue)에 넣는 것이지요. 그리고서 해당 이벤트를 감지해 다양한 데이터베이스에 삽입하도록 하는 리스너를 이 큐에 만들어 놓습니다. 이런 방식으로, 웹페이지에 보여줄 데이터의 캐시(Cached) 버전을 사용할 수 있습니다. 향후에는, 보조 인덱스에 증명(Proof) 데이터를 저장해 경량 블록체인 클라이언트가 이를 검증할 수도 있을 겁니다.

Etherscan & Infura

이더리움 메인넷에서도 이렇게 할 수 있으며, Etherscan이 가장 좋은 예시입니다. 이더스캔은 누구든 볼 수 있도록 이더리움의 모든 트랜잭션과 블록을 인덱싱하는 사이트입니다. 이를 사용하면, 블록체인에 질의를 하는 것이 아니라 사이트의 캐시를 보는 것입니다.

이더스캔 인터페이스

Infura가 두 번째 예시입니다. 이는 전체 이더리움 블록체인을 캐싱하는 완전한 Web3 API입니다. 많은 개발자들이 블록체인과 직접 상호작용을 하지 않아도 데이터를 읽을 수 있도록 웹 페이지에서 이를 사용합니다.

코드 예시: 이벤트 내보내기

이제, 바로 코드로 들어가 봅시다.

참고: 이 글은 튜토리얼이라기보다는 기능에 대한 전체적인 개요입니다. 따라서 한 줄 한 줄 세세히 분석하지는 않을 것입니다.

튜토리얼을 찾으신다면, 아래쪽의 샘플 DApp으로 넘어가세요.

Go 스마트 컨트랙트에서 이벤트 내보내기:

emitMsg := struct {    
Owner string
Method string
Addr []byte }{owner, "createacct", addr}
emitMsgJSON, err := json.Marshal(emitMsg)
if err != nil {
log.Println("Error marshalling emit message")
}
ctx.Emit(emitMsgJSON)

Solidity에서 이벤트 내보내기:

Event 구독하기

이벤트를 수신하고 이를 다른 데이터베이스에 인덱싱하기 위해서, WebSocket이나 Redis 큐를 사용할 수 있습니다.

WebSocket을 통해 구독하기

Loom SDK의 질의 종단점은 이벤트 스트림을 구독하기 위해서도 사용할 수 있습니다. 커맨드라인과 wscat CLI을 사용하는 구독 코드의 샘플은 다음과 같습니다:

wscat CLI

Web3 WebSocket과 Node.js를 사용하는 또 다른 샘플은 다음과 같습니다:

WebSocket을 사용하는 Node.js의 이벤트 구독

또한 Redis 큐를 이용하여 구독할 수도 있습니다.

기본적으로, Loom SDK는 이벤트를 로그로 내보내기만 할 겁니다. Redis의 Sorted Set 데이터 내보내도록 설정하려면, loom.yaml 설정 파일에 다음 라인을 추가하세요.

EventDispatcherURI: "redis://localhost:6379"

이렇게 하면 Redis 서버로 loomevents라는 이름의 Sorted Set에 이벤트를 내보내기 시작할 것입니다. 각 이벤트는 블록체인의 길이에 해당하는 Score를 가지는 Sorted

샘플 DApp: 소셜 네트워킹 사이트

우리는 샘플 소셜 네트워킹 DApp을 만들었습니다. 사용자들이 포스트를 만들고 다른 사용자들이 거기에 코멘트를 달 수 있는 형태이지요.

소스 코드를 다운로드 받으세요: Solitity Social App on GitHub

코멘트들은 Loom DAppChain에 저장되고, WebSocket에서 데이터를 받아 Elasticsearch로 인덱싱을 하는 Node.js 백엔드도 있습니다.

DAppChain 상의 소셜 네트워킹 앱 예시. 코멘트는 DAppChain에 써지고, 빠른 읽기를 위해 Elasticsearch에 인덱싱 됩니다.

Node.js 서비스와 Elasticsearch 인덱스 계층은 오프체인으로 이루어지지만, 모든 트랜잭션은 DAppChain에 직접 만들어집니다.

Elasticsearch 인덱싱 계층은 번개처럼 빠른 읽기 처리를 위한 보조 서비스로 작동합니다. 다른 Web 2.0 사이트들처럼 성능이 좋은 DApp을 만들어주는 것이지요.

어서 소스 코드를 다운로드하고 직접 확인해 보세요!

한 가지 더…

Loom SDK가 거의 준비됐습니다! 거기에 여러분의 근처 도시에서 해커톤이 열립니다! 🌏

Loom Network에서 일어나는 많은 일들로 몹시 흥분되어, 참을 수가 없네요!

6월에, 우리는 Loom SDK를 공개 릴리즈할 것입니다. 우리의 SDK는 개발자들이 확장성 있는 DApp게임을 이것 저것 귀찮은 것들을 할 필요 없이 쉽게 만들 수 있게 해주는 가장 쉬운 방법이 될 겁니다.

또한 많은 해커톤을 개최할 계획이 있습니다(베이징과 상하이에서 6월 말 또는 7월에 열립니다). 이런 이벤트들에서,우리는 게임 및 블록체인 개발자들에게 Loom SDK의 기능에 대해 상세히 설명하려 합니다.

도쿄에서 열린 우리의 최초 해커톤은 매우 성공적이었습니다. 그리고 우리는 매우 뛰어난 팀들로부터 굉장히 훌륭한 프로토타입을 볼 수 있었죠! 여기서 그 내용을 확인해보세요.

그러니, 코드와 함께 살고 숨쉬는 분이시라면, 이런 이벤트에서 여러분을 뵙기를 바랍니다! 😎

그리고 여러분의 도시에서 해커톤을 준비하는 데에 도움을 주실 수 있다면, team@loomx.io로 메일을 보내 알려주세요!

멋진 여러분과 곧 대화할 수 있을 겁니다. 😎

Loom Network는 고성능 디앱을 확장하기 위한 멀티체인 상호운용 플랫폼입니다 — 이미 상용 가능한 상태이며, 감사 및 실제 테스트를 거쳤습니다.

Loom 베이스체인에 여러분의 디앱을 한 번 배포하고 나면, 오늘날 모든 주요 블록체인에 걸쳐 가능한 가장 광범위한 사용자 기반에 접근할 수 있습니다.

Loom Network를 처음 접하시나요? 여기서 시작하세요.

LOOM 토큰을 스테이킹해서 베이스체인을 보호하는 데 참여하고 싶으신가요? 여기서 그 방법을 알아보세요.

우리가 하는 일이 마음에 드시나요? 그렇다면 어서 우리의 프라이빗 메일링 리스트에 가입하고, 우리가 계속 전달하는 모든 업데이트를 계속 받아보세요.

--

--