검수요청.png검수요청.png

트랜잭션 샤딩

위키원
(트랜젝션 샤딩에서 넘어옴)
이동: 둘러보기, 검색
질리카(Zilliqa)

트랜잭션 샤딩(transaction sharding)이란 2016년 질리카 팀이 공동 저술한 학술논문에서 처음 제시된 샤딩 기술이다. 트랜잭션은 네트워크에 도달할 때마다 특정 샤드에 할당되며 트랜잭션 송신 주소의 처음 몇 비트에 의해 결정되는 것을 트랜잭션 샤딩이라고 한다.

개요[편집]

트랜잭션 샤딩은 2016년 질리카 팀이 공동 저술한 학술 논문에서 처음 제시된 샤딩 기술이다. 트랜잭션 해시의 마지막 몇 비트를 기반으로 샤드를 결정하고 트랜잭션의 유효성을 확인한다.[1] 그러나 사용자가 악의적인 경우 동일한 두 입력이지만 출력이 다른 트랜잭션을 생성할 수 있으며, 이중 지출을 방지하기 위해 유효기간이 진행되는 동안에 샤딩이 된 조각의 노드들은 서로 간에 통신이 필요로 하고, 이때 통신 비용 발생한다.[2]

특징[편집]

트랜잭션 샤딩은 스마트 컨트랙트가 없는 비트코인과 같은 시스템에서 트랜잭션 샤딩을 도입한다면, 비트코인은 시스템의 상태(state)를 UTXO(Unspent Transaction Outputs)를 사용해서 정의하는데, 네트워크가 이미 샤드로 이루어져 있고 한 사용자가 트랜잭션 하나를 보낸다고 가정해보면, 트랜잭션은 두 개의 입력(input)과 하나의 출력(output)을 가지고, 트랜잭션을 샤드에 할당하기 위해선 트랜잭션 해시(hash)의 마지막 몇 비트에 기반해서 샤드를 결정하는 것이다. 예를 들면, 해시의 마지막 비트가 '0'이라면, 그 트랜잭션은 샤드가 두 개뿐이라는 가정하에 첫 번째 샤드에 할당되고, 두 번째 샤드에 할당한다면, 트랜잭션은 단일 샤드에서 유효성을 검증받는다. 그러나, 사용자가 악의적인 경우에 동일한 두 개의 입력과 하나의 다른 출력을 가진 또 다른 트랜잭션을 생성할 수 있는데, 이중지불(double spend)이 있다. 두 번째 트랜잭션은 다른 해시를 가질 것이므로 두 트랜잭션은 결국 다른 샤드로 할당된다. 각각의 샤드는 수신된 트랜잭션을 따로따로 검증하지만 분명한 이중 지불 트랜잭션이 다른 샤드 내에서 유효성을 가진다.[3]

이중 지불을 방지하기 위해서는, 샤드들이 유효성을 검증하는 동안 서로 정보를 교환할 수 있어야 하는데, 이중 지불 트랜잭션은 모든 샤드에 있을 수 있어서 트랜잭션을 받는 샤드는 다른 모든 샤드와 통신을 해야 한다. 조정을 위해 소모되는 자원인 통신 비용(communicaiton overhead)이 사실은 트랜잭션 샤딩의 모든 목적을 해칠수도 있고, 각 구성 요소들의 소통을 위해 계산 능력의 일부가 통신 프로토콜 지원과 처리에 소모된다. 스마트 컨트랙트가 없는 계정-기반 시스템(account-based system : 비트코인은 UTXO를, 이더리움은 계정(Account)을 사용)을 가질 때 문제는 훨씬 쉽게 해결되며, 각각의 트랜잭션은 발신자의 주소를 가지고 발신자의 주소에 기반해서 샤드에 할당할 수 있다. 두 개의 이중 지불 트랜잭션이 동일한 샤드에서 검증을 받게 되고 따라서 샤드 간 소통 없이도 쉽게 추적 된다.[3]

  • 샤딩 전략
