이 글을 이해하기 위해서 컴퓨터 공학 지식이 필요하지 않습니다.
Node And Miner
어떤 Blockchain 서비스인지에 따라 Network 구성 방식은 달라집니다만, 보통은 Node 및 Miner 를 중심으로 하는 P2P Network 구성을 가집니다.
Node
Blockchain P2P Network 에 참여한 모든 단말은 Node 가 됩니다.
- Full Node : 모든 데이터를 가지고 있는 Node.
- Lightweight Node : 일부 데이터 (보통 블록 헤더) 만을 가지고 있는 Node.
Node 들이 각자 원장 데이터를 (Ledger) 를 가지고 있기 때문에, Blockchain 을 Distributed Ledger 라고 부르기도 합니다.
이들은 Block 혹은 Transaction 을 다른 Node 로 부터 전달 받아, 자신과 연결된 다른 Node 에게 전송합니다.
Miner
Data Mining 역할을 가진 Node 입니다.
이들은 Blockchain P2P Network 상에서 발생한 Transaction 을 수집하고, Block 에 기록 한 뒤, 만들어진 Block 을 다시 다른 Node 들에게 전파합니다.
Miner 가 다수 존재하는 경우, 어떤 Miner 에게 Block 을 생성할 권리가 부여되는지, 혹은 어떤 Block 이 선택되는지, Consensus 에 의해 결정됩니다.
Competition and Verification (경쟁과 검증)
Node 는 서로 경쟁하고, 서로 의심하고, 서로 검증합니다.
Blockchain P2P Network 의 중요한 특징은 Competition (경쟁) 과 Verification (검증) 입니다. P2P Network 를 생각하면, Cooperation (협력) 을 떠올리기 쉽지만, Blockchain 에서는 각 Node 는 협력 관계가 아닙니다.
이미 Byzantine Generals Problem 을 통해 이해한 것 처럼, P2P Network 에서는 누구든 내게 거짓말을 할 수 있습니다. 따라서, Node 는 연결된 다른 Node 를 신뢰하지 않고, 자신이 가진 데이터와 규칙대로만 움직입니다.
Node 가 다른 Node 로 부터 Transaction 혹은 Block 을 받았으나, Node 스스로 보기에 이 Transaction 이나 Block 이 유효하지 않다고 생각된다면, 이 데이터를 동기화 하지 않고, 더 이상 전파도 하지 않습니다.
판단 근거는 다양하며, Consensus 에 의해 정의됩니다.
- 이미 사용된 Asset 을 다시 사용하려고 하거나, 에러를 일으키는 Transaction
- 너무 오래 된 Block
만약 Blockchain 을 사용하는 Service 를 만든다면, 직접 Node 를 운영하는 것이 좋습니다.
- 내가 관리하고 있는 Node 는 나의 Service 에 거짓말을 하지 않습니다.
- 불특정 관리자가 운영하는 다른 Node 는 언제든지 나의 Service 에 거짓말을 할 수 있습니다.
Majority Vote (과반 투표)
다수에 의해 결정된 것은 옳고 그름과 관계 없이 사실이 됩니다.
Node 는 자신이 Transaction 혹은 Block 을 받아들이거나 무시하는 것으로 해당 Transaction 과 Block 에 대한 투표를 행사합니다.
P2P Network 안에서 같은 Transaction 혹은 Block 을 전달 받았고, 이들이 같은 선택을 했다면, 이들이 가지게 되는 결과물 역시 같을 것입니다. 반대로 서로 다른 선택을 했다면, Node 는 이후 연쇄적으로 다른 선택을 일으키게 됩니다. 판단의 기반이 되는 데이터가 서로 다르기 때문에, 그 이후 선택 역시 계속해서 영향을 받습니다.
따라서, 같은 선택을 한 Node 끼리 그룹이 나뉩니다. 이렇게 그룹이 나뉘어 서로 다른 Blockchain 이 되는 경우를 Hard fork 라고 부릅니다.
Hard fork 는 개발 팀에 의해 의도 되기도 하고, 혹은 기술적 문제에 의해 발생하기도 합니다.
나누어진 Blockchain 은 별도의 Blockchain 이 되어 살아남기도 하고, 혹은 다수의 Node 가 주류 Blockchain 으로 이동하여 소멸하기도 합니다. 옳은 선택인지 그른 선택인지는 중요하지 않습니다. 다수가 살아남고, 소수는 소멸합니다.
Blockchain Node 를 운영하는 사람은 항상 Hard fork issue 를 확인하여 Node 가 항상 주류 그룹에 속할 수 있도록 대응하여야 합니다.
Discovery (발견)
Node 는 자신에게 일어난 일만 알고 있습니다.
Decentralized 를 목표로 한 Blockchain 이라면, P2P Network 내에는 전체 Node 를 통솔하는 존재가 없습니다. 어떠한 Node 도 다른 Node 에게 자신의 상황을 보고하지 않습니다.
따라서, Node 가 가진 정보는 자신이 Network 안에서 발견한 데이터 만으로 한정됩니다.
Transaction 이 Network 위에서 전파되고 있는 상황에서, 어떤 Node 는 이 Transaction 을 발견 하였고, 어떤 Node 는 이 Transaction 을 발견 하지 못 한 상태가 공존할 수 있습니다.
예)
Seoul 에 있는 Node 는 101 번 Block 을 동기화 하였으나, New York 에 있는 Node 는 103 번 Block 을 동기화 하고 있을 수 있습니다.
- Node 는 어떤 Block 이 Chain 내 가장 마지막 Block 인지 알 수 없습니다. 자신의 주변 Node 가 알려주는 마지막 Block 을 마지막 Block 으로 취급합니다.
- Node 는 동기화 상태에 따라, API 질의에 다른 답을 줄 수 있습니다. 충분히 동기화 되지 않은 Node 에의 API 호출은 주의가 필요합니다.
- Node 가 주변에 Transaction 및 Block 을 알리지 않거나, 충분히 전파되지 않았다면, 유실 될 수 있습니다.