뉴스 바로가기

기사 상세

경제

블록체인 성능 향상에 필수 `샤딩`…"쪼개라, 빨라질 것이니"

강민승 기자
입력 : 
2018-12-18 16:11:28
수정 : 
2018-12-21 10:45:10

글자크기 설정

2019년 주목할 블록체인 기술 톱10 ②샤딩
사진설명
이더리움의 창시자인 비탈린 부테릭은 최근 인터뷰에서 응용기술이 2019년에 다시 올 것으로 예상되는 암호화폐 붐을 이끌 것이라고 밝힌 바 있습니다. 작년부터 시작된 ICO 열풍이 사그라들고 거래량도 감소하면서 블록체인 업계가 보릿고개에 시달리고 있지만 한편으로는 이를 계기로 좀더 유용하고 의미있는 기술을 개발하자는 움직임에도 힘이 실리고 있습니다. 디스트리트는 블로코가 추진중인 기업용 블록체인 프로젝트 아르고와 함께 2019년 주목할 블록체인 기술 톱10을 선정해 분석하는 기획 연재를 시작합니다. 이번 기획이 블록체인과 암호화폐 업계의 뱃길을 비추는 작은 등대가 되기를 소망합니다. <편집자 주> “이더리움은 현재 15 정도에 불과한 초당 트랜잭션(TPS) 성능을 1000배 높여 명실상부한 월드 컴퓨터로 자리매김하겠다. 이렇게 되면 데이터베이스로써의 블록체인도 새로운 전환을 맞이할 것이다”

비탈릭 부테린은 지난달 31일 데브콘4에서 이더리움의 마지막 로드맵인 세레니티를 발표하며 이같이 말했다. 이더리움 2.0으로 공개된 세레니티의 가장 큰 변화는 이더리움의 새로운 지분증명(PoS) 합의 알고리즘인 캐스퍼 블록완결장치(FFG)와 함께 샤딩을 적용한다는 점이다. 캐스퍼는 지난 기획(PoW? PoS? PBFT? 대세는 '하이브리드 알고리즘')에서 살펴본 것처럼 작업증명(PoW)에 PoS를 접목해 합의 레이어를 개선하고 블록 생성 속도를 높이는 알고리즘이다. 두번째로 꼽힌 샤딩은 바로 블록체인의 기관을 파헤치고 그 위에 트랜잭션을 처리하는 연결 파이프를 여럿 설치해 거래를 처리하는 속도를 최대로 끌어올리는 분산데이터베이스 기술이다.

익숙하지만 낯선 분산 데이터베이스 기술, 샤딩 블록체인은 동일한 장부를 복제해 모든 참여자들이 나눠갖기 때문에 각 참여자가 내용을 기록하면 사슬 마법처럼 상대방의 장부에도 기록이 자동으로 남는다. 하지만 장부에 접근해 기록을 열람, 거래를 기록하는 사람이 한 번에 한 명만 가능하다면 성능이나 속도에서 많은 제약을 받게 된다. 이를 해소하기 위해 한 번에 여럿이 참여해 기록을 열람하고 거래 내역을 동시에 쓸 수 있도록 트랜잭션이 드나드는 출입구를 여럿 개방하는 게 필요하다. 이를 구현하는 것이 바로 샤딩이다.

샤딩은 원래 블록체인에서 시작한 기술이 아니라 기존 데이터베이스 분야에서 일찍부터 적용되기 시작한 기술이다. 오라클, 마이에스큐엘(MySQL), 노에스큐엘(NoSQL) 등 현존하는 여러 데이터베이스들도 샤딩을 기본적으로 지원하지만 프로그래밍의 관점에서 볼 때 복잡도를 매우 높이는 방식이어서 그리 환영받진 않는 기술이다. 데이터 처리 속도를 높이기 위해 최후에 실행하는 극약처방으로 평가받기도 한다.

스테이트 관리지옥…샤딩이 해법 될까 “이더리움의 스테이트는 비트코인과는 다르다. 비트코인은 사용되지 않은 트랜잭션을 스테이트로 사용하지만 이더리움은 사이즈가 더 크다. 스테이트는 모든 코인, 컨트랙트, 코드, 컨트랙트에 담긴 코드 등을 모두 모아 거대한 파일처럼 저장하는 형태다”