트랜잭션 샤딩은 블록체인 네트워크의 노드들이 서로 다른 샤드로 분할되고, 각각의 샤드가 처리 과정을 거쳐 서로 다른 트랜잭션의 부분 집합에 대해서 합의에 도달한다. 서로 연결되지 않은 트랜잭션의 부분 집합들이 병렬식으로 처리되는 이 방식에서 트랜잭션 처리량은 수백-수천 배까지 상당하게 끌어 올릴 수 있다. 반면, 현재의 주류 공개형 블록체인상에서는, 트랜잭션, 스마트 컨트랙트 그리고 다양한 상태의 저장(storing)에 대한 책임을 모든 공개 노드들이 떠맡는데 블록체인을 지속해서 운영하기 위해 요구되는 저장 공간의 측면에서 엄청난 비용을 발생시킨다. 상태 샤딩으로 부르는 하나의 잠재적인 접근법은 이 문제를 해결하기 위해 제시되었는데, 핵심은 전체 저장소를 여러 파편으로 나누고 여러 샤드들이 서로 다른 파트를 저장하게 하면, 모든 노드는 전체 블록체인 상태(state)가 아닌 소속된 샤드의 데이터 처리만 책임지면 된다.[3]

장점과 문제점[편집]

  • 장점
트랜잭션 샤딩은 트랜잭션의 유효성을 확인하는 데 활용된다. 트랜잭션 샤딩에서는 블록체인 네트워크의 노드들이 서로 다른 샤드로 분할되고, 각각의 샤드가 처리 과정을 거쳐 서로 다른 트랜잭션의 부분 집합에 대해서 합의에 도달한다. 서로 연결되지 않은 트랜잭션의 부분 집합들이 병렬식으로 처리되는 이 방식에서 트랜잭션 처리량은 수천 배까지 상당하게 끌어 올릴 수 있다.
  • 문제점
사용자가 악의적인 경우, 동일한 두 입력이지만 출력이 다른 트랜잭션을 생성할 수 있다. 또한, 이중 지출을 방지하기 위해 유효기간이 진행되는 동안에 샤딩이 된 조각의 노드들은 서로 간에 통신이 필요하다. 통신은 그만큼의 시간과 비용이 따르게 된다.[1] 또한 현재의 주류 공개형 블록체인상에서는, 트랜잭션, 스마트 컨트랙트 그리고 다양한 상태의 저장(storing)에 대한 책임을 모든 공개 노드들이 떠맡는다. 이것은 블록체인을 지속해서 운영하기 위해 요구되는 저장 공간의 측면에서 엄청난 비용을 발생시킨다.[3] 그리고 네트워크가 과부하 되는 문제가 있으면 노드가 많아지면 개별 노드에 대한 해킹 가능성이 증가한다.[4]

활용[편집]

질리카 트랜잭션 샤딩

질리카[편집]

질리카(zilliqa)는 블록체인 확장성 문제 해결을 목표로 한 퍼블릭 블록체인이며, 샤딩(Sharding) 기술을 최초로 활용하여 노드와 트랜잭션 처리 효율을 월등히 증가했고, 질리카 테스트 넷에서 기록된 최대 TPS(초당 트랜잭션 수)는 2,828로 질리카는 우수한 트랜잭션 성능과 병렬 노드 처리를 장점으로 빠르게 성장하고 있다.[5] 질리카는 네트워크 샤딩 및 트랜잭션 샤딩을 사용하는데, 네트워크를 각각 수백 개의 노드가 있는 여러 샤드, 네트워크 샤딩으로 분할하고, 다른 트랜잭션이 동시에 다른 파편인 트랜잭션 샤딩에 의해 처리된다. 원자 트랜잭션 샤딩 프로토콜을 사용하는데, 샤딩이 없는 것처럼 최종 작업에서 네트워크에 의해 트랜잭션을 확인할 수 있으며, 트랜잭션을 보내는 계정을 기반으로 트랜잭션이 분할되는 질리카의 계정 기반 디자인을 통해 수행된다.[6] 동일한 샤드가 지정된 계정에서 이중 지출 또는 재생 악용을 방지 할 수 있으며, 샤드 간 통신 없이도 트랜잭션 커밋이 발생할 수 있음으로 네트워크 통신 속도가 느려지고 비용이 많이 들고, 동일한 메커니즘을 통해 트랜잭션을 블록체인의 합의 프로세스와 동시에 처리 할 수 ​​있다.

