코인정보

#3. 썬더코어의 기술 : 확장성 문제의 해결

1 김덕훈 0 6

 

안녕하세요, Younha입니다.


1510729501625-7efa314851.gif

벌써 주말이네요, 다들 한 주 고생 많으셨어요!



오늘은 썬더코어의 기술적 구조에 대해 써보려고 합니다. 지난 글에서 썼다시피 썬더코어는 확장성 문제를 해결하고, 동시에 탈중앙화와 보안의 가치를 높인 플랫폼입니다. 그런데 기존에 개발된 PoW 혹은 PoS 등의 합의 알고리즘을 차용한다면 탈중앙화의 특성을 높일 수 있음이 경험적으로 증명되고 있습니다. 그렇지만 확장성 문제는 대부분의 블록체인 프로젝트들을 힘들게 하는 측면이 되고 있어요. 이 글에서는 썬더가 어떻게 확장성 문제를 해결하였는지 서술해보려 합니다. 


#1. 왜 확장성이 중요한가?

우선 확장성 문제가 중요하게 된 배경은 무엇일까요? 가장 유명한 계기는 크립토 키티의 출현입니다. 플랫폼으로서 이더리움이 주목을 받게 되자, 첫 게임 dApp인 크립토 키티가 런칭됐지만 이 단순해보이는 서비스에 수많은 사람들이 몰리면서 플랫폼 전체가 마비되는 상황이 생겼죠. 부하가 생기자 이더리움 네트워크의 송금 수수료는 크게 올라갔고 동시에 트랜잭션의 컨펌도 더디게 되는 문제가 발생했습니다.

 

 


1557498183331653_121db61d4a.png


 


사실 이더리움은 기껏해야 초당 12~15 트랜잭션을 처리할 수 있을 뿐인데, 엄청난 트랜잭션이 몰리면 병목현상(bottleneck)이 발생하게 되는 건 당연한 것이죠. 확장성에 애로가 생기면 발생하는 부수적인 현상은 전송 수수료 증가입니다. 이더리움이 채용하고 있는 Gas 시스템은 지극히 경제적입니다. 트랜잭션이 몰릴 때 Fee의 값을 높여 수요를 낮추고, 트랜잭션이 여유로울 땐 다소 낮은 Fee를 부과하여 원활한 거래를 돕는다는 것이죠. 그러나 확장성 문제가 본원적으로 해결되지 않은 상황에서는, 많은 트랜잭션이 발생하는 대중화된 dApp은 이더리움 상에 구축되는 것이 불가능합니다. 만약 페이스북이 이더리움 네트워크에 올라온다면, 우리는 각자의 프로필에 들어가는 것도 어려울 뿐 아니라 어떤 트랜잭션을 처리할 때 과도한 수수료를 지불해야 할 것입니다.  


이 외에도 이더리움의 컨펌 시간 문제는 dApp의 Mass Adoption을 달성하는 데 걸림돌이 됩니다. 가령 이더리움의 컨펌 시간은 비트코인보단 적긴 하지만 평균적으로 수십분이 소요됩니다. 이것은 자산을 전송하고 그것이 확정적으로 반영될 때 수십 분의 시간이 소요됨을 뜻하고 그 과정에서 자산가치가 변동할 가능성을 배제할 수 없습니다. 이러한 특성은 금융 거래에 상당히 부적합한 특성인 동시에, 심지어 대부분의 유틸리티 서비스를 구현할 수도 없게 만듭니다.


결국 확장성 문제를 근원적으로 해결할 수 있어야, 플랫폼의 대중적인 사용에 적합할 수 있게 됩니다. 트랜잭션 처리가 빠르다는 것은 곧 네트워크가 원활하다는 증거이고, 그에 따라 네트워크 사용 수수료를 저렴하게 만듦으로써 수많은 dApp들을 유치할 수 있는 환경이 됩니다.


#2. 썬더코어의 확장성 해결 방안 : 썬더 프로토콜

블록체인 프로젝트에서 확장성을 높이기 위해서는 노드 수를 줄이는 것이 필수적입니다. 다음과 같이 노드 수와 속도를 동시에 고려한 일련의 스펙트럼을 생각해봅시다. 극단적으로 중앙화된 주체가 모든 트랜잭션을 처리하면 가장 속도가 빠르겠지만(리플), 모든 거래 참가자가 블록을 생성하게 한다면 속도는 극도로 늦지만 탈중앙화의 특성을 극대화할 수 있게 됩니다(이더리움 및 비트코인). 그리고 그 중간적인 상황에서 현실적인 속도를 높이려면 블록을 생성하는 노드를 줄이거나 위임하는 것이 필요합니다.


1557504040425178_646d262662.png


썬더코어도 역시 확장성 문제를 해결하기 위해 "중앙화된 접근법과 탈중앙화된 접근법을 결합"합니다(Thunderella Protocol). 그러나 특이한 점은 상황에 따라 블록생성의 처리 방법을 달리한다는 점입니다.


1) 빠른 속도가 중요한 상황 : Fast-Path