버질 그리피스 이더리움 재단의 연구원은 비들 서울에서 기자와 만나 이더리움의 중요한 특징인 스테이트를 설명하며 이렇게 말했다. 트랜잭션이 실행될 때마다 내역이 쌓이는 데이터 창고인 스테이트는 거래 내역, 코드의 변수값, 계정 데이터, 사용자가 거래에 입력한 데이터 등을 저장하기 때문에 용량이 매우 크다. 비트코인과 비트코인에서 파생된 코인을 제외한 다수의 블록체인은 스테이트 모델을 적용하고 있다. 이더리움은 스테이트의 용량이 100GB를 훌쩍 뛰어넘는다.

스테이트는 트랜잭션이 유효한지 검증하는데 주로 사용되며 트랜잭션의 결과를 결정한다. 블록체인의 라이트 노드로 참여할 경우에는 블록 헤더만을 받아오면 돼 스테이트의 용량을 신경쓰지 않아도 되지만 풀 노드로 참여하면 블록헤더를 포함한 스테이트의 전부를 받아와야 한다. 따라서 용량에 민감할 수밖에 없다. 또 블록체인에 들어온 트랜잭션 요청은 올바른 값인지 먼저 확인하기 위해 일반적으로 스테이트를 먼저 거치는데 여기에서 상당한 지연이 발생한다.

이같은 문제를 해결하기 위해 과거에는 스테이트를 처리하는 방식을 스마트 컨트랙트로 극복해 보려고 시도하기도 했다. 실제로 이더리움 샤딩의 초기의 디자인에서는 샤딩 매니저라는 스마트 컨트랙트를 통해 스테이트의 최종 해시값을 블록에 올리는 방법을 계획했다. 그러나 스마트 컨트랙트에서 모든 요소를 관리하기에는 보안 등 문제가 있어 지금은 퇴출된 상태다. 결국 최초의 블록에서부터 발생한 모든 트랜잭션을 순서대로 쌓은 히스토리와 발생한 모든 변수를 키, 밸류 형태로 기록한 스테이트를 여러 샤드에 나눠 담고 관리하는 방식이 해법으로 부상했다.

샤딩 적용하니 처리 속도 1000배 향상 샤딩이 적용돼도 트랜잭션 발생시 스테이트에 들러 올바른 값을 확인하는 작업을 수행해야 한다는 사실은 변함이 없지만 네트워크 계정의 소속 샤드에 따라 처리 방법이 달라진다. 샤드는 기존에 존재하는 모든 주소를 몇 개의 집합으로 나눈 덩어리를 말한다. 샤드 체인은 샤드에서 블록체인의 데이터가 사는 집이라고 할 수 있는데 최소 단위의 블록인 콜레이션이 길게 연결된 형태를 갖는다.

샤드 체인은 각 체인마다 비밀의 방이 있다. 방문을 열면 이더리움가상머신(EVM)으로 바로 연결된다. 샤드체인에서 발생한 트랜잭션 코드들은 EVM이라는 용광로에 떨어지게 되는데 코드가 용암에 녹아 흡수되면 트랜잭션이 실행돼 스테이트가 변경되고 샤드 체인의 콜레이션(블록)이 만들어진다. EVM은 코드의 실행기 역할을 하기 때문에 샤드의 수가 늘어나면 늘어날수록 EVM에 통하는 통로가 많아져 처리 장치의 수가 증가하는 멀티 코어의 효과를 거둘 수 있다.

샤딩이 도입되면 각 샤드가 계정별로 트랜잭션을 나눠 처리하고 승인한다. 블록체인 네트워크 참여자의 모든 주소를 일정한 갯수로 잘라 각 덩어리를 하나의 연방으로 구성하는 방식이다. 이더리움의 경우에는 전체 계좌에서 0x00부터 시작되는 계정들은 1번 샤드에서 관리하고 0x01부터 시작하는 계정은 2번 샤드에서 관리하는 식이다. 만약 샤드 1에 속하는 요청자가 트랜잭션을 발생시키면 해당 트랜잭션은 샤드 1의 오퍼레이션 노드로 전파되고 블록 제한자, 실행자, 검증자의 검증을 거친다. 이상이 없다면 샤드 1에 들어있는 EVM이 컨트랙트의 코드를 실행시키고 스테이트 변경함수를 통해 기존 스테이트는 새로운 값으로 변경된다.

