>

전체 글

이번 동계 모각코를 통해 Reth의 Execution Extensions부터 Rust의 메모리 순서까지, 블록체인 노드의 코어 로직과 로우레벨 시스템을 깊이 있게 탐구할 수 있었습니다. 1~4주차에는 실제 이더리움 데이터를 추출하고 파이프라인을 구축하였고 5~6주차에는 멀티스레드 환경에서의 성능 최적화와 안전한 동시성 제어를 학습했습니다.모각코 덕분에 나태해질 수 있는 방학임에도 타이트하게 학습할 수 있었습니다.
아토믹 연산을 이용해 직접 동기화 도구를 만들어보면서 내부 매커니즘을 이해하는 시간을 가졌다. 스핀락 구현하기스핀락은 락을 획득할 때까지 루프 돌면서 대기하는 가장 단순한 동기화 요소다. Compare-and-Exchange 를 사용하여 구현할 수 있다.use std::sync::atomic::AtomicBool;use std::sync::atomic::Ordering::{Acquire, Release};use std::cell::UnsafeCell;pub struct SpinLock { locked: AtomicBool, value: UnsafeCell,}impl SpinLock { pub fn new(value: T) -> Self { Self { lo..
Rust의 동시성 도구(Mutex, RwLock)는 안전하지만, 하드웨어의 성능을 극한으로 끌어올리기엔 오버헤드가 있다.를 통해 로우 레벨에서 어떤 일들이 일어나는지 공부했다. 아토믹 연산 기초아토믹 타입은 CPU가 한 번의 명령으로 처리하는 원자적 연산을 제공한다. 가장 대표적인 Fetch-and-modify와 CAS 연산을 사렾보자. 1) Fetch-and-Add여러 스레드가 동시에 값을 증가시켜도 데이터 경합이 발생하지 않는다.use std::sync::atomic::AtomicUsize;use std::sync::atomic::Ordering::Relaxed;use std::thread;fn main() { let counter = AtomicUsize::new(0); thread::..
프로젝트 진행 중, Rust에 대한 이해도가 떨어진다 판단하여 게획을 변경합니다. 5주차 : 원자성과 메모리 순서6주차 : 동기화 기본 요소 구현 및 최적화
4주차 : Rust API 서버 개발 및 State Diff 추출 로직 구현 이번 주차의 핵심 목표는 3주차에 구축한 데이터 pipeline을 외부에서 접근 가능한 형태로 변환하고, 블록체인 코어의 핵샘인 '상태 변화'를 더 정밀하게 추출하는 것이다. 단순히 데이터를 DB에 쌓는 것이 아니라 프론트엔드와 통신할 수 있는 서버를 구축하고 Reth 노드와 병렬로 실행시키는 비동기 아키텍처를 구현했다. Axum 기반 비동기 API 서버와 Reth 노드와 병렬 실행Reth 노드는 기본적으로 메인 스레드를 점유하며 블록을 동기화한다. 이 과정에서 시각화 데이터를 제공할 API 서버가 노드의 성능을 저해하지 않도록 하는 것이 과제였다. 이를 위해 Rust의 비동기 런타임인 tokio를 활용해 멀티 테스크 구조를 설..
서론2025년에는 이더리움의 확장성 로드맵이 성숙기에 접어들면서 수많은 Layer 2가 등장했으나, 이는 “유동성 파편화”와 “Sequencer 독점”이라는 부작용을 야기했다. 이를 해결하기 위해 초기에는 미들웨어 중심의 Shared Sequencer가 대안으로 꼽혔으나, 2025년 하반기를 기점으로 흐름이 완전히 바뀌었다. 복잡한 별도의 미들웨어를 도입하기보다, 이더리움 L1 Validator에게 직접 Sequencing을 위임하는 “Based Rollup”이 가장 본질적이고 이더리움다운 해결책으로 재조명받았기 때문이다[1]. 본 보고서는 최근 블록체인 최대 화두인 Based Rollup의 기술적 혁신과, 이를 가로막는 장벽을 분석한다. 기술적 진보Based Rollup의 원리는 간단하다. 별도의 S..
3주차 : 기본 데이터(블록, TPS, Gas, Blob) 추출 및 서버 DB 연동 파이프라인 구축 이번 주차의 목표는 2주차에 설계한 구조체에 실제 이더리움 메인넷 데이터를 실시간으로 공급하는 파이프라인을 완성하는 것이다.메인넷 풀 노드를 그대로 돌릴 경우 약 2.6TB 이상의 저장 공간이 필요하다. 이는 일반적인 개발 환경에서 매우 큰 부담이며, 우리가 시각화하려는 '최근의 긴박한 타이밍 데이터' 외에 너무 많은 과거의 정보들을 포함한다. 이를 해결하기 위해 Pruning을 도입했다. 효율적인 리소스 관리를 위한 pruning 설정Reth의 기능 중 하나인 프루닝 설정을 통해 데이터를 선별적으로 저장한다. reth.toml 설정을 통해 노드의 저장 용량을 최적화하면서도 시각화에 필요한 데이터는 보존한..
2주차 : Stateful 구조체 변환 및 Future 트레이트 구현1주차에 Reth의 Execution Extentions가 기존 RPC 방식보다 왜 압도적으로 빠른지, 그리고 그 철학이 무엇인지 학습했다면, 2주차의 목표는 이 이론을 바탕으로 실제 데이터를 수집하는 것을 설계한다.단순히 "데이터가 오면 출력한다"를 넘어, 시각화 서비스에 필요한 누적 데이터를 관리하기 위해서는 상태를 유지할 수 있는 구조가 필요하다. 이를 위해 Rust의 비동기 핵심인 Future 트레이트를 구현하고, 데이터를 지속적으로 축적할 수 있는 구조체 기반의 ExEx로 코드를 구현한다. 데이터 구조 설계 : VisualizerMetrics먼저 노드에서 추출한 raw 데이터를 가공하여 저장한 VisualizerMetrics..
0u_Y
점이 모여 선이 되고