플랫폼이 안정적인 '일상적인 상황'에서는 빠른 속도가 중요해집니다. dApp 사용자들이 무리없이 플랫폼을 활용하고, 또 거래가 원활하게 이뤄지는 게 필요하니까요. 이런 보통의 상황에서는 트랜잭션 처리 속도를 높이기 위해 중앙화된 방식을 활용합니다. 썬더코어에서 블록 생성 주체는 곧 위원회(committee)와 액셀러레이터(Accelerator), 이 두 주체로 양분됩니다. 썬더코어에서는 홀더들이 500개 노드를 선출하고, 그들의 구성을 위원회라 부릅니다. 그리고 이들이 블록 생성을 담당합니다. 그리고 액셀러레이터는 트랜잭션을 신속하게 정렬하고, 빠르게 처리하기 위해 조성된 중앙화된 주체입니다. Fast-Path 프로토콜은 이 두 블록생성 주체의 상호작용으로 이뤄지게 됩니다.


[ Fast-Path의 메커니즘 ]

 

첫째, 액셀러레이터의 선정 : 초기 썬더코어에서는 단일 중앙 주체가 액셀러레이터의 지위를 보장받습니다(향후엔 복수의 액셀러레이터 시스템을 구현). 이것은 보통의 중앙화 프로젝트에서 거래를 처리하는 방식과 동일합니다.


둘째, 새로운 거래의 발생 : 플랫폼 상황이 정상적인 상황에서 새로운 거래가 발생하면, 액셀러레이터는 트랜잭션과 데이터를 일련의 기준에 따라 작은 블록으로 묶습니다. 그리고 그 미세 블록들에 서명을 한 후 위원회에 전송합니다.


셋째, 위원회의 블록 인식 : 위원회는 액셀러레이터가 전송한 미세 블록을 인식하지만, 한 번의 전송당 하나의 미세블록만을 인식할 수 있습니다.


넷째, 컨펌 : 액셀러레이터가 전송한 미세블록이 3/4의 위원회로부터 승인될 경우, 해당 블록은 무결한 것으로 합의하게 됩니다(썬더코어에서는 이를 공증된 미세 블록이라고 지칭).


결국 정상적으로 시스템이 돌아가는 상황에서는, 중앙화된 주체인 액셀러레이터가 신속하게 트랜잭션을 정렬하여 위원회에게 전송하고 위원회는 즉각 그 트랜잭션 더미들을 승인하는 과정을 거치게 됩니다. 이것은 수많은 노드들이 블록생성을 분담하는 퍼블릭 체인들에 비해 그 효율성이 크게 개선된 것입니다.


그러나 이 낙관적인 상황은 액셀러레이터가 올바르게 행동하고, 네트워크의 상황이 좋으며, 위원회의 3/4이 정상적으로 기능하고 있다는 것을 전제하고 있습니다. 만약 이들 조건이 하나라도 위배된다면 Fast-Path는 발현될 수 없습니다.


2) 속도보다 중요한 것이 생기는 상황 : Slow-Chain

만일 외부적인 공격이 가해져서 네트워크의 성능이 저해되거나 혹은 내부적으로 액셀러레이터의 '정직(honest)'에 손상이 가는 상황이 생긴다면, 더 이상 Fast-Path 프로토콜은 적용될 수 없습니다. 그러나 이런 비상한 상황에서도 비트코인이나 이더리움 네트워크와 마찬가지로 블록체인의 특성을 적용할 수 있습니다.


썬더코어에서 확장성을 높일 수 있었던 것은 액셀러레이터의 트랜잭션 분류 및 미세블록 생성이 신속하게 이뤄졌기 때문입니다. 그리고 그 미세블록은 바로 위원회에게 전송됨으로써, 블록의 컨펌도 즉각적으로 완료될 수 있었습니다. 그런데 이렇게 트랜잭션을 정렬하는 액셀러레이터 기능이 붕괴하더라도, 대부분의 스테이크 홀더 및 위원회가 정직한 경우 블록체인의 보안은 보장될 수 있습니다.


Cool-down : 일련의 부정 혹은 위협이 인지되는 경우, 그 증거를 확실히 발견할 때까지 위원회는 액셀러레이터로부터 서명이 담긴 미세블록을 받는 것을 중단합니다. 이것이 바로 Slow-chain의 상황으로 들어가기 위한 Cool-down 단계입니다. 이 상황에서는 누구든 새로운 트랜잭션을 slow-chain으로 전송할 수 있습니다. 


Slow Mode : Cool down이 끝나면 이제 모든 트랜잭션은 Slow-chain에서만 이뤄지게 되며, Fast Path는 비활성화된 상태로 전환됩니다. Slow Mode는 액셀러레이터의 오류 및 잘못이 수정될 때까지 지속되며, 준비가 되면 새로운 Fast-Path 프로토콜을 재부팅하게 됩니다.


Slow Mode는 PoS 합의 알고리즘을 채택한 이더리움 네트워크와 기능적으로 거의 유사한 것입니다. 비록 트랜잭션 처리와 블록생성의 속도는 정상적인 상황에 비해 상당히 느려지겠지만, 대부분의 시스템은 안정적으로 운영될 수 있습니다.


이처럼 썬더 프로토콜은 아주 영리한 방식으로 확장성 문제를 해결하고 있습니다. 가정상 '큰 문제가 생기지 않는 한' 빠른 속도와 신속한 트랜잭션 처리를 보장할 수 있고, 설령 문제가 발생하더라도 블록체인 시스템은 안정적으로 운영되기에 그때의 불편함을 조금 감수한다면 문제를 금방 수정할 수 있는 시간을 벌 수 있는 것이죠. 


오늘 글은 여기까지입니다! 편안한 주말 되시길 바라요!

 

 

출처: https://cobak.co.kr/community/3/post/175859

0 Comments
제목