현재 PoW 방식을 쓰는 이더리움은 스테이트를 단일 방식으로 처리하고 있다. 이더리움의 마지막 로드맵인 세레니티에서는 PoS의 합의 알고리즘이 적용됨과 동시에 1024개의 샤드가 연쇄 파이프처럼 건설된다. 스테이트로 통하는 통로가 한 개에서 1024개로 추가 개방돼 스테이트를 구역마다 나눠 관리하게 된다. PoS 합의 알고리즘과 샤딩 기술이 적용되면 이더리움의 트랜잭션 처리 속도는 1000배 정도 빨라져 약 1만4000TPS의 성능을 낼 것으로 전망된다.

샤딩 적용하려면 메인넷 교체 필수, 하지만 '양날의 검' 샤드는 일반적으로 주소의 개수를 기준으로 나눠 설계하지만 확실한 정답이 있진 않다. 지역별로 샤드를 나눠 설계하기도 하지만 보안상 좋지 않다고 지적된다. 샤딩이 성공적으로 적용되려면 분산 아키텍처의 설계 완성도가 높아야 한다. 이 중 트랜잭션을 나눠 접속할 서버를 분배하는 로드 밸런싱 기술이 핵심이다. 샤드로 들어오는 회로와 트랜잭션(블롭)을 분산시키는 회로를 효율적으로 설계하면 블록체인에서 처리 속도를 크게 높일 수 있다.

하지만 이같은 설계를 수행하려면 고려해야 할 점이 많아 개발이 쉽지 않다. 한 샤드에 데이터가 계속 머물게 하는 방법은 보안상 좋지 않아 주기적으로 이사시키는 것도 필요하다. 특정 샤드에 부하가 걸려 수수료가 많이 들면 안되기 때문에 샤드를 분할하는 설계도 필요하다. 또 샤드의 개수를 무한정 늘릴수도 없기에 사용되지 않는 샤드를 자동으로 병합하는 구조도 고려해야 한다. 샤딩은 메인체인에 바로 적용되는 온체인 방식의 솔루션이기 때문에 메인넷을 바꾸는 포크도 필연적이다.

샤딩 도입이 무조건 장점만 있는 것은 아니다. 적용시 오히려 비효율적인 요소가 발생하고 비정상행위도 여럿 발생할 가능성도 무시할 수 없다. 샤드 체인의 오퍼레이터로 참여하는 노드가 매번 동일하면 거짓 메시지를 보내는 등 비정상 행위를 해도 발견하고 검증하기 어렵다. 오퍼레이터를 임의로 섞어주는 방식을 통해 해결할 수 있지만 블록체인에서 예측이 불가능한 랜덤을 구현하기에는 현재 어려움이 많다.

특히 소속 샤드가 다르면 스마트 컨트랙트에서 커다란 장애물로 작용할 수 있다. 스마트 컨트랙트에 참여하는 상대방이 다른 샤드에 위치할 경우, 즉 송금자와 수신자가 서로 다른 샤드에 있을 경우 구조상으로 송금이 불가능하다. 이더리움에 샤딩이 적용되면 앱 역시 샤드에 담기게 되는데 이같은 구조가 디앱 구동의 장애물이 될 수 있다. 작은 앱은 단일 샤드에 담겨도 문제가 없지만 크기가 큰 앱은 데이터가 다른 샤드에 나눠 담기게 돼 크로스 샤드 기술이 없으면 데이터의 일부가 길을 잃어 앱 전체가 동작이 안되는 문제가 발생할 수 있다. 만약 항공권을 예매하는 앱과 호텔을 예약하는 앱이 서로 다른 샤드에 위치해 있다면 서로 연동되지 않아 동시에 예약할 수 없다.

보안상 문제점도 있다. 샤딩 기술은 메인체인에 바로 적용되는 온체인 기술이기에 1%의 해시파워를 보유한 노드가 100개의 샤드 중 1개만 망가뜨려도 전체 시스템이 고장나는 ‘1% 공격’도 발생할 수 있다.

