rschain: Rust로 구현한 블록체인 학습 프로젝트
분산 시스템과 블록체인 기술에 대한 이해를 위해 Rust로 직접 구현한 실험적 블록체인
시작 배경
친구가 몇 년 전 블록체인에 대해 아주 열정적인 강의를 해준 이후 관심이 생겼다. 특히 Web3에서 말하는 **"데이터의 주권은 개인에게 있어야 한다"**는 탈중앙화(decentralization) 개념에 크게 공감했다.
이론적 이해를 넘어서 실제로 블록체인이 어떻게 동작하는지 직접 구현해보고 싶었다.
기술 스택
- Language: Rust
- Network: Kademlia DHT + TCP
- Consensus: Proof of Work (PoW)
- Architecture: P2P 네트워크 + 모듈형 노드 시스템
핵심 구현 내용
블록체인 기본 구조
- 블록 관리: 해시 체인으로 연결된 블록 구조
- 머클 트리: Git과 같은 방식으로 트랜잭션 검증
- 트랜잭션 풀: 메모리풀에서 대기 중인 트랜잭션 관리
P2P 네트워킹 (Kademlia DHT)
처음에는 노드끼리 전부 연결하는 형태를 시도했지만 순환 참조 문제가 발생했다. 해시맵으로 어느 정도 해결했지만 확신이 서지 않아서 다른 방법을 찾았다.
YouTube에서 Kademlia DHT를 알게 되었는데, BitTorrent에서 사용하는 방식이었다. 비트 거리 계산으로 노드를 찾는 구조가 훨씬 효율적이었다.
노드 타입별 역할 분리
- Bootstrap Node: 새로운 노드의 네트워크 진입점
- Full Node: 완전한 블록체인 상태 유지
- Light Node: 경량 클라이언트로 최소 데이터만 보관
- Mining Node: PoW 채굴 수행
기술적 선택 이유
Rust 선택
당시 관심 있던 회사에서 Rust를 사용한다는 얘기를 듣고 연습할 겸 선택했다. 그리고 그때 Rust가 더 재미있었다.
학습 자료
블록체인 관련 책들을 몇 권 읽었지만 대부분 코인과 지갑 관련 내용이 많아서, 기술적인 내용은 인터넷에서 찾아봤다. 이더리움과 체인링크 공식 홈페이지를 많이 참고했고, 구현할 때는 YouTube와 각종 온라인 자료를 활용했다.
PoW 구현의 한계
난이도 조절은 제대로 구현하지 못했다. 학습용이다 보니 하드코딩된 값으로 빠르게 테스트할 수 있게 만들었다. 지금 생각해보면 이 부분을 더 제대로 구현했어야 했다.
개발 과정에서의 도전
P2P 네트워킹의 복잡성
가장 어려웠던 부분은 노드 간 통신이 제대로 되는지 확인하는 것이었다. 지금 생각해보면 노드들을 그래프로 구성하고 DFS를 돌려서 연결성을 확인하는 방법도 있었을 텐데.
테스트의 어려움
여러 노드가 실제로 통신하는 것을 테스트하는 방법을 잘 몰라서 main.rs의 간단한 출력으로만 확인했다. 더 체계적인 테스트 방법이 필요했다.
계획 vs 현실
처음에는 더 깔끔하게 돌아가는 시스템을 만들고 싶었지만, 너무 디테일한 부분에 집착하다 보니 시간이 오래 걸리고 완성도 있는 결과물을 내지 못했다.
배운 점
기술적 이해 향상
- 머클 트리: Git에서 사용하는 것과 같은 구조로 데이터 검증
- DHT 네트워킹: 분산 해시 테이블을 통한 효율적인 노드 검색
- TCP 통신: 저수준 네트워크 프로그래밍 경험
- 블록체인 동작 원리: 전체 시스템이 어떻게 조화롭게 동작하는지에 대한 기본 이해
시스템 설계 관점
분산 시스템에서 합의(consensus)를 이루는 것이 얼마나 복잡한 문제인지 몸소 체험했다. 이론으로 배운 것과 실제 구현 사이에는 큰 차이가 있었다.
현재 상태와 한계
현재 상태
기본적인 블록체인 구조와 P2P 네트워킹은 구현되었지만, 실제 여러 노드 간의 통신 테스트는 충분히 하지 못했다. 주로 단일 노드에서의 동작 확인에 그쳤다.
구조적 한계
- 테스트 부족: 분산 환경에서의 검증 미흡
- 난이도 조절: PoW 난이도가 고정값으로 하드코딩
- 에러 처리: 네트워크 오류나 노드 장애 상황 대응 부족
- 성능 최적화: 학습 목적이다 보니 성능 고려사항 미반영