Qaupot Blog
Software Engineering, Trip

이 글을 이해하기 위해서 컴퓨터 공학 지식이 필요하지 않습니다.

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 을 알리지 않거나, 충분히 전파되지 않았다면, 유실 될 수 있습니다.
이 블로그는 개인 블로그입니다. 게시글은 오류를 포함하고 있을 수 있지만, 저자는 오류를 해결하기 위해 노력하고 있습니다.
게시글에 별도의 고지가 없는 경우, 크리에이티브 커먼즈 저작자표시-비영리-변경금지 4.0 라이선스를 따릅니다.

This blog is personal blog. published posts may contain some errors, but author doing efforts to clear errors.
If post have not notice of license, it under creative commons Attribution-NonCommercial-NoDerivatives 4.0.