질리카는 높은 처리량 초당 수천 개의 TX로 인해 스토리지에 기가바이트의 데이터가 필요하다. 질리카는 상태 샤딩이 아닌 트랜잭션 샤딩을 채택했는데, 기본적으로 각 노드가 모든 데이터를 저장해야 함을 의미하고, 테라바이트 급 스토리지 만 사용 가능하다.[7] 가기.png 질리카에 대해 자세히 보기

온톨로지(ONT)

온톨로지[편집]

온톨로지(ontology) 샤딩 네트워크는 기존의 메인 체인 모델을 확장하고 위의 3차원을 지원하며 다층 네트워크 샤딩을 통해 초고 규모 네트워크 확장을 달성하는 계층적 네트워크 아키텍처를 채택하였고, 일반적인 트랜잭션은 서로 다른 샤드에서 실행되며 각 샤드는 독립적인 합의 알고리즘을 실행한다면, 온톨로지 트랜잭션 샤드는 스마트 계약을 기반으로 하여, 각 스마트 계약은 샤드 네트워크에서 실행되며, 스마트 계약을 호출하는 트랜잭션은 처리를 위해 해당 샤드 네트워크로 전송되어야 한다. 온톨로지 샤딩은 샤드 및 크로스 샤드 내에서 스마트 계약의 트랜잭션을 지원하고, 샤드 내 트랜잭션의 경우 단일 체인의 동기 트랜잭션 모델이 사용되며 크로스 샤드 트랜잭션은 새로운 비동기 트랜잭션 모델을 채택하여, MVCO(multi-version commitment ordering) 기반의 분산 트랜잭션 알고리즘은 높은 확장성 크로스 샤드 트랜잭션을 실현하였다. 샤드 성능은 네트워크에 참여하는 노드와 네트워크 성능에 의해서만 결정되고, 샤드는 안정적인 메시지 대기열을 통해 서로 통신하며 샤드 간 메시지의 검증 가능성은 메르켈 증거로 달성된다.[8]

가기.png 온톨로지에 대해 자세히 보기
온똘로지.PNG

타루시[편집]

트랜잭션 샤딩은 각각 수백 개의 노드를 포함하고, 거래는 다른 거래에 할당되며, 타루시(tarush)는 계정 지향 아키텍처를 사용하여 트랜잭션이 샤딩을 의미하는 것은 실제로 발신자의 계정에 따라 모든 비용으로 처리해 프로세스를 거치게 되고, 이중 지출과 관련된 모든 이벤트는 전송 노드의 샤드에 의해 상쇄된다.[9]

대안[편집]

  • 프랙티컬 비잔틴 장애 허용(PBFT)
프랙티컬 비잔틴 장애 허용(PBFT; Practical Byzantine Fault Tolerance) 은 보안 문제를 해결하기 위해 나온 해결책이다. 질리카 는 PBFT를 채택하여 보안 문제를 해결했다. PBFT의 보안 검증 순서를 보면 다음과 같다. 이러한 과정은 작업증명(PoW) 을 통해 각마이크로블록을 검증하고 검증된 블록이 최종 단계에서 종합된 형태로 검증되는 방식을 말한다.[4]
  1. 트랜잭션이 생성되고 트랜잭션을 검증할 샤드에 전송된다.
  2. 트랜잭션이 샤딩을 통해 마이크로블록(Microblock) 형태로 분할되며 각 마이크로블록은 여러 노드로 전송된다.
  3. 각 샤드는 받은 마이크로블록을 검증해 검증이 완료된 블록을 DS 위원회, DS Committee로 최종 검증을 위해 보낸다.
  4. DS 위원회는 마이크로블록을 종합해 하나의 블록으로 합치며 마지막으로 블록의 최종 검증을 한다.
  • 상태샤딩