PoS + 샤딩...비콘체인이 핵심 이더리움에서는 트랜잭션을 분산시킬 때 샤딩 기술을 독립적으로만 사용하지는 않는다. 스테이트가 수백, 수천 조각으로 쪼개진 샤드에서는 기존 PoW가 아니라 PoS 알고리즘이 정한 규칙에 따라 움직인다. 기존 PoW 알고리즘에서는 트랜잭션을 한군데에 담았고 모든 노드들은 블록을 생성하기 위해 똑같은 문제를 풀며 경쟁했기 때문에 블록에 담긴 순서대로 트랜잭션을 하나하나 처리해 스테이트를 변경했고 결과도 PoW 체인에 기록했다. 그러나 샤딩과 PoS가 적용되는 이더리움 2.0(세레니티)에서는 트랜잭션을 병렬로 처리하고 각 샤드 속의 스테이트를 바꾼다. 트랜잭션이 진행되며 얻은 해시값만 기존 이더리움 PoW 메인체인에 기록하기 때문에 메인체인이 더 가벼워진다.

이더리움은 샤딩을 총 7단계로 나눠 단계적으로 도입할 계획이다. 이더리움의 샤딩 개발 로드맵에 따르면 현 단계는 극초기인 0 단계로 비콘 체인이 등장하는 단계다. 비콘 체인은 이더리움의 PoS 알고리즘인 캐스퍼 FFG를 탑재해 블록생성자를 검증, 파견하는 레이어다. 즉 샤드 체인을 관리하는 통제탑이라고 볼 수 있다.

비콘체인에는 샤드와 메인체인을 연결하는 크로스링크가 탑재돼 있다. 크로스링크는 샤드 체인 내 콜레이션의 헤더값을 메인체인에 보내는 역할을 한다. 또 PoS와 기존 PoW 체인을 연결하는 다리를 내장해 PoW의 이더를 PoS로 옮길 수 있도록 한다. 비콘체인은 이더리움의 확장성을 해결할 방법을 다수 포함해 이더리움 2.0의 중간 보스 격으로 꼽히지만 제대로 동작하지 않으면 이더리움 전체 네트워크가 멈출 우려가 있다.

이어지는 1단계에서는 EVM이 존재하지 않는 텅 빈 껍데기에 형태가 없는 트랜잭션(블롭)을 담아 샤드 체인의 기본 동작을 구현할 예정이다. 2단계에는 EVM 처리가 적용돼 트랜잭션이 실제로 동작하며 이더리움웹어셈블리(eWASM)도 탑재된다. eWASM은 이더리움가상머신(EVM)을 대체할 용도로 개발중이며 코드의 실행기를 포함한다.

eWASM에서는 처리하는 코드를 가볍게 해 트랜잭션 처리 속도를 약 두배가량 올릴 것으로 기대된다. 또 솔리디티 뿐만 아니라 기존 프로그래밍 언어인 C, C++, 러스트(RUST), 어셈블리 스크립트 등으로 스마트 컨트랙트를 작성할 수 있어 개발 과정의 절차도 단축된다.

다음 2단계에서는 이더리움의 네트워크 참여자가 샤드 체인의 채굴에 참가해 인센티브를 받을 수 있게 된다. 하지만 이더리움의 모든 노드를 다운받아 검증해야 하며 풀 노드를 밤낮없이 계속해서 켜놔야 한다. 샤드 체인의 검증의 문은 누구에게나 열려있지만 누구나 참여하기는 실질적으로 어렵다.

3단계에서는 풀노드가 아닌 라이트 클라이언트를 통해 샤드 체인에 검증자로 참가할 수 있다. 라이트 노드는 메인체인의 블록헤더만을 가져오는 방식이다. 콜레이션의 헤더값이 필요하거나 특정한 검증작업이 필요할 경우에만 머클 루트의 브랜치를 다운받아 검증을 수행한다. 때문에 라이트 클라이언트에서는 필수적으로 처리해야하는 스테이트 모델이 가볍다. 또 모든 노드를 최초의 블록에서부터 모두 다운받지 않고 중간 지점부터 받기 때문에 빠르다. 하지만 해당하는 중간 부분을 신뢰할수 없고 라이트 클라이언트를 제대로 지원하는 블록체인 프로젝트도 현재 없다.

4단계에서는 샤드 간 트랜잭션을 지원한다. 샤드간 통신을 위해 이더리움은 비트코인의 미사용잔액(UTXO) 모델과 비슷한 영수증이라는 개념을 제시한다. 영수증은 블록헤더나 스테이트의 특수구역에 저장되며 이더리움에서 기록하는 로그라고 할 수 있다. 트랙잭션을 수행할 때 스테이트를 변경할 내용을 영수증에 적고 샤드를 넘나들어 변경하게 된다. 하지만 샤드 간 통신은 샤드를 기반으로 한 튜링 완전 언어가 넘어야할 가장 큰 허들로 꼽힌다. 개발도 쉽지 않다. 크로스 샤드 기술을 어설프게 구현하면 오히려 복잡성이 증가해 스케일 효율을 떨어뜨릴 우려도 존재한다.

