샤딩이란 하나의 거대한 데이터베이스나 네트워크 시스템을 여러 개의 작은 조각으로 나누어 분산 저장하여 관리하는 것을 말한다. 샤딩을 통해 나누어진 블록들의 구간(Epoch)을 샤드(Shard)라고 부른다. 이는 단일 데이터를 다수의 데이터베이스로 쪼개어 나누는 걸 말하는데, 단일 데이터 베이스에서 저장하기 넌무 클 때 사용한다. 이를 통해 노드에 무겁게 가지고 있던 데이터를 빠르게 검증할 수 있어, 트랜잭션 속도를 향상시킬 수 있다.
샤딩은 데이터베이스 저장 기법 중 하나이며, 대용량의 데이터를 처리하기 위해 테이블을 수평 분할하여 데이터를 분산 저장하고 처리하는 것을 말한다. 블록체인에서는 전체 네트워크를 분할한 뒤 트랜잭션을 영역별로 저장한다. 그리고 이를 병렬적으로 처리하여 블록체인에 확장성을 부여하는 온체인 솔루션으로 데이터를 샤드라는 단위로 나눠서 저장 및 처리한다.
만약 10만큼의 데이터와 10명의 노드가 참여했다고 가정한다면 기존의 블록체인은 10명의 노드 개개인은 10만큼을 모두 가지고 있으면서 공유한다. 그러나, 샤딩은 10을 조각내서 10명의 노드 개개인은 1만큼씩만 보관함으로써 보관 데이터가 가벼워져 거래 처리속도가 크게 향샹된다.
샤딩은 블록체인 시스템의 확장성(Scalability) 문제를 해결하기 위한 방법 중의 하나이다. 확장성은 시간이 지남에 따라 생겨나는 변화를 받아들이는 능력이다. 시간이 지남에 따라 블록체인 기반 서비스는 대체로 사용자수가 증가하기 때문에, 확장성 문제란 결국 더 많은 사용자가 만들어내는 트랜잭션을 블록체인 시스템으로 처리할 수 있는 능력의 문제이다. 기존 비트코인과 이더리움의 경우 확장성 문제가 심각하여, TPS를 획기적으로 증가시키기 위한 다양한 방법이 고안되고 있었는데, 그 중 대표적인 것이 바로 샤딩이다.
샤딩은 플라즈마, 라이덴 네트워크 등과 마찬가지로 확장성 문제를 해결하기 위해 제안된 솔루션이다. 플라즈마, 라이덴 네트워크는 오프체인 솔루션이지만, 샤딩은 온체인 솔루션이다. 온체인(On-chain) 솔루션이란, 메인체인 자체의 프로토콜을 변경시켜서 메인체인의 성능을 항샹하는 방법을 말한다. 온체인 솔루션을 적용하기 위해서는 메인 네트워크의 하드 포크가 필수적으로, 오프체인 솔루션이 메인 체인 외부에 다른 시스템을 추가하여 해결하기 떄문에 하드 포크가 필요 없는것과 대비된다. 샤딩은 확장성 문제 솔루션 중 하나로, 이더리움 PoS(지분증명) 합의 알고리즘으로 전환할 것을 기반으로 설계되었다.
샤딩은 관계형 데이터베이스에서 대량의 데이터를 처리하기 위해서 데이터를 파티셔닝하는 기술이다. 파티셔닝은 데이터베이스 자체를 분할하는 방식으로 애플리케이션 레벨에서 구현해야 한다. 공개형 블록체인의 맥락에서, 네트워크에 올려진 트랜잭션은 네트워크상의 서로 다른 노드들로 이루어진 여러 샤드(Shards)로 분할된다. 각각의 노드는 들어오는 트랜잭션들의 일부만을 처리할수 있게되고, 네트워크상에서 병렬식으로 다른 노드들에서도 똑같이 실행된다. 따라서, 네트워크를 여러 샤드로 쪼개면 동시에 더 많은 트랜잭션을 처리하고 증명할 수 있어 네트워크가 커질수록 점점 더 많은 트랜잭션 처리가 가능하게 되는 속성을 가진다.
블록체인 시스템의 확장성 문제를 해결하기 위해 나온 기술이지만, 샤딩을 적용할 경우 한 샤드 내에서의 전송이 아닌 여러 샤드간의 전송은 절차가 훨씬 복잡하고 느려진다. 여러 샤드로 쪼갤수록 인터샤드 트랜잭션은 확률적으로 많아지는데 각 샤드는 자기 샤드의 데이터만 있고, 다른 샤드의 데이터는 가지고 있지 않으므로 샤드 간 데이터를 어떻게 참조할 것인지, 어떻게 검증할 것인지 문제가 생겨서 알고리즘이 복잡해진다.
또한, 샤딩이 들어가게 되면 전체의 안정성은 보장된다고 하더라도 시간이 지나면 샤드 간 불균형이 일어나 일부 샤드의 안정성이 취약해지는 문제가 발생할 수 있다. 샤드마다 트랜잭션의 빈도, 노드의 수, 밸리데이터의 비율 등에서 차이가 나기 때문에 한번 샤드가 정해진 다음에도, 샤드의 구성원을 재배치하여 샤드 간 균형을 맞추는 알고리즘이 필요하다. 게다가 예상했던 것보다 전체 트래픽이 높아질 경우, 처음 설정해둔 샤드의 수를 늘릴 필요가 있다.
이더리움 샤딩은 메인 체인이 처리해야 할 블록들을 조각 내어 샤드(Shard)라고 불리는 오프체인에 할당하는데, 오프체인들은 주어진 조각에 대해서만 유효성을 검증한다. 샤드들이 각자 할당된 조각들의 검증을 모두 끝내면 다시 묶는 방식을 사용하여 블록을 검증하는데 걸리는 시간을 단축한다. 이더리움의 블록 생성 속돈느 현재 13초이상 걸리고 있지만, 샤딩이 도입된다면 약 2초에서 8초사이로 줄어들 것이다. 샤드별로 머클 패트리샤 트리(Merkel Patricia Tree)를 만들고 그 샤드의 Root들로 만들어진 머클패트리샤 트리 루트만을 블록체인에 올리는 것으로 모든 Miner가 모든 트랜잭션을 실행할 필요 없이 샤드별로 Miner를 분산시켜서 실행할수 있기 때문에 전체 실행속도가 올라간다.