상태샤딩(State Sharding)은 저장공간의 엄청난 비용을 해결하기 위해 나온 샤딩 전략이다. 전체 저장소를 여러 파편으로 나누고 여러 샤드들이 서로 다른 파트를 저장하게 하는 것이다 그러면 모든 노드는 전체 블록체인 상태(state)가 아닌 소속된 샤드의 데이터 처리만 책임지면 된다.[3]

사례[편집]

  • 한국의 IT 기업인 아이비즈소프트웨어는 2019년 6월 4일 기업용 블록체인 솔루션 '베리드 엔터프라이즈 에디션'이 빠르고 향상된 성능을 제공하기 위해 샤딩 기술을 적용해 출시했다. 블록체인은 노드가 늘어날수록 처리속도가 현저하게 줄어드는 데 반해, 샤딩이 적용되면 노드가 늘어날수록 도리어 속도가 빨라지게 되고, 기업에서는 블록체인 네트워크상에 발생하는 대규모 트랜잭션을 효과적으로 처리할 수 있으며, 베리드 엔터프라이즈 에디션은 해시의 마지막 몇 비트를 기반으로 샤드를 결정하고 트랜잭션의 유효성을 확인하는 트랜잭션 샤딩을 적용해, 초당 처리속도를 기본적으로 10,000TPS 이상 제공된다. 이러한 성능을 내려면 막대한 비용이 소모되므로 제공하려는 서비스의 규모에 맞는 적합한 형태로 설계하고, 구성해야 한다. 아이비즈소프트웨어는 샤딩 기술을 적용한 베리드 엔터프라이즈 에디션을 도입할 수 있는 대표적 사례로써 통합인증(Single Sign On, 'SSO') 서비스를 들었다.[10]

각주[편집]

  1. 1.0 1.1 sobly tv, 〈샤딩이란? 쉽게 이해해보자〉, 《미디엄》, 2018-09-03
  2. Las 낙서장, 〈Sharding (샤딩)〉, 《티스토리》, 2019-04-09
  3. 3.0 3.1 3.2 3.3 3.4 조용히떡상, 〈블록체인 샤딩의 3가지 형태: BLOCKCHAIN SHARDING〉, 《코박》, 2019-01-03
  4. 4.0 4.1 ICO of KOREA, 〈Zilliqa, 질리카(ZIL) 분석/ 샤딩의 원조는 나야!〉, 《네이버블로그》, 2018-06-07
  5. 박성현 기자, 〈질리카 (ZIL)〉, 《비트웹》, 2018-09-12
  6. Paul Payam Almasi, 〈Zilliqa the Holy Grail of Scalability?〉, 《해커눈》, 2018-07-14
  7. 질 리카 | 뛰어난 확장 성 문제 해결〉, 《blockspectator》
  8. 온톨로지 팀, 〈온톨로지 샤딩 디자인 출시〉, 《미디엄》, 2018-12-29
  9. 타루시 백서 - https://tarush.tech/Litepaper.pdf
  10. 복길샤롱_bitssong 기자, 〈샤딩 적용한 더 빠르고 향상된 기업용 블록체인 ‘베리드 엔터프라이즈 에디션’〉, 《도리도리》, 2019-06-30

참고자료[편집]

같이 보기[편집]


  검수요청.png검수요청.png 이 트랜잭션 샤딩 문서는 블록체인 기술에 관한 글로서 검토가 필요합니다. 위키 문서는 누구든지 자유롭게 편집할 수 있습니다. [편집]을 눌러 문서 내용을 검토·수정해 주세요.