1. 서 론
인공지능, 빅데이터, IoT 등 디지털 기술로 촉발되는 지능화 혁명인 4차 산업혁명이 등장하면서 핵심 인프라 로 활용이 가능한 블록체인 기술이 주목받고 있다[7, 14, 15]. 블록체인은 P2P 네트워크를 통해 연결된 모든 노드 가 거래내역과 같은 트랜잭션 데이터를 공유하고 인증하 는 방식으로 데이터를 분산 저장하여 신뢰 플랫폼을 구 현할 수 있는 기술이다[16]. 이를 통해 중개를 담당하는 중립적인 주체를 통하지 않고 개인 대 개인이 직접 거래 를 수행할 수 있으며, 한번 입력된 데이터를 수정하는 것 이 매우 어렵기 때문에 거래의 투명성을 보장한다. 이러 한 특성 때문에 다양한 산업분야에서 블록체인 기반 시 스템을 구축하기 위한 연구가 활발하게 진행되고 있다.
블록체인 기반 시스템이 제공해야 하는 특성으로는 탈 중앙화, 확장성, 보안성이 있으며, 이러한 3가지 특징은 동시에 만족시키기 어려워 블록체인 트릴레마(trilemma) 라고 지칭한다[13]. 탈중앙화는 거래가 발생할 때, 중개 권한을 가지는 주체를 거치지 않고 노드 간 거래 내역의 신뢰성을 보장하기 위한 특성이며, 확장성은 블록체인에 참여하는 노드 수가 증가할 경우에도 성능 저하가 발생하 지 않는 특성을 의미한다. 마지막으로, 보안성은 악의적 인 공격에 의해 거래 내역이 왜곡되지 않고 온전하게 저 장될 수 있도록 보장하기 위한 특성이다. 블록체인 네트 워크에서 사용되는 분산합의 알고리즘은 블록체인에 참 여한 모든 노드가 동일한 데이터를 저장하기 위한 프로토 콜이자, 해당 블록체인 시스템이 중점적으로 제공할 수 있는 특징을 결정한다. 따라서, 구축하고자 하는 블록체 인의 목적과 특성을 고려하여 적절한 분산합의 알고리즘 을 선택하는 것은 매우 중요하다. Kim et al.[6]은 이를 위 해 다양한 분산합의 알고리즘을 평가하기 위한 항목들을 제안한 바 있다.
잘 알려진 비트코인의 Proof-of-Work(PoW)[9]을 포함 하여 많은 분산합의 알고리즘이 제안되었으나, 각각의 한 계점으로 인해 블록체인 트릴레마를 충분히 해결하지 못 하고 있다. 예를 들어, 앞에서 언급된 PoW 분산합의 알고 리즘은 블록 확인(confirmation) 절차를 통해 높은 보안성을 제공할 수 있지만 블록의 확정성을 제공하지 못하며, 성능 효율성 지표인 초당 트랜잭션 수(Transactions Per Seconds, TPS) 측면에서 최대 7TPS 정도로 매우 낮고, 합의 시간 측면에서도 10분의 긴 시간을 필요로 한다. 비교적 많은 TPS를 달성한 Algorand 또한 1,000TPS 수준의 성능에 머 물러 있어 빠른 거래처리가 필요한 산업분야에서의 활용 에 한계를 갖고 있다. 이와 같은 한계점으로 인해 다양한 분산합의 알고리즘이 존재함에도 이들을 채택한 블록체 인 시스템이 프라이빗 블록체인의 형태로 제한된 환경에 서 사용되거나, 퍼블릭 블록체인 기반 응용 서비스에 적 용되지 못하고 있다[5].
이에 대한 대안으로서, Byzantine Agreement among Decentralized Agents(BADA) 분산합의 알고리즘이 제안되었 다[11]. BADA 분산합의 알고리즘은 모든 노드가 합의 과 정에 참여하는 것이 아니라 일부 노드로 구성된 위원회 (committee)를 통해 합의를 수행한다. 이러한 합의 과정은 수 초 이내의 합의 시간과 수천 TPS 수준의 우수한 성능 을 제공할 뿐 아니라, 대규모의 노드로 구성된 환경에서 도 합의 성능이 유지되어 확장성을 제공할 수 있다. 또한, Proof-of-Nonce(PON) 메커니즘[11]을 통해 공정하고 안전 한 위원회 선출이 가능하여 탈중앙화 달성 및 우수한 보 안성 제공이 가능하다.
BADA 분산합의 알고리즘의 뛰어난 특성에도 불구하 고, 이를 이용하는 실제 블록체인 시스템 구축을 위해서 는 보다 다각적인 관점의 성능 분석과 성능에 영향을 미 치는 핵심 인자 도출과 같은 선행 연구들이 필요하다. 그 러나 이러한 성능 분석 시험을 실제 시스템에서 수행하 는 것은 많은 시간과 비용이 필요하기 때문에, 본 논문에 서는 시뮬레이션 기반의 접근을 수행하고자 한다. 즉, 실 제 서비스 환경에서 BADA 분산합의 알고리즘의 성능을 모사할 수 있는 시뮬레이터를 설계하고, 더 나아가 시뮬 레이션 결과를 바탕으로 BADA 분산합의 알고리즘의 성 능을 최적화하기 위한 방안을 탐색하고자 한다.
본 논문의 구성은 다음과 같다. 제 2장에서는 기존 분산 합의 알고리즘 연구들을 소개하고, 제 3장에서는 BADA 분산합의 알고리즘의 시뮬레이션 수행을 위한 시뮬레이터 를 설계한다. 이후, 제 4장에서는 설계된 BADA 시뮬레이 터를 통해 제공할 수 있는 블록체인 서비스를 정의하고, 이에 대한 시뮬레이션 결과를 바탕으로 성능 최적화를 수 행한다. 마지막으로 제 5장에서 결론을 기술한다.
2. 관련 연구
블록체인의 분산합의 알고리즘은 크게 경쟁적 방법과 비경쟁적 방법으로 나눌 수 있다. 대표적인 경쟁 합의 알 고리즘으로 PoW와 Proof-of-Stake(PoS)가 존재한다.
PoW는 블록 생성 과정에 참여한 모든 노드가 반복적 인 해시 연산을 수행하고, 해당 작업을 수행했음을 증명 하는 방식의 합의 알고리즘이다[9]. 각 노드가 보유한 컴 퓨팅 능력을 통해 특정 연산을 수행하고, 목표 값을 가장 빠르게 계산한 노드가 블록을 생성한다. 이러한 방법은 노드의 컴퓨팅 능력에 따른 보상으로 선순환의 경제 시 스템을 구축할 수 있으나 10분의 긴 합의 시간과 7TPS 의 낮은 처리 효율을 가진다. 게다가, 동시에 블록 생성 에 성공하는 복수의 노드로 인해 발생하는 포크(fork) 해 결을 위한 블록 확정 시간이 필요하여 실질적으로 거래 정보가 확정되기 위해서는 한 시간의 긴 시간이 필요하 다. 그 외에도, 모든 노드가 동일한 해시 계산 작업을 수 행해야 하므로 컴퓨팅 자원의 낭비 및 과도한 에너지 소 모량을 유발한다. 아울러 계산 성능이 높은 단일 주체 또 는 복수 주체들의 담합으로 인해 이들에게 중앙화될 위 험성이 존재한다.
PoS는 PoW의 단점을 보완하기 위해 제안된 방법으로 블록 생성을 노드가 보유한 지분에 따라 결정한다[2]. PoW와 마찬가지로 모든 노드가 블록을 생성할 수 있지 만, 각 노드가 보유한 지분에 따라 블록을 생성하여 보다 큰 지분을 갖는 노드가 블록 생성에 성공하게 된다. PoS는 PoW에 비해 컴퓨팅 자원이 낭비되지 않는 장점을 제공 하지만, 보다 많은 지분을 보유한 노드에 의해 독과점이 발생할 수 있는 단점이 존재한다. 또한 PoW와 마찬가지 로 포크가 발생할 수 있어 블록 확정성을 제공하지 못하 는 문제가 있으며, 실제 거래 데이터가 반영되기까지 수 분의 시간이 필요하며, 수십 TPS 수준의 성능으로 인해 실 서비스 적용에 한계를 갖는다. 이와 같은 경쟁적 분산 합의 알고리즘은 모든 노드가 동시에 여러 블록을 생성 할 수 있어 블록 확정성이 보장되지 않기 때문에, 별도의 확정 시간이 필요하고 이는 효율성의 저하로 이어진다.
PoI(Proof-of-Importance)는 NEM에서 도입한 합의 알 고리즘으로 중요도 증명을 통해 블록을 생성할 노드를 합의한다[10]. PoI는 중요도에 따라서 블록을 생성할 노드 를 결정하게 되고, 해당 노드는 블록에 기록될 트랜잭션 수수료를 받는다. 이때 중요도는 노드가 보유한 코인의 수가 많을수록, 그리고 더 많은 트랜잭션을 발생하여 거 래를 더 많이 할수록 중요도 점수를 할당한다. 즉, 거래 량과 신용이 중요도 계산의 척도로 활용된다. 그러나 PoI 는 중요도가 높은 일부 노드에 의해 다시 중앙화 될 수 있으며, 공격대상으로 노출될 수 있는 단점이 존재한다. 따라서, 최근 대부분의 블록체인 플랫폼들은 블록 확정 성과 우수한 성능을 제공하는 비경쟁 합의 알고리즘들을 사용하는 추세이다.
대표적인 비경쟁적 분산합의 알고리즘인 PBFT(Practical Byzantine Fault Tolerance) 알고리즘은 비잔틴(byzantine) 노드라 불리는 악의적인 노드가 존재할 경우에도 합 의를 도출할 수 있는 알고리즘이다[3]. 비잔틴 노드의 수를 f라고 할 때, 고정된 3f + 1개의 합의 노드들에 의해 합의 를 진행하며, 4단계의 합의 과정을 통해 합의 노드의 2/3 인 2f + 1개 이상의 노드가 동의하면 합의에 도달하게 된 다. PBFT는 경쟁적 방식에 비해 블록 확정성을 제공하고, 우수한 성능을 제공하나, 각 합의 단계에서 합의에 참여하 는 모든 노드가 브로드캐스팅을 통해 합의 메시지를 전달 하여 메시지 복잡도가 O(n2)으로 증가하기 때문에 참여 노드의 수가 많아질수록 합의 시간이 증가하여 TPS 성능 이 저하되는 단점이 존재한다. 또한 블록 생성에서 중요한 역할을 맡은 리더 노드가 미리 정의되어야 하기 때문에 퍼블릭 블록체인에서 사용하기 어려운 문제가 있다.
Algorand는 퍼블릭 블록체인에서 사용할 수 있도록 탈 중앙화를 보장하면서 블록 확정성을 제공하기 위해 제안 되었다[4]. Algorand는 블록체인에 참여한 전체 노드 중에 서 합의에 참여할 노드를 선정하기 위해 검증 가능한 임 의의 함수(Verifiable Random Function, VRF)를 사용하고, 선출된 노드들에 의해 블록 합의를 진행한다. 블록 합의 과정은 크게 2단계로 구분된다. 1단계에서는 VRF에 의해 블록 생성 자격을 갖는 노드들이 후보 블록들을 생성하 여 브로드캐스팅을 통해 블록체인에 참여한 모든 노드들 에게 전파하고, 마찬가지로 VRF에 의해 검증 자격을 갖 는 노드들에 의해 후보 블록 중에서 합의를 진행할 하나 의 블록을 선택한다. 2단계에서는 1단계에서 선택된 블록 을 마찬가지로 VRF에 의해 선정된 검증 노드들에 의해 투표를 진행하고 최종적으로 해당 블록을 확정하게 된다. 이때 검증 과정에서 하나의 블록 검증이 완료되지 않으면 빈 블록을 생성하여 다시 합의하는 과정으로 인해 최악의 경우 11단계의 합의 단계를 수행하게 된다. 각 단계에서 는 비잔틴 노드의 비율이 20%일 경우, 2,000개의 노드가 합의에 참여해야 하며, 마지막 단계에서는 10,000개의 노 드가 참여해야 한다. Algorand는 PBFT와 마찬가지로 각 합의 단계에서 브로드캐스팅에 의해 합의 메시지를 전달 하여 메시지 복잡도가 O(n2)으로 증가하기 때문에 22초 의 합의 시간이 소요되어 실시간 서비스가 필요한 환경에 적용하기 어려운 단점이 존재한다.
기존 분산합의 알고리즘의 한계를 극복하기 위해 제안 된 BADA 분산합의 알고리즘은 크게 매 블록마다 분산합의 를 진행할 Congress를 선출하는 단계와 선출된 Congress에 의해 블록을 합의하는 단계로 구성된다[11]. Congress를 선출하는 단계에서는 탈중앙화와 보안성 보장을 위해 네 트워크에 참여한 모든 노드가 각각 넌스체인 정보를 공개 하고, 이를 이용하여 각 블록마다 Congress 자격을 획득한 다. 아울러, 획득한 Congress 자격을 상호 검증할 수 있는 프로토콜을 제시하였다. 블록 합의 단계는 구성된 Congress 가 4단계의 합의 과정을 통해 블록을 합의한다. 이때 분산 된 Congress 노드 간 합의 메시지 교환을 위해 메시지 복 잡도 O(n)을 제공하는 합의 프로토콜을 제시하여 확장성 을 보장한다. 이를 통해 BADA 분산합의 알고리즘은 수초 이내의 합의 시간과 수천 TPS 수준의 성능을 제공한다.
이와 같은 BADA 분산합의 알고리즘을 이용하는 블록 체인 서비스 시스템을 설계하기 위해서는 해당 서비스 분야에서 요구되는 환경에 따른 성능 영향 요소를 도출 하고, 이에 따른 성능 특성을 연구할 필요가 있다. 또한, 이러한 성능 특성에 영향을 미치는 핵심 인자들을 분석 하고, 최적의 성능을 낼 수 있는 인자 수준을 도출할 필 요가 있다.
3. BADA 분산합의 시뮬레이터 설계 및 구현
3.1 BADA 분산합의 알고리즘 분석을 통한 핵심 인자 도출[11]
BADA 분산합의 알고리즘은 크게 합의를 진행할 Congress를 선정하는 과정과 Congress에 의한 블록 합의 과정 으로 구분된다. 먼저, 블록 합의 과정에서는 보안성 보장을 위해 블록을 합의할 일정 개수의 Congress를 선출한다. 블록 합의 과정은 <Figure 1>과 같으며, Delegate Request, Prepare, Commit, Committed의 4단계로 진행된다. 모든 Congress 노드는 Delegate Request 단계에서 자신의 Mempool에 저 장된 트랜잭션을 의장 노드에게 전달한다. 의장 노드는 자신을 포함하여 Delegate Request를 전송한 노드들을 위원 회로 선정하고, f + 1개 이상의 노드가 공통적으로 제출 한 트랜잭션과 다음 블록 합의를 위한 Congress로 구성 된 후보 블록을 생성한다. Prepare 단계에서는 의장 노드 가 위원회 노드들에게 prepare 메시지를 전송하고 위원회 노드들은 수신된 후보 블록을 검증한다. 블록 검증이 완 료되면 위원회 노드들은 각각 다중 서명 조각을 생성하 여 의장 노드에게 전달한다. Commit 단계에서는 의장 노 드가 위원회 노드로부터 수신된 다중 서명 조각을 통합 하여 후보블록에 서명을 기록하고 최종블록을 생성한다. 마지막으로 Committed 단계에서 의장 노드는 블록체인 에 연결된 모든 노드에게 최종블록을 전파하고 블록을 수 신한 노드들은 블록에 저장된 트랜잭션들을 실행하고 그 결과를 원장에 반영하고 다음 블록 합의를 시작한다.
이와 같은 BADA 분산합의 알고리즘의 블록 생성 과 정을 바탕으로, 본 논문에서는 성능에 영향을 줄 수 있는 핵심 인자로서 트랜잭션의 크기(단위 : byte), 트랜잭션의 수(단위 : 개), 전체 노드 수(단위 : 개)를 선택하였다. 트 랜잭션의 크기와 수는 합의 수행을 위한 메시지의 크기 나 수에 영향을 줄 수 있다. 또한, BADA 분산합의 알고 리즘은 전체 노드의 수에 따라 Congress의 수가 동적으 로 변경될 수 있으며, 정해진 수의 Congress 노드 메시지 및 위원회 노드의 메시지를 처리해야 다음 합의 단계를 진행할 수 있다. 따라서 전체 노드 수의 증가로 인한 Congress 크기의 증가는 발생하는 메시지의 총량이나 서 명의 처리 시간에 영향을 줄 수 있으며, 검증 데이터의 크기 또한 이에 따라 결정된다. 이러한 핵심 인자를 반영 한 시뮬레이터 설계를 수행하고, 이를 바탕으로 성능 최 적화를 수행한다.
3.2 BADA 분산합의 시뮬레이터 설계
BADA 분산합의 알고리즘의 성능을 시뮬레이션하기 위해서는 네트워크로 연결된 다수의 분산 노드 상에서 합 의 과정을 수행할 수 있는 환경을 제공해야 하고, 합의 대 상 트랜잭션들을 생성하여 노드에 전달할 수 있어야 한 다. 또한 합의된 결과를 통해 성능 지표인 블록의 합의 시 간과 TPS 성능을 도출할 수 있어야한다. 이를 위해 본 논 문에서는 <Figure 2>와 같은 BADA 분산합의 시뮬레이터 를 설계한다. BADA 분산합의 시뮬레이터는 크게 시뮬레 이터 CLI(Command Line Interface), 트랜잭션 생성기, 그 리고 BADA 노드의 3가지 모듈로 구성된다.
시뮬레이터 CLI는 BADA 분산합의 알고리즘의 성능 영향 요소인 트랜잭션의 크기, 트랜잭션의 수, 전체 노드 수를 입력 데이터로 전달받는다. 이후, 전체 노드 수만큼 BADA 노드를 구동하고 네트워크를 통한 상호 연결이 이루어지도록 한다. 트랜잭션 생성을 위한 정보가 되는 트랜잭션 크기와 트랜잭션 개수는 트랜잭션 생성기의 입 력 파라미터로 전달된다. 이러한 시뮬레이터를 바탕으로 분산합의 시뮬레이션을 수행하고, 합의 결과를 분석하여 합의 시간 및 TPS 성능을 출력한다.
트랜잭션 생성기는 실제 서비스와 유사한 시뮬레이션 수 행을 위해 Smallbank 트랜잭션[12]을 생성하여 모든 BADA 노드로 전파한다. Smallbank 트랜잭션은 실제 금융 환경을 시뮬레이션하기 위한 데이터로 6가지 종류의 거래 데이터 로 구성된다. 트랜잭션 생성기는 입력 데이터의 부하를 조 절하기 위하여 초당 생성되는 트랜잭션 수와 크기를 제어 한다. 이때, 입력된 트랜잭션 크기가 실제 Smallbank 트랜 잭션 크기보다 큰 경우에는 더미(dummy) 데이터를 추가 하여 트랜잭션 메시지의 크기를 제어한다.
BADA 노드는 실제 BADA 분산합의 알고리즘과 유사한 블록 합의 과정 시뮬레이션을 위해 Congress 선출 및 합의 과정을 동일하게 수행하도록 설계한다. Congress Manager 는 Congress 선출 및 자격 검증을 위해 네트워크에 등록된 BADA 노드들을 리스트로 관리하고, 매 블록마다 해당 노 드가 다음 블록 Congress 자격이 있는지를 검사하여 합의 참여 신청 메시지를 생성하여 전달한다. 또한 의장 노드의 경우에는 신청된 노드의 합의 참여 자격 검증을 수행한다. Crypto는 BADA 분산합의 알고리즘에서 사용되는 ECSchnorr 다중 서명을 통해 노드 간 교환된 합의 메시지 서명 검증과 블록 합의 과정에서의 다중 서명 생성 및 검증 기 능을 수행한다. Transaction Processor는 트랜잭션 생성기 로부터 전파된 트랜잭션을 수신하여 검사하고, 검증된 트 랜잭션을 Mempool에 저장한다. 또한, 합의된 블록에 저장 된 트랜잭션을 실행하여 분산 원장에 반영하는 기능도 수 행한다. 본 논문에서는 Smallbank 트랜잭션을 처리하기 위 하여 Transaction Processor가 6가지 종류의 Smallbank 트 랜잭션에 대해 데이터 무결성 및 값의 범위를 검사하여 실행 가능여부를 판별함으로써 트랜잭션을 검증한다. 이 후, 실행 단계에서는 트랜잭션 거래 내역 반영을 위해 1,000개의 account를 생성하고 반영된 거래 내역을 level- DB를 이용하여 저장한다. Consensus Manager는 BADA 분산합의 알고리즘과 같이 4단계의 합의 단계를 수행한다. handleDelegateRequest는 Congress 노드가 다중 서명에 필 요한 정보를 계산하여 의장 노드에게 전달하고, 의장 노드 는 2f + 1개의 위원회를 구성하고, 트랜잭션과 검증 데이 터로 구성된 후보 블록을 생성하는 과정을 수행한다. handlePrepare는 의장 노드가 후보 블록을 위원회 노드들에게 전송하고, 위원회 노드들은 전송된 후보 블록을 검증하여 다중 서명 조각을 생성, 의장 노드에게 전송하는 과정을 수행한다. handleCommit은 의장 노드에 의한 다중 서명 생성 및 최종 블록 생성 기능을 수행한다. 마지막으로 handleCommitted는 의장 노드가 합의된 최종 블록을 네트워 크를 통해 전파하고, 모든 노드가 수신된 블록에 적재된 트랜잭션들을 Transaction Processor를 통해 실행한 후 블 록을 로컬 저장소에 저장하는 기능을 수행한다.
3.3 BADA 분산합의 시뮬레이터 구현
BADA 분산합의 시뮬레이터는 GO 언어로 구현되었 으며 사용된 GO 언어 버전은 1.13.8이다. GO 언어는 서 버 소프트웨어를 위해 디자인되어 타언어에 비해 비동기 멀티스레드 코드 개발이 용이하다. GO 언어는 파이썬에 비해 빠른 실행 속도를 제공하며, C/C++ 대비 복잡성은 줄이고 빠른 컴파일 시간을 제공한다. BADA 분산합의 시뮬레이터는 네트워크로 연결된 다수의 서버 환경에서 동작되도록 구현하였으나 독립된 IP 주소가 부여 가능한 가상머신 환경이나 docker 컨테이너 기반으로 하나의 머 신에서도 동작 가능하다. 그러나, 단일 머신에서 다수의 가상 머신을 기동하여 시뮬레이션을 수행할 경우, 실제 네트워크 연결에서 발생하는 네트워크 지연시간이 반영 되지 않기 때문에 본 논문에서는 실제 다수의 물리 서버 환경에서 시뮬레이션을 수행한다. 본 논문에서 사용한 시뮬레이터 구현 및 시험 환경은 <Table 1>과 같다.
BADA 분산합의 시뮬레이터는 3.2절에 기술한 바와 같이 크게 시뮬레이터 CLI, 트랜잭션 생성기, BADA 노 드의 3가지 모듈로 구성된다.
시뮬레이터 CLI는 <Figure 3>과 같은 인터페이스를 제 공하여 사용자로부터의 시뮬레이션 환경에 필요한 입력 파라미터와 트랜잭션 생성기 및 BADA 노드의 구동/종료 기능을 제공한다. 먼저, 사용자로부터 전체 노드 수를 전 달받고 네트워크로 연결된 다수의 서버 환경에서 BADA 노드를 구동한다. 이때, BADA 분산합의 알고리즘의 특 성으로 인해 최소 4개 이상의 BADA 노드가 구동되어야 하며, 입력 데이터가 없을 경우 트랜잭션 데이터가 없는 빈 블록 합의를 시작한다.
다음으로 성능 시뮬레이션에 필요한 트랜잭션 생성을 위해 사용자로부터 생성할 트랜잭션의 개수와 트랜잭션 의 바이트 크기를 입력 받고 이를 입력 파라미터로 하여 트랜잭션 생성기를 독립된 서버에 실행한다. 트랜잭션 생 성기는 구동된 BADA 노드들과 네트워크 연결을 수립한다. 이후, 전달받은 입력 파라미터에 따라 Smallbank 트랜잭션 을 생성하여 1초마다 정해진 수의 트랜잭션을 모든 BADA 노드로 전송한다. Smallbank 트랜잭션은 은행 거래 내역 을 반영한 데이터이기 때문에 account 간 금융 거래를 위 하여 먼저 1,000 개의 account 생성 트랜잭션을 전송하고 이후 나머지 5가지 금융 거래 트랜잭션 중에서 랜덤으로 선택된 트랜잭션 타입을 생성한다.
모든 BADA 노드는 트랜잭션 생성기로부터 전달받은 Smallbank 트랜잭션을 Transaction Processor를 통해 검증 하고 검증이 완료된 실행 가능한 트랜잭션들을 Mempool 에 저장한다. 다음으로, 각 블록 합의 단계에서 Congress 자격을 획득한 BADA 노드는 Mempool에 저장된 트랜잭 션을 의장 노드에게 전달하고, 4단계의 합의 과정을 수 행하여 최종 블록을 생성한다.
생성된 블록 정보는 트랜잭션 CLI를 통해 분석되며, <Figure 4>와 같은 형태로 출력된다. 출력되는 시뮬레이 션 결과는 매 블록마다 생성된 블록의 번호, 해당 블록에 저장된 트랜잭션의 수와 초당 트랜잭션 처리율을 의미하 는 TPS로 구성된다. 또한 트랜잭션 처리가 시작된 이후 의 평균 블록 생성 시간 및 평균 트랜잭션 처리율을 출 력한다.
4. BADA 시뮬레이터 기반 금융 서비스 시뮬레 이션 수행 및 성능 최적화
4.1 서비스 예시
본 논문에서는 금융 거래 기능을 제공하며 BADA 분산 합의 알고리즘을 이용하는 블록체인 서비스 시스템을 정 의하고, 3장에서 설계한 분산합의 시뮬레이터를 이용한 분산 합의 과정의 성능 분석 및 최적화를 수행한다. 정의 된 시스템에서 제공할 수 있는 금융 서비스는 <Table 2> 와 같다.
즉, 해당 시스템을 통해 특정한 노드가 가진 account의 잔액을 확인하거나 account에 대한 입금/인출, account 간 송금 등의 거래가 이루어질 수 있다.
4.2 실험 설계
본 실험의 목적은 BADA 시뮬레이터를 통해 4.1절에 서 제시한 금융 서비스의 시뮬레이션을 수행하는 과정에 서, 합의 성능에 대한 핵심 인자들의 영향력을 분석하고 목표 성능에 맞는 인자 조합을 탐색하는 것이다. 먼저, 합의 성능을 평가하기 위한 성능 지표로는 합의 시간(y1) 과 TPS(y2)의 2가지 특성 값을 고려하여 이에 대한 실험 을 각각 수행한다. 또한, 이러한 성능에 영향을 줄 수 있 어 독립 변수로 사용되는 시뮬레이터의 핵심 인자로는 앞서 BADA 분산합의 알고리즘의 성능에 영향을 줄 수 있는 3가지 핵심 인자인 트랜잭션의 크기(X1), 트랜잭션 의 수(X2) , 전체 노드 수(X3)의 3가지를 고려한다.
한편, 본 논문에서는 성능 지표와 핵심 인자 간의 관계 를 모델링하고 이러한 모델을 바탕으로 최적의 조건을 도출 하기 위한 방법론으로서 반응 표면 분석(Response Surface Analysis)을 이용한다[1, 8]. 반응 표면을 도출하기 위한 실 험점은 중심 합성 설계(Central Composite Design, CCD) 를 통해 정의하며, hyper-sphere에 내접하는 입방체(cubic) 를 중심으로 실험점을 설계하는 외접원(circumscribe) 방 식을 선택하였다. 3가지 인자 X1 - X3을 이용하기 때문에 3차원의 속성 공간에서 실험점을 정의하며, <Figure 5>에 서 점으로 표기된 실험점들을 이용하였다. 이때, 입방체 의 각 모서리의 총 길이는 2이며, 이에 따른 α의 값은 로 계산된다.
또한, 실험점에 해당하는 각 핵심 인자의 수준은 가장 낮은 수준인 - α부터 가장 높은 수준인 α까지 고려하였 으며, 각 수준의 구체적인 값은 <Table 3>과 같다.
앞에서 정의한 실험점과 실험점에 따른 핵심 인자 수준 을 고려하여 합의 시간과 TPS에 대한 반응 표면 모델 은 핵심 인자들의 선형적/비선형적 효과, 인자 간 교호 작용(interaction) 등을 고려하여 식 (1)~식 (2)와 같이 계산될 수 있다. 이때, αi, βi(i = 0, 1, 2, ⋯, 9)는 각 항의 계수를 나타내며, α0와 β0는 상수항이다.
4.3 실험 결과 및 성능 최적화
<Table 4>는 정의된 실험점에 따른 시뮬레이션 결과 도출된 합의 시간(y1)과 TPS(y2 )의 값을 나타낸다. 이 때, 각 실험점에 대한 결과 값은 100회의 분산 합의를 수행하여 평균 값을 기록하였다. 또한, 결과 값에 대한 반응 표면 분석은 Minitab 19 소프트웨어를 통해 수행 되었다.
분석 결과 합의 시간 및 TPS에 대해 도출된 반응 표 면 식의 계수 αi, βi와 해당 항이 갖는 유의 확률(p-value) 은 <Table 5>, <Table 6>과 같다. 유의 확률이 낮을수록 해당 항이 성능 지표와 보다 강한 연관성을 가지고 있다 고 볼 수 있다. 이때, 유의 확률의 값이 크기 때문에 합 의 시간과 TPS에 영향을 주지 못할 것으로 예상되는 tx_size2항은 풀링(pulling)하여 모델을 생성하였기 때문 에 계수와 유의 확률을 기술하지 않는다.
도출된 반응 표면의 회귀 식을 바탕으로, 합의시간 및 TPS에 대한 표면도는 <Figure 6>, <Figure 7>과 같다. 각 각의 표면도는 3가지의 핵심 인자 중 하나의 독립 변수를 높은 수준인 500, 3,183, 20으로 고정시킨 후, 2가지의 핵 심 인자의 변화에 따른 합의 시간과 TPS의 변화 양상을 나타낸다. 먼저, 트랜잭션의 크기 tx_size와 트랜잭션의 수 tx_num 그래프로부터 두 인자와 합의 시간이 비선형 적인 이차 함수 관계를 가지고 있는 것을 알 수 있다. 트 랜잭션의 크기 tx_size와 전체 노드 수 node_num 그래 프로부터 0.024의 비교적 큰 유의 확률을 갖는 트랜잭션 의 크기보다 0.000의 낮은 유의 확률을 갖는 전체 노드 수의 영향력이 큰 것을 알 수 있다. 전체적으로, 모든 인 자와 합의 시간은 비례 관계를 가지고 있으며, 이는 각 인 자가 증가함에 따라 발생하는 통신 지연이나 메시지 총량 증가 등이 합의 시간을 증가시키는 요인으로 작용하기 때 문이라고 볼 수 있다.
TPS에 대해서는 0.000과 0.017의 작은 유의 확률의 값을 갖는 트랜잭션의 수 tx_num과 전체 노드 수 node_num이 0.112의 비교적 큰 유의 확률을 갖는 트랜잭션의 크기 tx_size에 비해 더 큰 영향력을 가지고 있다. 또한, 트랜잭 션의 수 tx_num과 TPS는 비례 관계를 가지고 있는데 이 는 보내지는 트랜잭션의 수가 많아지면서 같은 시간에 더 많은 트랜잭션을 처리할 수 있기 때문이다. 반면, 전체 노 드 수 node_num과 TPS는 어느 시점까지는 TPS가 증가하 다가 그 후로 감소하는 관계를 가지고 있다. 이는 노드 수 가 매우 적을 때에는 노드들이 처리할 수 있는 트랜잭션의 수가 적고, 매우 많은 노드로 구성된 네트워크에서는 메시 지 교환과 서명 확인 등으로 인해 처리 효율이 떨어지기 때문이라고 볼 수 있다.
앞에서 도출된 반응 표면의 회귀 방정식은 성능지표 (합의 시간과 TPS)를 핵심 인자(트랜잭션의 크기, 트랜잭 션의 수, 전체 노드 수)에 대한 식으로 나타낸 결과라고 할 수 있다. 즉, 이를 통해 각 인자의 특정한 값으로 구 성된 조합에 대한 합의 시간이나 TPS를 계산하는 것이 가능하며, 이는 실험점이 아닌 임의의 점에 대해서도 유 효하다. 예를 들어, 400byte의 크기를 갖는 3,000개의 트 랜잭션을 12개의 노드로 구성된 네트워크에서 처리하여 합의를 도출하는 경우, 합의 시간과 TPS에 대한 예측 결 과는 <Figure 8>과 같다.
이러한 예측 값을 바탕으로, 성능 목표 조건이 주어졌을 때 이를 달성하기 위한 최적 인자 조합을 도출하는 것이 가능하다. 예를 들어, 전체 노드 수가 주어졌을 때, 블록 생성을 위한 합의 시간이 1초가 되도록 하기 위해 한 블록 에서 처리할 수 있는 최대 트랜잭션의 수를 구할 수 있다. 만약 전체 노드 수 node_num이 20개로 주어지고, 트랜잭 션 크기 tx_size는 중간 값에 해당하는 409byte라면 다음 과 같이 트랜잭션 수를 구할 수 있다. 식 (1)과 <Table 5> 의 정보를 바탕으로 계산된 회귀 식의 좌변에 1을 대입하 고, 트랜잭션 크기 tx_size에 409, 전체 노드 수 node_num 에 20을 대입하여 이를 트랜잭션의 수 tx_num에 대해 정 리하면 약 3,155개의 트랜잭션을 처리할 수 있다는 것을 알 수 있다.
실험 과정에서, 전체 노드 수는 분석을 위한 핵심 인자 로 사용되었지만 실제 블록체인 네트워크를 설계하는 단계 를 제외하면 노드의 수는 고정된 값을 갖는 경우가 많다. 따라서 식 (1), 식 (2) 및 <Table 5>, <Table 6>의 정보를 바탕으로 전체 노드 수가 주어졌을 때 목표 성능 수준에 따른 트랜잭션의 크기나 수에 대한 분석이 보다 실용적으 로 사용될 수 있다. <Figure 9>는 전체 노드 수를 중간 수 준인 15개로 고정하고, 트랜잭션의 크기 tx_size와 트랜잭 션의 수 tx_num을 축으로 이용하여 합의 시간과 TPS에 대해 그려진 등고선도이다.
<Figure 9>에서 TPS를 나타내는 실선은 2,300, 점선은 3,000TPS를 각각 나타내며, 선이 나타내는 트랜잭션의 크기와 수를 사용할 때 각각 2,300과 3,000TPS를 얻을 수 있다. 합의 시간에 대해서도 마찬가지로 실선과 점선이 각각 0.5와 0.9를 나타낸다. 즉, 3,000TPS에 해당하는 점 선과 0.5초 합의 시간에 해당하는 실선이 만나는 점의 트 랜잭션 크기 및 수를 이용하면 0.5초 합의 시간과 3,000 TPS를 달성할 수 있다. 이와 같은 결과를 바탕으로, 본 논문에서 사용된 것과 다른 크기를 갖는 트랜잭션을 처 리하거나, 더 많은 노드로 구성된 네트워크를 이용할 때 목표 성능을 달성하기 위한 핵심 인자 조합을 도출하는 것이 가능하다.
5. 결 론
본 논문에서는 일부 노드로 구성된 위원회를 통해 확 장성을 제공할 수 있으며, 위원회 선정 과정에서 보안성 과 탈중앙화를 보장하는 BADA 분산합의 알고리즘의 수 행을 위한 시뮬레이터를 설계하였다. 설계된 시뮬레이터 는 체계적인 시뮬레이션 수행을 위한 CLI와 제공하고자 하는 실제 서비스와 유사한 환경을 고려한 트랜잭션 생 성기를 포함하고 있다. 또한, 설계된 시뮬레이터를 바탕 으로 이루어진 시뮬레이션 결과에 대해 반응 표면 분석 기반의 성능 최적화를 적용하여 핵심 인자의 영향력을 검출하고, 목표 성능 수준 달성을 위한 최적 인자 조합을 탐색하였다.
이와 같이, 시뮬레이터 설계 요구 사항이나 컴포넌트 정의 등을 포함한 연구 결과는 다양한 분산합의 알고리 즘을 실제 블록체인 시스템에 적용하기에 앞서 사전 검 증의 토대로 사용될 수 있다. 또한, 블록체인 시스템의 분산합의 과정에서 특정한 성능 목표가 주어졌을 때 이 를 충족할 수 있는 핵심 인자들의 값을 도출하기 위해 사용될 수 있다. 이를 바탕으로, 더욱 다양한 분야의 블 록체인 응용에 BADA 분산합의 알고리즘을 적용하고자 한다.