5단계에서는 보안 성능을 위한 업데이트와 이더리움의 또 다른 PoS 합의 알고리즘인 캐스퍼 CBC 알고리즘과의 통합이 예정돼 있다. 6단계에서는 샤드 내부에 샤드를 심는 슈퍼쿼드라틱 샤딩과 2단계 레이어의 검증 솔루션인 스타크(STARK) 등 영지식 증명을 도입해 트랜잭션의 인증 방식을 업데이트 할 예정이다.

샤딩을 적용하는 색다른 방식 PoW+샤딩, 질리카 샤딩을 사용하는 다른 블록체인 프로젝트인 질리카는 샤드를 효율적으로 관리하기 위해 PoW를 접목했다. 질리카에서 샤드의 오퍼레이터가 되려면 PoW의 채굴 문제를 풀어야 한다. 메인 체인은 DS블록, 샤드는 TX블록이라고 부르는데 질리카의 오퍼레이터, 마이너는 각 기간마다 바뀌며 그 때마다 PoW 문제를 풀어야 선출된다. 문제를 풀어낸 노드를 샤드의 개수로 나눈 몫의 수 만큼 각 샤드에 배치한다.

샤드에 배치된 오퍼레이터들 간에는 메시지 검증을 위해 프랙티컬비잔틴장애허용(PBFT) 합의 알고리즘이 적용된다. 질리카 측은 TPS를 최대로 끌어올리기 위해 신뢰도 높은 파티셔닝을 하겠다는 목표다. 샤드의 수가 많아지면 성능도 지수 함수의 그래프를 따라 증가할 것으로 전망하고 있다.

PoS 운동장에 다시 헤쳐 모여라 '기준은 샤딩' 이근해 블로코 코어 개발자는 샤딩에 대해 "블록체인의 대중화를 위해서 꼭 필요한 기술"이라며 "블록체인 개발자라면 누구나 샤딩이 중요하다는 점에 공감할 것"이라고 말했다. 그는 "그간 PoW 방식의 합의 알고리즘이 지배적이었지만 이제는 여러 블록체인 프로젝트가 PoS 방식으로 전환하며 샤딩을 손보는 중"이라고 진단했다.

누구나 참여할 수 있는 PoS 방식의 플랫폼을 만들기 위해서도 많은 수의 블록생성자를 분산시킬 샤딩은 필수적이라고 그는 덧붙였다. 이더리움의 PoS는 흔히 생각하는, 소수의 보유자에게 권력이 집중되는 PoS와는 다르다. 실제로 이더리움은 32이더 이상을 예치하고 권위자로 등록하면 누구나 샤드를 구동해 인센티브로 제공되는 이더리움을 채굴할 수 있도록 할 예정이다.

이 개발자는 "비트코인은 작업증명방식으로 완전한 탈중앙화를 꿈꿨지만 소수의 채굴업자에 의해 운영되고 있다는 현실은 탈중앙화의 역설"이라며 "이더리움은 PoS를 통해 블록 정책에 누구나 참여하길 원하는데 샤딩 기술은 블록생성자의 수를 늘리고 적절히 분산시켜 소수의 마이너에게 권력이 집중되는 현상을 막을 수 있어 좋은 선택"이라고 말했다. 그는 또 “비자카드처럼 1만~2만 TPS의 성능을 보장하려면 샤딩은 선택이 아니라 넥스트 제너레이션 블록체인이 되기 위한 필수 기술”이라고 강조했다.

기사 작성에 참여하고 검수를 진행한 이근해 개발자는 카이스트 전산학 석사를 마치고 티맥스OS에서 선임, 책임연구원으로 근무한 바 있다. 티맥스OS 재직 당시 운영체제와 플랫폼 개발에 참여했으며 슈프리마에서는 생체인증기기의 백엔드 시스템을 개발하기도 했다. 현재는 블로코에 합류해 아르고 체인 모듈을 개발하고 있다.

[강민승 D.STREET(디스트리트) 기자]
[ⓒ 매일경제 & mk.co.kr, 무단전재 및 재배포 금지]

이 기사가 마음에 들었다면, 좋아요를 눌러주세요.