[포필러스 100y]
Key Takeaways
- 인터넷의 역사는 속도와 함께했다. 인터넷의 속도가 빨라짐에 따라, 이를 기반한 새로운 형태의 웹2 어플리케이션이 등장하며 지금의 인터넷 생태계가 만들어졌다. 블록체인 또한 궁극적으로 메타버스, AR/VR 등의 어플리케이션을 목표로 한다면 지금보다 훨씬 더 큰 확장성을 달성해야할 것이다.
- 최근 확장성에 중점을 둔 솔라나, 수이, MegaETH, Fuel 등의 프로젝트들은 모두 병렬처리에 집중하였다. 병렬처리는 실제로 확장성에 도움이 되긴 하지만, 인기있는 NFT 민팅 이벤트와 같이 같은 스테이트를 건드는 트랜잭션이 단기간내에 몰릴 경우 병렬 처리가 불가능하여 확장성 문제를 해결할 수 없다.
- 솜니아는 다른 프로젝트들과 달리 단일 코어 내에서 EVM 트랜잭션의 순차적 처리를 극대화하는 방법을 제시한다. 이를 달성하기 위해 솜니아는 EVM 바이트코드를 CPU가 직접 처리할 수 있는 네이티브 코드로 변환하며, CPU 하드웨어 내에서의 병렬 처리 기능을 활용한다.
1. 배경 – 모두가 병렬화를 외치다
1.1 인터넷의 역사는 속도와 함께했다
Source: ByteByteGo
[포필러스 100y] 지금까지 인터넷 및 어플리케이션의 역사는 속도의 발전과 함께 이루어졌다. TCP/IP 표준과 팀 버너스리의 월드 와이드 웹은 인터넷의 기초를 마련했으며, 초기엔 텍스트 기반의 이메일, 간단한 웹 브라우징 등 제한된 데이터 전송이 가능했다 (56kbps 이하).
1990년 중반부터는 기존 다이얼업 방신의 인터넷 연결이 DSL (Digital Subscriber Line) 및 더 나아가 케이블 모뎀 방식으로 바뀌며, 향상된 속도로 인해 오디오 및 비디오 서비스, 온라인 게임, 전자상거래 등 다양한 종류의 서비스가 가능해졌다 (1~10Mbps).
2000년대에는 광섬유 기술이 도입이 되어 인터넷 속도가 대폭 향상되었으며, 이후에 3G, 4G LTE 등 모바일 브로드밴드 인프라도 구축되어 모바일 기기에서도 고화질 스트리밍, OTT 서비스 등을 즐길 수 있게 되었다 (50Mbps~1Gbps)
현재는 전 세계적으로 광섬유 인프라 확장이 이루어지고 있어 기가비트 인터넷이 보편화되고 있다. 또한 일부 지역에선 10Gbps 이상의 초고속 연결이 가능하며, 모바일 네트워크의 속도는 5G 이후로 광섬유에 필적할 정도로 빨라지게 되었다. 이에 따라 초고화질 스트리밍, 클라우드 게이밍, IoT 등의 훨씬 더 다양한 어플리케이션이 가능하게 되었다.
그럼에도 불구하고 아직까지도 몇몇 어플리케이션에서 인터넷 속도가 부족하다. 예를 들어 클라우드 게이밍은 아직도 게이머들에게 만족스러운 사용자 경험을 제공하지 못하고 있으며, 추후에 AR/VR 산업이 더 발전한다면 실시간 상호작용 지원을 위해 극히 낮은 지연 시간과 안정적인 인터넷 환경이 필요할 것이다.
1.2 블록체인은 여전히 확장성이 고프다
Source: imagflip (@100y_eth)
블록체인 산업은 속도에만 치중하는 인터넷과 달리 탈중앙성, 검열 저항성, 문화, 커뮤니티 등 다양한 요소를 기반으로 다채롭게 발전했다. 지금은 망했지만 테라 네트워크는 탈중앙 스테이블 코인이라는 이념 하에 전례없는 커뮤니티의 구축을 성공했었고, 앱스트랙트 체인의 경우 컨슈머 서비스를 통해 매스 어답션을 달성한다는 목표를 추구하고 있다 (“Abstract: A Blueprint For Disneyland In Crypto” 참고).
그럼에도 불구하고 결국 블록체인 또한 인터넷과 마찬가지로 다양한 어플리케이션의 기반이 되는 인프라이기 때문에, 많은 프로젝트들이 확장성을 개선하기 위해 노력해왔고, 이에 따라 새로운 형태의 디앱이 등장하였다. 이더리움의 낮은 확장성을 개선하기 위해 초기에 폴리곤, BNB 체인과 같은 네트워크가 등장하여 사용자들에게 디파이를 위한 빠른 환경을 제공했으며, 그 후에는 솔라나, 수이와 같은 고성능 레이어1이나, 베이스, 아비트럼과 같은 이더리움 레이어2가 등장하여 기존에 어려웠던 오더북 덱스와 같은 서비스들의 등장을 가능케 했다.
Source: Paradigm
하지만 현재 사람들이 사용하고 있는 중앙화된 인터넷에 비하면 현재 블록체인 네트워크의 속도는 비교할 수 없을 정도로 느리다. 이는 블록체인이 본질적으로 탈중앙 서버에 의해 유지되기 때문에, 노드들 사이의 상호작용으로 인한 추가적인 성능 저하와 탈중앙성을 위해 노드들의 하드웨어 사양을 높게 설정할 수 없기 때문이다. 만약 블록체인이 넥스트 인터넷을 꿈꾼다면 궁극적으로는 현재 웹2에서 가능한 다양한 서비스들(게임, 소셜, 스트리밍 등)을 무리 없이 처리할 수 있어야 하며, 이를 위해선 지금보다도 확장성을 더 개선해야만 한다.
1.3 모두가 병렬화를 외치다
최근 수 많은 블록체인 프로젝트들이 확장성을 개선하기 위해 제시하는 개념이 있다. 바로 트랜잭션 병렬 처리이다. 많은 프로젝트들이 이더리움의 낮은 확장성의 이유로 EVM의 본질적인 트랜잭션 순차적 처리를 지적하며, 솔라나, 수이, 앱토스등과 같이 트랜잭션 병렬 처리에 특화된 VM을 디자인하거나, 아니면 모나드, MegaETH, 폴리곤 등과 같이 기존 EVM에 트랜잭션 병렬 처리를 도입하게 되었다.
트랜잭션 병렬 처리에서 중요한 것은 트랜잭션들이 서로 같은 스테이트를 건드리는지 확인하는 것이다. 예를 들어 NFT를 같은 민팅 컨트랙트에서 발행하는 두 트랜잭션은 같은 스테이트를 건드리기 때문에 병렬로 처리될 수 없으며, 순차적으로 처리되어야 한다. 트랜잭션들이 서로 관련있는지 확인하는 방법에 따라 블록체인 네트워크들이 병렬 처리를 하는 방법은 크게 두 가지 방법이 있다.
첫 번째는 트랜잭션을 처리하기 전에 트랜잭션들이 어떤 스테이트를 참조하는지 미리 판단하는 State Access 방법이다. 이후 서로 관련없는 트랜잭션들은 병렬처리하고, 관련있는 트랜잭션들은 순차적으로 처리한다. 두 번째는 일단 트랜잭션들을 한 번에 처리해보고, 충돌이 발생한 트랜잭션은 나중에 다시 순차적으로 처리하는 Optimistic Execution 방법이다. 병렬 처리를 내세우는 대부분의 블록체인들은 두 방법 중 하나를 사용하며, 그 예시는 아래와 같다.
- 솔라나: 솔라나는 Sealevel을 통해 멀티 스레드 방식의 병렬처리를 가능케 한다. 개별 트랜잭션 내에는 “Instructions”라고하는 구조체(Struct)가 있는데, 이 구조체 내에는 트랜잭션과 관련된 스테이트 정보가 담겨있다. Sealevel은 스테이트가 중복되지 않는 트랜잭션에 한해 병렬 처리를 진행한다 (”Solana Mega Report V2 – Like Apple, but Unlike Apple” 참고).
- 수이: 수이 또한 솔라나와 마찬가지로 State Access 방법을 사용하는 대표적인 병렬 처리 네트워크이다. 수이의 데이터 모델은 객체 중심으로 설계되어 있는데, 만약 한 트랜잭션이 다른 트랜잭션에서 사용되는 객체와 동시에 상호작용하지 않는다면, 두 트랜잭션은 병렬로 처리 될 수 있다. (”Complete Guide to Sui” 참고).
- 앱토스: 앱토스는 Block-STM 이라는 병렬 연산 엔진을 활용하여 트랜잭션을 병렬 처리 한다. 이는 Optimistic Execution의 대표적인 방법으로, 우선 모든 트랜잭션을 병렬처리하고, 충돌이 일어나는 트랜잭션에 대해 순차적으로 처리한다. 폴리곤, 세이 또한 앱토스의 Block-STM을 차용하여 자신들의 병렬 처리 시스템에 도입했다.
- 모나드: 모나드 또한 Optimistic Execution 방법을 활용하여 트랜잭션을 병렬처리한다 (”A Monster Combined With Narrative and Technology, Monad.” 참고).
- MegaETH: MegaETH는 병렬 처리를 극대화하기 위해 블록 생성과 블록 검증에 각각 병렬 처리를 도입한다. 블록 생성에는 시퀀서가 Block-STM 이외에도 다양한 Optimistic Execution 방식을 활용할 수 있도록 했으며, 블록 검증은 상태 비의존(stateless) 검증 방식을 활용해 블록을 병렬로 빠르게 검증할 수 있다.
- Fuel L2: Fuel은 이더리움 생태계의 롤업인데도 불구하고 UTXO 방식을 사용하는 독특한 FuelVM에 기반한다. 따라서 같은 UTXO를 참조하지 않는 한, 대부분의 트랜잭션들이 네이티브하게 병렬로 처리될 수 있다는 장점이 있다.
2. 시사점 – 솜니아는 직렬화를 외치다
2.1 트랜잭션 병렬처리의 효용
Source: MegaETH
과연 트랜잭션 병렬 처리는 혁신일까 아니면 그저 프로젝트들의 마케팅을 위한 버즈워드일까? MegaETH에 의하면, 이더리움 네트워크의 블록을 1개, 2개, 5개, 10개로 머지(merge)하여 병렬처리를 시뮬레이션한 결과, 배치(batch)의 크기가 커질수록 성능향상이 증가한 것을 실제로 확인할 수 있었다.
물론, 확장성이 배치의 크기와 정비례하여 증가하지 않기 때문에 병렬처리의 효용성이 극적이라고 말할 수는 없다. 이는 실제 블록체인에서 트랜잭션 충돌이 꽤나 자주 일어나기 때문이다.
Source: Somnia
위 그래프는 솜니아 팀에서 2023년부터의 이더리움 데이터를 분석한 결과로, x축은 컨트랙트 주소이고, y축은 호출된 수를 의미한다. 그래프를 보면 알 수 있듯이, 이더리움 네트워크에선 호출이 많이 되는 컨트랙트로 호출 수가 극도로 쏠리는 것을 확인할 수 있다. 이는 해당 컨트랙트를 호출하는 트랜잭션들끼리 충돌할 가능성이 많다는 것을 시사한다.
Source: Somnia
위 그래프는 솜니아 팀에서 2024년 6월에 이더리움 데이터를 분석한 결과로, ERC-20 토큰의 수신자 주소가 얼마나 호출되는지를 분석한 것으로, 스마트 컨트랙트와 마찬가지로 토큰 전송에서도 특정 주소에만 토큰 수신이 쏠리는 현상을 확인할 수 있다.
Source: Etherscan
또, 병렬처리는 막상 필요할 때 소용없는 경우가 있는데, 바로 서로 관련있는 수 많은 트랜잭션들로 인해 네트워크의 혼잡도가 급증할 때이다. 대표적인 예시가 바로 NFT 민팅으로 유가랩스의 아더사이드(Otherside) NFT 민팅 사례를 살펴보자.
당시에 NFT의 인기는 절정을 찍었으며, 시드라운드에 무려 $450M을 모금한 유가랩스의 NFT는 모두가 민팅하고 싶어했다. 필자도 과거에 민팅에 참여하여 수수료로 무려 5,500 Gwei에 해당하는 1.93 ETH를 지불하였다. 최근 이더리움 네트워크의 가스비가 1 Gwei 미만인 것을 감안하면 이는 엄청난 수치라는 것을 알 수 있다. (당시 이더리움의 가격은 $2,800이었다).
Source: Somnia
이렇게 인기있거나, 높은 수익성이 기대되는 NFT 민팅 이벤트가 있을 때에는, 수 많은 사용자가 하나의 NFT 민팅 컨트랙트와 상호작용하여 민팅 트랜잭션을 생성한다. 하지만, 이들은 동일한 스테이트를 건들기 때문에 병렬처리가 가능한 블록체인이라 할지라도, 병렬 처리가 확장성 개선에 도움이 되지 않는다. 즉, 막상 확장성이 필요할 때에 병렬 처리가 소용 없는 경우가 있는 것이다.
솜니아는 이를 해결하기 위해 싱글 코어에서 트랜잭션의 순차적인 처리를 극대화하는 방법을 제시한다. 아래에서 솜니아가 내세우는 코어 기능들을 잠깐 살펴보고, 어떻게 단일 코어에서 트랜잭션들을 빠르게 처리할 수 있는지 살펴보자.
2.2 솜니아의 코어 기능들
솜니아는 블록체인의 확장성을 극대화 하여 기존에 블록체인 생태계에서 구현하는 것이 불가능했던 웹2 어플리케이션들(e.g., 온체인 메타버스, 온체인 소셜 등)을 가능하게 하는 것을 목표로 한다. 솜니아는 아래와 같은 기술들을 이용하여 EVM의 성능을 극대화한다.
- 멀티스트림 컨센서스: 다른 블록체인들과 달리 솜니아는 각 밸리데이터가 데이터체인(Datachain)이라고 불리는 고유의 블록체인을 운영한다. 각 데이터 체인은 서로 독립적이고, 소유하고 있는 밸리데이터만 해당 데이터 체인에 블록을 추가할 수 있다. 전체적인 컨센서스는 컨센서스 체인에서 이루어지며, 이는 여러 데이터 체인들의 최신 블록을 참조하는 체인이다. 컨센서스 체인에서 각 데이터 체인에서 온 블록들의 순서가 결정된다. 이는
- 순차적 연산 (Sequential Execution): 솜니아는 자체적인 EVM 컴파일러를 도입하고, 하드웨어 병렬성을 활용하여 트랜잭션을 단일 코어에서 빠르게 처리한다.
- IceDB: 솜니아는 IceDB라는 새로운 데이터 베이스를 통해 가스비 부과를 효율적으로 하고, 캐시를 최적화하여 읽기 쓰기 속도를 비약적으로 증가시켰다.
- 데이터 압축 (Advanced Compression Techniques): 솜니아는 노드 간 데이터 전송을 블록 압축이 아닌 스트리밍 압축을 활용하여 중복 데이터를 최소화하고, 더 많은 트랜잭션을 빠르게 처리할 수 있도록 했다.
위에서 언급된 솜니아의 코어 기능들은 추후에 작성될 아티클에서 깊게 다룰 예정이다. 본 아티클에서는 솜니아가 어떻게 트랜잭션의 순차적 처리를 극대화하는지 살펴보자.
2.3 솜니아는 어떻게 확장성을 개선하는가
2.3.1 EVM 컴파일링
EVM은 기본적으로 스택 기반 구조를 사용한다. 스택 기반 구조는 스택이라는 자료구조에 데이터를 쌓아 올리며 명령을 처리한다. 스택 기반에서의 연산 명령은 어떤 데이터로 연산할지 미리 정해져있기 때문에 (항상 맨 위의 데이터만 사용) 바이트코드가 매우 간단하다는 장점이 있다. 하지만 데이터를 빼고, 넣는 과정에서 중복적이고 불필요한 연산이 많다는 단점이 있다.
또한, EVM은 연산을 interpreted 방식으로 처리한다. 이는 VM을 소프트웨어적으로 시뮬레이션하여 각 명령어를 하나씩 해석하는 것이다. 이러한 방식은 각 명령어마다 반복적인 검색(lookup)과 명령 처리 과정을 거치기 때문에 속도가 느리다.
솜니아는 이를 해결하기 위해 자체적은 EVM 컴파일러를 도입한다. 이는 EVM 바이트코드를 CPU가 바로 실행가능한 네이티브 코드로 직접 변환(compile)하여 실행한다. 이렇게 컴파일된 네이티브 코드는 마치 C++로 직접 작성한 코드의 속도에 매우 근접한 성능을 낸다.
하지만 EVM 바이트 코드를 네이티브 코드로 변환하는 과정 자체가 상당히 많은 연산을 요구하기 때문에, 솜니아는 자주 호출되는 스마트 컨트랙트에 대해서만 네이티브 코드 컴파일을 수행하여 자원을 효율적으로 관리한다. 솜니아는 실제로 벤치마크 테스트에서 ERC-20 토큰 전송에 대하여 수백만 TPS를 달성할 수 있었다.
2.3.2 하드웨어 레벨의 병렬처리
솜니아는 소프트웨어 레벨에서 병렬 처리를 하지 않는 대신, 개별 트랜잭션의 실행 속도를 높이기 위해 하드웨어 레벨의 병렬처리를 사용한다. 이는 한개의 CPU 코어 내부에서 여러 명령어를 동시에 처리하여 성능을 높이는 기술이다. 솜니아는 EVM 바이트코드를 네이티브 코드로 변환하기 때문에 CPU가 이를 내부적으로 명령어 병렬처리를 할 수 있다. 따라서 각 트랜잭션 실행이 빠르게 병렬화되어 성능이 크게 향상된다.
예를 들어 ERC-20 토큰 전송을 처리한다고 가정하자. 원래 EVM에서는 아래와 같은 작업을 순차적으로 수행한다.
- 송신자 계좌를 해시
- 송신자 잔액 조회
- 수신자 계좌를 해시
- 수신자 잔액 조회
하지만 이를 네이티브 코드로 변환하고 CPU가 하드웨어 내에서 병렬로 처리할 경우 송신자 작업 (1, 2)과 수신자 작업 (3, 4)를 동시에 수행할 수 있기 때문에 총 시간은 절반으로 감소된다.
2.4 진정한 온체인 어플리케이션을 위하여
블록체인 산업에 확장성을 증가시키겠다는 프로젝트들은 많지만, 솜니아가 꿈꾸는 확장성의 수준은 이들과 차원이 다르다. 다른 블록체인 프로젝트들이 추구하는 확장성의 목표는 금융, 게이밍, 소셜 어플리케이션을 가능하게 할 정도라면, 솜니아가 추구하는 확장성의 목표는 이에 더 나아가 완전한 온체인 메타버스와 같이 웹2 수준의 확장성을 꿈꾼다. 이를 위해 솜니아는 다양한 기술적 혁신 이외에도 메타버스에 적합한 다양한 기능들을 제공하는 것을 목표로 하는데, 이에 대해선 추후에 작성될 솜니아 소개 아티클을 기대하라.
3. 참고 자료
관련 아티클, 뉴스, 트윗 등 :
- Somnia Docs
- All About Parallelization by Sui Foundation
- Solana Mega Report V2 – Like Apple, but Unlike Apple by Four Pillars
- Complete Guide to Sui by Four Pillars
- A Monster Combined With Narrative and Technology, Monad by Four Pillars
같이 보면 좋은 기사