샤딩
샤딩(sharding)이란 하나의 거대한 데이터베이스나 네트워크 시스템을 여러 개의 작은 조각으로 나누어 분산 저장하여 관리하는 것을 말한다. 이는 단일의 데이터를 다수의 데이터 베이스로 쪼개어 나누는 걸 말하는데, 단일의 데이터 베이스에서 저장하기 너무 클 때 사용 하여 데이터를 구간 별로 쪼개어 나눔으로써 노드에 무겁게 가지고 있던 데이터를 빠르게 검증할 수 있어 빠른 트랜잭션 속도를 가질 수 있게 되며, 샤드란 샤딩을 통해 나누어진 블록들의 구간 (혹은 Epoch)을 '샤드' 라고 부른다.[1]
개요
샤딩은 전체 네트워크를 분할한 뒤 트랜잭션을 영역별로 저장하고 이를 병렬적으로 처리하여 블록체인에 확장성을 부여하는 On-Chain 솔루션 으로 데이터를 샤드라는 단위로 나눠서 저장 및 처리 하며 샤딩 개념의 근원은 데이터베이스 샤딩에 있고, 데이터베이스 샤딩이란 대용량의 데이터를 처리하기 위해 테이블을 수평 분할하여 데이터를 분산 저장하고 처리하는 것이다.[2]
등장배경
샤딩은 블록체인 시스템의 확장성(scalability) 문제를 해결하기 위한 방법 중 하나이다. 확장성은 시간이 지남에 따라 생겨나는 변화를 받아들이는 능력이다.[3] 시간이 지남에 따라 블록체인 기반 서비스는 대체로 사용자 수가 증가하기 때문에, 확장성 문제란 결국 더 많은 사용자들이 만들어내는 트랜잭션을 블록체인 시스템으로 처리할 수 있는 능력의 문제이다. 대개 블록체인의 확장성 지표로 TPS를 사용한다. TPS는 Transaction per Second의 약자로서 1초당 처리할 수 있는 트랜잭션의 개수를 나타내는 단위이다. 기존 비트코인과 이더리움의 경우 확장성 문제가 심각하여, TPS를 획기적으로 증가시키기 위한 다양한 방법이 고안되고 있는데, 그 중 대표적인 것이 샤딩이다. 샤딩은 플라즈마, 라이덴 네트워크 등과 마찬가지로 확장성 문제를 해결하기 위해 제안된 솔루션이고, 플라즈마, 라이덴 네트워크는 Off-chain 솔루션인 반면 샤딩은 On-chain 솔루션 이며, On-chain 솔루션이란 메인체인 자체의 프로토콜을 변경시켜서 메인체인의 성능을 향상시키는 방법을 말한다. On-chain 솔루션을 적용하기 위해서는 메인 네트워크의 하드 포크가 필수적 으로 Off-chain 솔루션이 메인체인 바깥에 다른 시스템을 추가하여 해결하기 때문에 하드 포크가 필요없는 것과 대비 되는데 확장성 문제 솔루션 중 하나로, 이더리움이 PoS (Proof of Stake) 합의 알고리즘으로 전환할 것을 기반으로 설계되었다.[2]
특징
샤딩은 관계형 데이터 베이스에서 대량의 데이터를 처리하기 위해서 데이터를 파티 셔닝 하는 기술로 파티셔닝은 DBMS에서 지원하기도 하는데, 일부 DBMS 에서는 지원 하지 않으며, DBMS 레벨에서 데이터를 나누는 것이 아니고 데이터베이스 자체를 분할 하는 방식으로 어플리케이션 레벨에서 구현해야 한다. 데이터베이스(database)가 여러 파편으로 분할되고 서로 다른 서버에 저장되는 전통적인 데이터베이스 샤딩 개념에서 영감을 받은 확장성 기술이 샤딩으로 공개형 블록체인의 맥락에서, 네트워크에 올려진 트랜잭션은 네트워크 상의 서로 다른 노드들로 이루어진 여러 샤드(shards)로 분할되어 각각의 노드는 들어오는 트랜잭션들의 일부만을 처리할 수 있게 되고, 네트워크 상에서 병렬식으로 다른 노드들에서도 똑같이 실행되기에 네트워크를 여러 샤드들로 쪼개면 동시에 더 많은 트랜잭션을 처리하고 증명할 수 있어 네트워크가 커질수록 점점 더 많은 트랜잭션 처리가 가능하게 되는 속성을 병렬식 확장(horizontal scaling)이라고 도 불린다.[4] 샤딩은 단일의 데이터 베이스에서 저장하기 너무 클 때 사용 되고 이렇게 데이터를 구간 별로 쪼개어 나눔으로써 노드에 무겁게 가지고 있던 데이터를 빠르게 검증할 수 있어 빠른 트랜잭션 속도를 가질 수 있으며, 샤드란 샤딩을 통해 나누어진 블록들의 구간 (혹은 Epoch)을 '샤드'라고 부른다.
- 데이터베이스를 분활하는 방법
- Vertical Partitioning : 테이블 별로 서버를 분활하는 방식으로 구현이 간단하고, 전체 시스템에 큰변화가 필요없다는 장점이 있고 단점으로는 각 서버의 데이터가 점점 거대해지면 추가 샤딩이 필요하다.
- Range Based Partitionging : 하나의 feature가 점점 거대해지는 경우 서버를 분리하는 방식 이며, 유저 별로 서버를 분리하거나, 일정 데이터라면 년도 별로 분리, 거래정보 라면 우편번호를 이용 하고 주의 사항으론 데이터를 분활하는 방법이 예측가능 해야 한다.
- Key or Hash Based Partitioning : 엔티티를 해쉬함수에 넣어서 나오는 값을 이용해서 서버를 정하는 방식으로 해쉬결과 데이터가 균등하게 분포되도록 해쉬 함수를 정하는게 중요하며, 서버의 수를 늘리기 위해 해쉬함수를 변경하는 작업이 정말 비싼 작업 이라는 단점이 있다.
- Directory Based Partitioning : 파티셔닝 메커니즘을 제공하는 추상화된 서비스를 만드는 것으로 샤드키를 look-up 할수 있으면 되므로, 구현은 DB와 cach를 적절히 조합해서 만든다.
- 샤딩 체인 동작방식
- proposer가 되고 싶은 네트워크 참여자는 SMC를 통해 balance를 예치 한다.
- collator가 되고 싶은 네트워크 참여자는 SMC를 통해 deposit을 예치 한다.
- Collator들은 주기적으로 SMC status를 확인해서, 자신이 collator에 선정되었는지 여부를 확인 한다.
- Collator들은 SMC에 의해 각 샤드체인에 pseudo-random하게 배정 되고, lookahead period 동안에 해당 샤드의 이전 기록들(state)을 다운받으면 선택된 proposal을 제안한 proposer로부터 proposal bid를 받는다.
- Proposer는 트랜잭션을 담은 proposal을 collator에게 제출 하는데, proposal은 아직 검증되지 않은 collation을 의미 하며, 선택된 proposal을 제출한 proposer는 트랜잭션 발송자로부터 트랜잭션 fee를 받는다.
- Collator들은 해당 proposal에 속한 트랜잭션들이 valid한지를 검증하는 투표를 한다.
- 표에서 2/3 이상의 collator들이 proposal에 포함된 트랜잭션이 valid 하다고 찬성할 경우, 해당 proposal은 유효한 collation이 된다.
- 주요 용어
- Collation : 샤드 체인에서 메인 체인의 블록과 같은 역할을 하며, 크게 collation header와 트랜잭션 목록으로 구성된다.
- Collation header : collation을 구성하는 정보를 담고있으며, proposer의 sign을 거쳐 메인 체인에 제출 하고, 트랜잭션 목록은 collation에 담긴 트랜잭션들의 목록이다.
- Proposer : 제안자라는 뜻으로 트랜잭션들을 모아 proposal을 만들고 collator에게 제출 하며, Proposal은 검증되지 않은 collation이다.
- Collator : Proposer가 제출한 proposal을 검증한다. period 마다 한 샤드에는 여러 collator들이 배정되는데 이들은 해당 period에 진입하기 일정 기간 이전에 무작위로 선정 된다.
- Executor : Collation header를 메인체인의 SMC (Sharding Manager Contract) 에 전달 하고, 샤드 체인의 실제 state가 변경된다. (Executor는 샤딩 phase 3에 등장)
- Period : 메인 체인에서 샤드 체인의 collation header를 제출 받는 주기 이며, 단위는 메인 체인에서의 블록의 개수로 PERIOD_LENGTH = 5 라면 5개의 블록이 생성되는 것이 1 period이다.
- Lookahead period : Collator는 샤드체인에서 collation을 검증하기 이전에 SMC에 의해 의해 pseudo-random하게 배정 되는데, 'lookahead period'는 collator가 몇 period에 앞서서 어떤 샤드 체인에 배정되는지를 나타 내고, LOOKAHEAD_PERIODS = 4이면 4 period 이전에 collator는 샤드 체인에 배정되므로 Collator는 사전에 자신이 배정된 샤드 체인의 state 정보를 다운받는 시간을 확보할 수 있다.
- Sharding Manager Contract (SMC) : SMC는 샤드체인에서 가장 중요한 역할을하는 스마트 컨트랙트 로 SMC는 메인 체인과 샤드 체인을 연결하며, collator, proposer, collation tree를 관리 하며, 샤드체인이 메인체인에 참여하기 위해서는 SMC의 역할이 필수적이다.
- 샤딩의 문제점
- 확장성의 문제를 해결방책으로 나온 샤딩에 중앙화의 문제와 보안성의 문제를 가지게 되는데 보안의 문제에는 1% attack의 문제가 생길 수 있고, 100개의 샤드의 시스템에서는 오직 1%의 hash rate로 샤드를 지배할 수 있어 샤드 간의 커뮤니케이션이 너무 빈번하게 일어난다면, 커뮤니케이션으로 인한 시간지연의 문제가 생기게 된다.[1] 데이터 재분배(Rebalancing data) 로는 Sharding된 DB의 물리적인 용량 한계나 성능 한계에 다르면 shard의 수를 늘리는 scale-up 작업이 필요 하며 서비스 정지 없이 scale-up 할수 있도록 설계 방향을 잡아야 하며, Global Transaction 을 사용하면 샤드 DB 간의 트랜잭션도 가능하여 XA임에도 성능저하의 문제가 있다.[5]
- 이더리움 샤딩
- 비탈릭 부테린 이더리움 창시자 이며, 이더리움 샤딩은 메인 체인이 처리해야 할 블록들을 조각내어 샤드(Shard)라고 불리는 오프 체인(off-chain)에 할당 하는데 오프 체인들은 주어진 조각에 대해서만 유효성을 검증하게 되고, 샤드들이 각자 할당된 조각들의 검증을 모두 끝내면 다시 묶어 이러한 개념을 통해 블록을 검증하는데 걸리는 시간을 단축시키며, 이더리움의 블록 생성 속도는 13초 이상 걸리고 있지만 샤딩이 도입된다면 약 2초에서 8초 사이에 생성될 것이다.[6] 샤드별로 merkle patricia tree를 만들고 그 샤드의 root들로 만들어진 merkle partricia tree의 root만을 블록체인에 올리는 것으로 모든 miner가 모든 트랜잭션을 실행할 필요 없이 각 샤드별로 miner를 분산시켜 실행할 수 있기 때문에 전체 실행 속도가 올라간다. 이더리움 2.0으로 통하는 차세대 이더리움 블록체인을 기술적으로 상징하는 특징은 캐스퍼로 대표되는 새로운 합의 메커니즘과 샤딩을 이더리움 창시자 비탈릭 부테린이 직접 나서 차세대 이더리움을 이끌 원투펀치로 캐스퍼와 샤딩을 적극 프로모션하고 있다.[7]
- 이더리움 샤딩의 문제점
- 난수생성 : 난수를 사용하여 검증자를 샤드에 배정하는데, 공격자가 난수를 예측하거나 조작할 수 있어, 샤딩 보안에 문제가 생긴다.
- 빠른 샤드 전환 : 샤드에 대한 공격 성공 가능성을 줄이려면 검증자를 빠르게 전환해야 하는데 이전부터 lookahead time을 두어 검증자가 자신이 맡을 샤드 블록을 미리 동기화 시키고, 미리 동기화하기 위해서는 동기화할 자료를 줄여서 빠르게 검증자를 준비할 수 있는 stateless client를 제안 한다. stateless client는 블록 헤더만을 저장 하지만 블록헤더만을 저장하기 때문에 거래에 대한 검증은 불가능 하여 거래 검증을 하려면 거래를 만들 때, 검증에 필요한 witness를 첨부해야 한다.
- 자료 가용성 (Data Availability) : 모두가 stateless client라면 블록의 내용을 손실할 수 있기 때문에 누군가는 state를 저장하고 있도록 적절한 보상과 검증 (Proof of Custody)가 필요 하다. Fisherman 딜레마는 Erasure Coding으로 해결 했다.
- 검증자간 효율적인 통신 : 샤드 배정이 자주 바뀌는 상황에서 샤드 검증자들끼리의 효율적인 P2P 통신은 필수적 이며, libp2p의 floodsub와 gossipsub 가 사용된다.
- 샤드 간 비동기 통신 : 거래 당사자나 스마트 계약이 여러 샤드에 나누어져 있다면 샤드 간의 통신(cross-shard communication)이 필요 하지만 여러 단계를 거치게 되어 시간이 오래 걸리므로 결국 메인 체인에 무리를 주게되고 이렇게 샤드 간 통신이 너무 자주 일어난다면 샤딩이 가지고 있는 장점은 사라진다. 이에 이더리움은 crosslink를 가지고 메인체인의 무리를 덜고, yanking으로 필요한 스마트 계약을 현재 샤드로 가져와 샤드 간의 통신을 줄이고자 현재 지연상태 전이 (delayed state transition)을 통한 샤드 간의 비동기 통신도 구상 중에 있다고 한다.
- 질리카 샤딩
- 질리카의 샤딩 기술은 네트워크 샤딩(network sharding), 트랜잭션 샤딩(transaction sharding), 연산 샤딩(computational sharding)과 같은 다양한 형태로 구성되어 있고 그중 네트워크 샤딩은 질리카 채굴 네트워크를 샤드(shard)라는 작은 노드 그룹으로 나눌 수 있는 메커니즘이다. 이 네트워크 샤딩은 질리카를 확장시킬 수 있는 도구로서, 이 샤딩을 활용하게 되면 초당 수천 건의 트랜잭션 처리가 가능해진다. 질리카는 샤딩 기술을 통해 노드가 많아질수록 처리 속도가 더욱 빨라진다. 질리카는 채굴 네트워크를 작은 그룹으로 나눠 병렬로 트랜잭션을 처리하기 때문에 네트워크 크기가 증가할수록 처리할 수 있는 트랜잭션 수가 선형적으로 증가하여 블록체인의 확장성 문제를 해결할 수 있으며, 테스트넷에서 총 3,600 노드가 참가하여 1초당 2,488개의 트랜잭션을 처리했다. 질리카는 2018년 싱가포르에서 열린 밋업에서 진행된 테스트에서 1개 샤드로 481 TPS, 2개 샤드로 995 TPS, 4개 샤드로 1,967 TPS, 그리고 6개 샤드로 2,828 TPS를 달성하면서"네트워크 수 증가에 따른 트랜잭션 수의 선형적 증가"를 보여줬다.
종류
- 데이터베이스 샤딩(database sharding) : 하나의 거대한 데이터베이스 테이블을 수평 분할(horizontal partitioning)하여 여러 개의 작은 단위로 나눈 후, 물리적으로 다른 위치에 분산하여 저장·관리하는 기술이다. 이 때 수평 분할된 1개의 작은 테이블을 샤드(shard)라고 한다.
- 네트워크 샤딩(network sharding) : 블록체인 기반 암호화폐를 채굴하기 위한 네트워크를 샤드(shard)라는 작은 노드 그룹으로 나누어 관리하는 기술이다. 네트워크 샤딩은 임의로 네트워크가 무작위로 노드를 샘플링하여 블록 단위로 샤드를 형성 하지만, 네트워크가 샤드의 구성원에 대한 동의를 구하지 않아 구성원들이 원하는 방향으로 가지 않는 경우, 구성원들의 불만을 해결하지 못한다는 단점을 가지고 있다.[1]
- 트랜잭션 샤딩 : 트랜잭션 해시의 마지막 몇 비트를 기반으로 샤드를 결정하고 트랜잭션의 유효성을 확인 하지만, 사용자가 악의적인 경우, 동일한 두 입력이지만 출력이 다른 트랜잭션을 생성할 수 있고, 이중 지출을 방지하기 위해 유효기간이 진행되는 동안에 샤딩이 된 조각의 노드들은 서로 간에 통신이 필요 하다.[1]
- 스테이트 샤딩 : account-based model 로, 상태가 지정된 블록체인에서이 특정 샤드는 상태의 일부만을 유지 하지만, 교차분할 트랜잭션을 수행하지 못하도록 제한 되고, 시스템의 상태가 모든 샤드에 복제되어 있지 않기 때문에 네트워크는 더 이상 오프라인 샤드에 대한 트랜잭션의 요효성을 검사하지 못하게 되는데 오프라인 샤드를 유지하기 위해 백업 노드를 갖게된다면 중앙집중식이 되어 보안성에 위협 되어 네트워크가 한 번씩 재편성될 때 한 번에 네트워크를 전환하게 되면 일부 동기화가 완료될 때까지 전체 시스템을 사용할 수 없게 된다.[1]
활용
- 싱가포르의 신슈 동이 개발한 암호화폐인 질리카(Zilliqa)는 샤딩 기술을 활용함으로써 트랜잭션 처리 속도를 획기적으로 향상시켰다. 질리카의 샤딩 기술은 네트워크 샤딩(network sharding), 트랜잭션 샤딩(transaction sharding), 연산 샤딩(computational sharding)과 같은 다양한 형태로 구성되어 있다. 그 중 가장 중요한 건 네트워크 샤딩인데, 네트워크 샤딩은 질리카 채굴 네트워크를 샤드(shard)라는 작은 노드 그룹으로 나눌 수 있는 메커니즘이다. 이 네트워크 샤딩은 질리카를 확장시킬 수 있는 도구로서, 이 샤딩을 활용하게 되면 초당 수천 건의 트랜잭션 처리가 가능해진다.
- 샤딩은 블록체인 확장성에 대한 하나의 해결책으로 네트워크가 블록의 유효성을 검증하는 방식을 바꿈으로써 처리량의 증대를 가져 오는데 모든 온체인(on-chain) 확장성 솔루션 가운데 샤딩을 특별하게 만드는 핵심적인 특징은 병렬식 확장성(horizontal scaling)이다 예를 들어, 채굴 네트워크가 확장할수록 처리량이 증가 하면, 샤딩의 이 독특한 특성은 블록체인의 빠른 채택을 촉진하는 이상적인 촉매재가 될 수 있다.[4]
사례
- 비탈릭 부테린은 이더리움의 확장성을 보안 하기 위해 샤딩을 도입 하겠다고 밝혔다. 샤딩이 도입되면 각 샤드가 계정별로 트랜잭션을 나눠 처리하고 승인 하고 블록체인 네트워크 참여자의 모든 주소를 일정한 갯수로 잘라 각 덩어리를 하나의 연방으로 구성하는 방식 이며, 이더리움의 경우에는 전체 계좌에서 0x00부터 시작되는 계정들은 1번 샤드에서 관리하고 0x01부터 시작하는 계정은 2번 샤드에서 관리하는 식으로 샤드 1에 속하는 요청자가 트랜잭션을 발생시키면 해당 트랜잭션은 샤드 1의 오퍼레이션 노드로 전파되고 블록 제한자, 실행자, 검증자의 검증을 거치고 이상이 없다면 샤드 1에 들어있는 EVM이 컨트랙트의 코드를 실행시키고 스테이트 변경함수를 통해 기존 스테이트는 새로운 값으로 변경된다.[8]
- 아이비즈소프트웨어는 샤딩기술을 적용한 베리드 엔터프라이즈 에디션을 도입할 수 있는 대표적사례로써 통합인증(Single Sign On, 'SSO')서비스는 블록체인 기반 SSO는 한 번의 로그인으로 다양한 앱에 동시 접속을 가능하게 하여 ID, 패스워드에 대한 보안 강화와 고객 및 직원들에게 보다 나은 사용자 환경을 제공해 왔고 베리드 엔터프라이즈 에디션으로 SSO 서비스에서 요구하는 10,000TPS 이상의 처리속도를 제공하는 블록체인 기반 SSO 서비스를 제공, 손쉬운 비즈니스 도입을 위해 하이퍼렛져의 환경구성과 기업 시스템과의 연동을 위한 SSO API 서버 구축, 성능 측정 결과 리포트 등의 기능을 제공할 것이라고 말했다.[9]
각주
- ↑ 1.0 1.1 1.2 1.3 1.4 sobly tv, 〈샤딩이란? 쉽게 이해해보자〉,《medium》, 2018-09-03
- ↑ 2.0 2.1 오세진, 〈블록체인 확장성 솔루션 시리즈 4–1 :: Sharding 샤딩〉, 《medium》, 2018-06-08
- ↑ 고란 기자, 〈성공한 플랫폼은 보이지 않는다〉, 《중앙일보》, 2018-10-17
- ↑ 4.0 4.1 phuzion7, 〈블록체인 샤딩의 3가지 형태: BlockChain Sharding〉,《데일리 코인뉴스》, 2018-12-31
- ↑ hanburn, 〈샤딩(sharding)이란?〉,《티스토리》, 2012-01-17
- ↑ KMK, 〈샤딩(Sharding)이란? 이더리움의 확장성 문제, 질리카의 기술〉,《네이버》, 2018-07-17
- ↑ 황치규 기자, 〈캐스퍼와 샤딩 무장한 '이더리움 2.0' 시대 열린다〉,《더비체인》, 2018-08-27
- ↑ 강민승 기자, 〈블록체인 성능 향상에 필수 `샤딩`…"쪼개라, 빨라질 것이니"〉,《매일경제》, 2018-12-21
- ↑ 장윤영 기장, 〈샤딩 적용한 더 빠르고 향상된 기업용 블록체인 '베리드 엔터프라이즈 에디션'〉,《전자신문》, 2019-06-26
참고자료
- sobly tv, 〈샤딩이란? 쉽게 이해해보자〉, 《미디엄》, 2018-09-03
- 고란 기자, 〈성공한 플랫폼은 보이지 않는다〉, 《중앙일보》, 2018-10-17
- 〈Shard (database architecture)〉, 《위키백과》
- 핵심만 콕콕! 암호화폐 분석, 〈이더리움의 샤딩(Sharding) 기술은 무엇인가? 이더리움의 진화〉, 《블록센스》, 2018-06-30
- 오세진, 〈블록체인 확장성 솔루션 시리즈 4–1 :: Sharding 샤딩〉, 《medium》, 2018-06-08
- sobly tv, 〈샤딩이란? 쉽게 이해해보자〉,《medium》, 2018-09-03
- hanburn, 〈샤딩(sharding)이란?〉,《티스토리》, 2012-01-17
같이 보기