블록체인에서의 샤딩(sharding)이란?
안녕하세요, Crypto Asset Value(CAV)의 Seagull입니다. 이번 시간에는 블록체인의 확장성 솔루션 중 하나인 샤딩(Sharding)에 대해 알아보려고 합니다. 이번 글은 CAV팀의 박정준님과 함께 작성하였습니다. 박정준님은 2017년 8월부터 이더리움 개발을 진행해오신 블록체인 개발자입니다.
1. 기존 데이터베이스에서의 샤딩
샤드는 기존 데이터베이스에서 가지고 있던 개념입니다. 샤드는 데이터베이스 데이터의 ‘수평 분할’이라고 말할 수 있으며, 개개의 분할된 데이터 묶음(파티션)을 샤드, 또는 데이터베이스 샤드라고 부릅니다. 이 개념이 등장하게 된 이유는 어떠한 DB에서의 과도한 데이터 저장으로 일어나는 문제 때문입니다. 만약 DB가 방대한 양의 데이터를 저장하다 보면, 어느 순간 단일 노드의 하드웨어 한도를 초과할 수도 있고(DB용량 한도를 넘어간거죠), DB에서 어떠한 데이터를 찾으려고 하는 검색 요청을 할 시 데이터가 느리게 찾아지는 등의 문제점이 생깁니다. 이것을 해결하고자, 데이터를 샤드라는 조각으로 분할하는 기능을 이용해 더욱 큰 용량의 데이터 저장이 가능해졌고, 빠른 검색이 가능해졌죠.
2. 이더리움 샤딩 등장 배경
2017년 말, 크립토키티의 인기가 이더리움 네트워크를 마비시키기에 이릅니다. 많아야 초당 20TPS 정도를 처리할 수 있었던 이더리움은 이 엄청난 트랜잭션을 감당할 수 없었습니다. 이 글을 쓰는 지금 https://ethgasstation.info/에 따르면 일반적인 거래 처리에 5gwei가 든다면, 저 당시에는 40gwei, 극단적으로는 100gwei 이상까지 이더리움 트랜잭션을 일으키기 위해 gas price가 상승했습니다. 이것만이 이유는 아니지만, 비싼 수수료는 이더리움의 킬러 앱이 등장하는 것을 저해하는데 영향을 끼쳤고 사람들은 이더리움의 한계점을 느끼게 됩니다. 이 당시 이더리움의 확장성을 해결하기 위해 여러 방법들이 시도되고 있었고, 많은 확장성 솔루션 프로젝트들이 관심을 받기 시작했으며 그 중 하나가 샤딩입니다.(블록체인에서의 샤딩 적용 이야기가 나온 건 2017년 전입니다.)
3. 이더리움에서의 샤딩이란?
샤딩은 플라즈마, 라이덴 네트워크 등과 함께 이더리움의 확장성 문제를 해결하려는 솔루션입니다. 다만 플라즈마와 라이덴 네트워크 솔루션은 오프체인 솔루션인 반면 샤딩은 온체인 솔루션입니다. 이 말은 독자적으로 서비스를 진행할 수 없고 메인 네트워크를 하드포킹하여 샤딩 솔루션을 넣어야 한다는 것입니다.
샤딩은 전체 블록체인 네트워크를 일정 부분씩 분할하여 트랜잭션을 각각 검증하고 저장합니다. 예를 들어, 블록체인을 100개의 샤드로 분할하면, 100개의 샤드에서 각각 트랜잭션을 검증하고 저장하기 때문에 블록체인에서의 거래 처리 속도가 굉장히 빨라지게 됩니다.
4. 샤딩에서의 역할, 용어정리
들어가기에 앞서, 새로 나타난 블록체인 네트워크 참여자들에 대한 용어정리가 필요합니다.
Proposer : 영어 그대로 제안자라는 뜻입니다. 샤드에서의 트랜잭션들을 모아 proposal(제안)을 만들고 이를 Collator에게 전달합니다.
Collator : 역시 영어 그대로 모아주는 사람, 혹은 교정자입니다. 이들은 Proposer가 전달해 준 Proposal을 검증하게 됩니다. 하나의 샤드에는 여러 Collator가 배정되는데, 이들은 검증 전 무작위로 선정되어 배치됩니다.
Executor : 영어 그대로 집행자입니다. Collation(샤드에서의 Block 개념)의 헤더를 메인체인의 Sharding Manager Contract에 전달하는 역할을 담당합니다.(추후에 추가될 개념이고, 초기에는 Collator가 직접 Collation header를 Sharding Manager Contract에 전달한다고 합니다.)
여기서 Sharding Manager Contract(SMC)는 샤딩을 이루는 데 가장 중요한 역할을 담당하고 있는 컨트랙트로, 이들이 메인체인과 샤드를 연결하는 다리 역할을 합니다. SMC가 하는 역할을 자세히 살펴봅시다.
Collator가 되려면 일정량의 예치금을 내야 하는데, 이 예치금은 Collator가 악의적인 행동을 하는 것을 방지하게 합니다.(악의적은 행동을 하면 예치금이 사라지기 때문입니다.) 여기서 이 예치금을 받고 관리하는 곳이 바로 SMC입니다.
앞에서 Collator를 무작위로 샤드에 배치한다고 하였는데, 이것을 하는 곳이 SMC입니다. 무작위로 배치하는 이유는 Collator의 악의적인 행동을 방지하기 위해서입니다.
Executor가 제출한 Collation 헤더를 검증하는 역할을 합니다. SMC가 검증하고 인정해야만 Collation이 유효해집니다.
샤드 간 트랜잭션을 전송하기 위해서는 receipt라는 것이 필요한데, 이것을 관리하는 것도 SMC입니다.
추후에 설명하겠지만, 블록을 생성하기 위해서는 Collator들의 투표가 필요한데, 이 투표를 SMC위에서 진행하게 됩니다.
5. 샤드 내의 트랜잭션 처리 Flow
이제 샤딩으로 어떻게 트랜잭션을 처리하고 검증하는지 알아봅시다.
Proposer와 Collator가 SMC를 통해 자산을 예치하고 샤드 네트워크에 참여합니다.
Collator가 SMC를 통해 각 샤드에 무작위적으로 배치됩니다. 배치되고 실제 Collator의 역할을 수행하기까지 일정 시간이 준비기간으로 주어지는데(lookahead period), 이 때 각 Collator들은 배치된 샤드의 예전 기록을 다운받게 됩니다.
Collator의 역할이 수행되고, 이들은 Proposer들이 보내는 Proposal을 받게 됩니다.
Collator들은 Proposal 내에 있는 트랜잭션들이 유효한 지를 검증하는 투표를 진행합니다. 이 투표에서 트랜잭션이 유효하다는 것에 대한 찬성표가 2/3이상이 나올 경우 이 proposal은 유효한 것으로 간주됩니다.
Collator들이 맡은 기간이 종료되면, 이 때 새롭게 생성된 collation header를 SMC로 보냅니다.
이 collation header를 SMC에서 검증하고, 유효한 데이터라는 검증이 완료되면 메인체인에 이것이 기록됩니다.
6. 다른 샤드간의 트랜잭션 처리 Flow
샤드들이 나뉘어져 있으면 샤드 간의 트랜잭션도 일어날 텐데, 이것에 대한 처리 Flow도 알아봅시다. 샤드1의 계좌A에서 샤드2의 계좌B로 보내는 Flow입니다.
샤드1에 있는 계좌A의 잔고에서 100이더를 차감하고 receipt를 만듭니다.
이 트랜잭션이 Collation에 포함되고 Collator가 이를 SMC로 보내 검증합니다.
검증이 완료되고, 이것이 메인체인에 포함되면 SMC가 이 트랜잭션을 샤드2로 전달합니다.
샤드2는 이 receipt를 전달받고 receipt가 현재 소비되지 않았는지 확인합니다.
소비되지 않았다면 샤드2에 존재하는 계좌B의 잔고를 100이더만큼 증가시키고 receipt의 상태를 spend로 변경시킵니다.
receipt의 spend 데이터가 위와 동일한 과정을 거쳐 샤드1로 전달되고, 샤드1은 receipt를 삭제하는 것으로 거래가 완료됩니다.
7. 샤딩의 장단점
샤딩은 대용량 정보를 처리하는 데 있어 분산화가 되어있어 노드별로 용량 부담이 저하됩니다. 또한 트랜잭션을 나눠서 처리하므로 네트워크에 과부하가 걸릴 가능성이 낮습니다. 그리고 샤딩은 일반적인 블록체인 노드보다 체계적인 정보 처리가 가능하므로 접근성이 향상됩니다. 위의 장점들을 통해 결과적으로 속도가 크게 향상된 블록체인을 만날 수 있습니다.
그러나 샤딩은 단점도 존재합니다. 일단, 샤딩은 무한정으로 분산하여 데이터를 처리할 수 없습니다. 너무나 크게 분산하여 데이터를 처리하게 되면 아래에 서술할 정보 손실 문제나 네트워크의 악의적 공격 문제가 쉽게 발생하게 됩니다. 정보 손실 문제란, 현재까지는 블록체인에서 풀 노드들이 모두 동일한 데이터를 가지고 있음으로 인해 특정 정보가 사라지는 문제를 생각하지 않아도 됐지만 샤딩은 모든 노드가 샤드된 정보를 다 들고 있을 수 없으므로 특정 노드의 데이터를 모두가 가지고 있지 않게 되었다면 정보가 손실되고, 이에 대한 블록체인의 무결성 문제가 생길 수 있습니다. 이를 해결하기 위한 방안히 필요하죠.
마치며
아직까지는 아이디어 단계에 머물러있는 샤딩인데, 이는 반대로 얘기하면 블록체인 상태에서의 샤딩을 이용할 때 문제점이 많다는 것이고, 이에 대한 해결책들이 아직 나오지 않았다는 것을 얘기합니다. 블록체인이 대중적으로 사용되기 위한 조건 중 하나인 확장성을 해결하기 위해 많은 시도가 이뤄지길 바랍니다. 감사합니다.
상세한 설명 감사합니다~
읽어주셔서 감사합니다 :)
짱짱맨 호출에 응답하여 보팅하였습니다.
좋은 글 감사합니다 잘 정리해주셨네요
데이타베이스와 블록체인 에서의 샤딩에 댜한 기술적인 내용을 쉽게 잘 설명해주셨네요.
이더리움 샤딩에 들어가니 또 무슨 투표 이런 것이 필요해지나 보군요.
넵ㅎㅎ 읽어주셔서 감사합니다 :)
좋은 정보 주셔서 제가 더 감사드립니다.