Full Node vs Archive Node
이더리움 생태계에서는 Full Node와 Archive Node라는 두 가지 주요 노드 유형이 존재하며, 각각의 특성과 용도가 명확히 구분된다.
Full Node 는 최신 블록체인 상태를 검증하고 네트워크에 참여할 수 있지만, 과거의 모든 상태 데이터는 보관하지 않는다.
Archive Node는 제네시스 블록부터 현재까지의 모든 상태 변화를 기록하여, 특정 시점에서의 블록체인 상태를 조회할 수 있다.
이러한 차이는 단순히 저장 공간의 문제가 아니라, 노드의 용도와 제공할 수 있는 기능에 근본적인 차이를 만든다.
Full Node
위에서 설명했듯이 풀노드는 블록체인의 전체 데이터를 저장하고, 모든 트랜잭션을 처음부터 재실행하여 현재 상태를 검증하는 노드이다.
“Full” 이라는 이름이 붙었지만 사실 전체 데이터를 보관하지는 않는다.
대신 최근 약 128개 블록의 상태 데이터만 유지하고, 그 이전의 상태는 삭제하는 State Pruning 을 수행한다.
-
완전한 블록 검증: 제네시스 블록부터 현재까지의 모든 블록을 검증하고 저장한다.
-
최신 상태 유지: 현재 블록체인의 최신 상태를 완전하게 유지한다.
-
State Pruning: 오래된 상태 데이터를 정리하여 저장 공간을 절약한다.
State Pruning
State Pruning은 Full Node가 저장 공간을 효율적으로 관리하기 위해 사용하는 메커니즘이다.
이더리움 블록체인의 상태(state)는 모든 계정의 잔액, 논스, 스마트 컨트랙트의 저장 공간 등을 포함한다.
매 블록마다 트랜잭션이 실행되면서 이 상태가 변경되며, 모든 블록의 상태를 저장하면 당연히 엄청난 저장 공간이 필요하게 된다.
State Pruning 은 기본적으로 최근 128개 블록의 State Trie 를 완전하게 유지하고, 128개 블록 이전의 상태 데이터를 점진적으로 삭제한다.
다만 블록 헤더, 트랜잭션, Receipt 등의 데이터는 삭제되지 않고 완전히 보존된다.
필요한 모든 블록 데이터를 가지고 있으므로, 필요시 제네시스 블록부터 재실행하여 현재 상태를 재구성할 수 있다.
Geth에서는 --syncmode snap 또는 --syncmode full로 동기화한 후, 자동으로 State Pruning이 활성화된다.
수동으로 pruning을 수행하려면 geth snapshot prune-state 명령을 사용할 수 있다
다만, 과거 특정 시점의 상태를 조회할 수는 없다.
Snap Sync, Full Sync
이더리움 Full Node 는 다양한 동기화 모드를 지원하며, 각 모드는 초기 동기화 속도와 검증 수준 사이의 트레이드오프가 있다.
Snay Sync:
Snap Sync 는 Geth 의 기본 동기화 모드이자 가장 빠른 동기화 방법이다.
-
최신 블록의 피벗 포인트(pivot point)를 선택한다.
-
피벗 포인트의 상태 스냅샷을 다운로드한다.
-
피벗 포인트 이후의 블록들을 다운로드하고 실행한다.
-
백그라운드에서 피벗 포인트 이전의 블록 헤더와 영수증을 다운로드한다.
-
상태 검증을 완료하고 정상적인 Full Node로 전환된다.
Full Sync:
Full Sync는 전통적인 동기화 방법으로, 제네시스 블록부터 모든 블록을 순차적으로 다운로드하고 실행한다.
대부분의 경우 Snap Sync가 권장된다. Full Sync는 극도로 높은 보안 요구사항이 있거나, 모든 단계를 직접 검증하려는 특수한 경우에만 사용된다.
Archive Node
Archive Node는 블록체인의 모든 블록 데이터뿐만 아니라, 제네시스 블록부터 현재까지의 모든 상태 변화를 완전히 보존한다.
State Pruning을 수행하지 않으므로, 특정 시점의 모든 계정 잔액, 컨트랙트 상태, 스토리지 값을 직접 조회할 수 있다.