Luniverse 플랫폼 블록체인 성능과 안정성 동시에 잡다!

Jarry
Luniverse
Published in
7 min readFeb 14, 2020

들어가며

현재 많은 블록체인 플랫폼이 다양한 방법으로 확장성 문제를 풀고 있고 루니버스도 POA(Proof of Authority) 합의 알고리즘 기반으로 초당 1,500 ~ 2,000TPS 성능을 제공하고 있습니다. 그러나 이러한 블록체인 트랜잭션 처리 성능에 대한 많은 주장이 있음에도 불구하고 실제 성능에 대한 객관적인 테스트 결과가 공유된 사례가 거의 전무한 현실입니다.

Luniverse, where your service meets blockchain
Luniverse

체리 기부 플랫폼

체리 플랫폼은 2019년 블록체인 민간주도 국민프로젝트에 선정되어, 기부 모금부터 사용까지 모든 기부금 정보를 블록체인에 실시간으로 기록하여 믿을 수 있고 참여자 스스로 결정하여 기부할 수 있는 자율 플랫폼입니다. 체리 플랫폼은 이포넷과 람다256이 업무협약을 맺고 공동개발했으며, 람다256은 블록체인 기반 기술 지원 및 서비스 플랫폼 제공을 담당하고 있습니다. 지난 12월, KISA는 TTA에 시험을 위탁하여 람다256의 루니버스 플랫폼에 대한 성능 검증을 진행했습니다.

누구나 쉽게 사용 가능한 블록체인 BaaS 플랫폼 Luniverse 알아보기

루니버스 플랫폼

루니버스 플랫폼은 누구나 쉽게 블록체인 서비스를 개발할 수 있는 것을 목표로 한 BaaS(Blockchain as a service) 플랫폼입니다. 루니버스 플랫폼을 이용하여 굳이 자체 블록체인을 개발하지 않아도 쉽게 토큰을 발행하여 Dapp에 적용할 수 있으며, 트랜잭션의 모니터링도 가능한 것이 큰 특징입니다.

본 글에서는 지난 TTA 성능 검증 과정을 통해 얻은 블록체인 성능 검증 방법과 과정을 소개하고자 합니다. 먼저, 검증에 대하여 이야기 하기 전에 시험 항목(Test Case ,TC)은 어떻게 구성되어있으며 시험 환경을 포함한 사전 조건은 어떠한지에 대하여 살펴보겠습니다.

시험 항목은 크게 나누면 블록 확정 성능, 블록 참조 성능, 블록 용량 확장 성능과 같은 쓰기 및 읽기에 관한 항목과 노드 장애 대응, 데이터 무결성 및 안전한 키 관리 기능과 같이 블록체인 및 루니버스에 관한 전반적인 것을 검증하는 항목으로 구성됩니다.

시험을 진행할 당시에는 체리 서비스가 프로덕션에서 동작하고 있었기에 프로덕션 환경에서 시험을 진행하지 않고 대신 같은 환경으로 구성한 성능 검증용 개발 환경에서 시험 검증을 진행했습니다. 그리고 시험 항목 중, 성능에 대한 부분은 체리 플랫폼에서 사용중인 컨트랙트를 사이드 체인에 배포하고, 항목별 함수를 호출하여 TPS(Transaction Per Second)를 측정했습니다.

블록체인 노드

블록체인 노드는 Bootnode 서버 2대와 Miner 서버 3대로 이루어져 있습니다. 3대의 Miner 노드는 돌아가며 1초에 한 개의 블록을 생산하고, 한 블록당 소모하는 가스의 양(gasLimit)은 6,400,000로 설정되어 있습니다.

성능 측정 방법

성능 측정 툴로는 JMeter 성능 측정 도구를 사용하여 특정 기능에 부하를 주거나 성능을 측정하였습니다. 이번 시험에서는 부하를 요청하는 JMeter Client 1대와 Client에서 전송한 부하 요청을 받아 실행하는 JMeter Remote Server 2대로 구성하였습니다.

시험을 용이하게 하기 위하여 JMeter Server에는 JMeter 외에도 nodejs 애플리케이션이 설치되어 있습니다. nodejs 애플리케이션은 express 기반의 웹서버입니다. 사전에 nodejs 애플리케이션에 시험 항목에 맞는 API를 개발하였습니다. 해당 API는 항목에 맞는 메소드를 호출하기 위한 조건이 코드로 구성되어 있습니다.

각 항목을 API로 미리 만들어 두었기에, JMeter Server는 다른 작업(예. Raw Tx Signing)을 고려하지 않고 단순히 해당 API를 호출하는 것으로 작업을 수행할 수 있습니다. JMeter에서는 부하를 줄 때 여러 프로토콜 옵션을 선택할 수 있지만, 이번 시험에서는 nodejs 애플리케이션을 활용하기 위해 HTTP 프로토콜을 사용했습니다.

Figure 1은 다음의 과정을 간략하게 도식화한 모습입니다. JMeter Client에서는 JMeter Server로 부하 요청을 전달하고, JMeter Server는 요청을 받고 각 JMeter Server에서 동작하는 nodejs 애플리케이션을 호출하게 됩니다.

Figure 1 부하 구조

조회하는 함수를 제외하고, 블록체인 노드에 트랜잭션을 발생시키면, 해당 트랜잭션들은 대기열(Queue)에 쌓입니다. 그렇기에 JMeter에서 제공하는 TPS는 엄밀히 말하자면 단순 호출 시간이기 때문에 좀 더 정확하게 TPS를 측정하려면 블록 생성이 확정되는 시간(Confirm Time)으로 계산해야 합니다. 이를 위해 마지막 블록이 확정된 시간을 계산하여 TPS를 보여주는 스크립트를 추가로 개발하였습니다.

Figure 2 블록 확정 시간과 Tx를 세어 검증하는 모습

성능 측정은 가장 빈번하게 호출되는 함수, 가장 데이터 사이즈가 큰 함수, 데이터 처리가 복잡한 함수, 조회 빈도가 가장 높은 함수의 TPS를 측정했습니다. 가장 데이터 사이즈가 큰 함수와 데이터 처리가 복잡한 함수는 같은 함수였기에 이는 같은 시험으로 갈음했습니다.

성능 측정 결과

1. 빈번하게 호출되는 함수

JMeter 부하를 주고, 준비한 스크립트를 이용하여 조회한 결과입니다. 가장 성능이 낮은 수치는 빼고 10회 평균을 구했습니다.

Table 1 가장 빈번하게 호출되는 함수의 TPS

2. 복잡하고 사이즈가 큰 함수의 TPS

이 함수는 메모리에 기록하는 로직이 많아서 무겁고, 복잡성(complexity)도 높은 함수입니다. 때문에, 위의 결과에 비해서 성능은 낮은 모습입니다.

Table 2 데이터처리가 복잡하고 사이즈가 큰 함수의 TPS

3. 빈도 조회가 가장 높은 함수

가장 빈도 조회가 높은 함수는 view 함수 이기에 블록 확정이 되는 것을 기다릴 필요없이 응답 결과를 즉시 받아볼 수 있는 함수입니다.

때문에 원하는 결과를 즉시 얻을 수 있어서 측정값이 높습니다.

Table 3 조회 빈도가 가장 높은 함수

마무리하며

이번 TTA와의 시험 및 성능 측정으로 루니버스 플랫폼에 대한 성능과 안정성에 대한 객관적인 측정 결과를 얻고 인정받게 되었습니다. 특히, 이전에 어떤 블록체인 플랫폼도 객관적인 성능 측정이 이뤄지지 못한 상태에서 한국 정부의 공식 과제로서 TTA라는 객관적인 기관에 의해 무척 엄격하게 진행된 결과라 더욱 의미가 있습니다. 특히, 본 글에서는 언급하지 않았으나 EOA 키 관리 기능과 노드 장애 대응과 같은 항목도 검증이 진행 되었기에 그 가치는 더욱 크다고 생각됩니다.

Luniverse

--

--