이번 포스팅에서는 비트코인 블록체인의 노드에 대해 자세히 알아볼 것이다.
공부를 하다보면 '노드' 라는 단어를 자주 접하게 된다. 노드의 의미를 검색해보면 편의상 지갑이라고 말하는 경우, 블록을 생성하는 주체 라고 말하기도 한다.
나는 노드를 비트코인 P2P네트워크를 유지하기 위해 컴퓨팅 파워를 사용하는 모든 주체 라고 정의를 할 것이다. 사실 지갑, 채굴 모두 맞는 표현이다. 블록체인의 노드의 종류는 다양하기 때문이다.
간단하게 블록체인이 어떻게 유지가 되는지 설명하겠다.
블록체인의 노드들은 p2p네트워크를 통해 동등한 포톨로지를 갖고 서로 유기적으로 연결된다. 각 노드들은 발생한 트랜잭션을 공유하고, 이들 중 채굴 경쟁에서 승리한 노드가 블록을 생성하며 새로 생성된 블록에 트랙잭션을 저장한다. 그리고 이 블록을 모든 노드에게 공유하고 노드들은 블록체인을 동기화 한다.
전반적인 블록체인의 프로세스를 설명하였다. 아마 전체적인 컨셉정도는 이해할 수 있을것이다.
조금 깊게 들어가보자. 위의 전반적인 설명에서는 노드의 역할을 단순하게 표현을 했으나 노드의 종류는 아래와 같이 7가지가 존재하며 역할은 다르다.
위 노드를 다 경험해 보기 위한 쉬운 방법은 https://bitcore.io/bitcoin 사이트 에 들어가서 Bitcore를 다운받고 실행을 해보는 것이다. 자신이 하나의 노드가 될 수있다. 여기서 지갑주소를 만들어 거래를 한다면 위 노드구성중 Wallet기능을 갖는것이고, 채굴작업을 하게되면 Miner기능을 경험할수 있다. Bitcore를 시작하게 되면 기본적으로 peer를 찾고 연결을 하게되는데 찾는데 성공하여 연결이 된다면 Network기능을 할수 있고, 만약 전체 블럭을 다운받고 유지한다면 Block-chain 데이터베이스 기능또한 갖게된다.
비트코인 블록체인에 어떤 기능만을 담당할지는 본인의 자유다.
그렇다면 맨 위의 노드종류부터 알아보자.
Full Node - 맨 상단에 Wallet, Miner, Block-Chain, Network 네가지가 모두 포함된 노드를 우리가 흔히 쉽게 언급하는 노드의 개념이며, 이를 Full Node라고 한다. 모든 기능을 다 활용하는 노드이다.
Full Block Chain Node - 바로 하단에 지갑과 채굴이 빠진 블록체인과 네트워크가 있는 노드는 Full Block Chain Node라고 하며 이는 Block-Chain만 유지하는 기능이다. 기본적으로 Block-Chain을 유지하기 위해서는 Network기능 또한 가지고 있어야만 한다. 새로 생성된 블록을 이웃 노드로부터 전달받아야 나의 Block-Chain 이 최신으로 유지되지 않겠는가.
Solo-Miner - 본인이 채굴한 블록 (적절한 Hash값을 찾아서) 을 자신의 Block-Chain에 저장하는 노드이다. 이도 마찬가지로 이웃 노드로부터 Block-Chain을 동기화 하며, 채굴한 블록정보를 이웃에게 전파해주기 위해 Network기능도 포함이 되어있다.
Light-Weight(SPV) Wallet - Block-Chain을 가지고 있지 않다. 지갑기능이 있기때문에 다른 주소로 비트코인을 전송할수있는 노드이다. 이때 발생한 트랜잭션을 이웃노드에게 전달해주어야 하기때문에 Network기능을 가지고 있다. 이 노드는 대부분 모바일 지갑에서 사용된다. 모바일 환경은 Block-Chain을 유지하기에는 저장공간의 한계와 Hash값을 찾기위한 처리속도의 문제로 채굴이 힘들기 때문이다. 다만 트랜잭션의 검증과 블록의 검증은 할수있다. 내부에 블록의 요약본인 Block Header정보를 가지고 있기 때문이다. 이 노드는 매우 중요하기 때문에 이어지는 다음 포스팅을 통해 자세히 다룰것이다.
Pool-Protocol Server - 이는 Pool Server와 Stratum Server 두개를 따로 생각해야 된다. 스트라텀 네트워크는 채굴기능만을 가지고 있는 노드와 Block-Chain기능을 가지고 있는 노드, 그리고 위에서 언급한 SPV Wallet을 연결하는 프로토콜이다. 채굴기능만 있다면 이를 저장할 노드가 필요할 것이기 때문에 이 두가지를 연결해 주는 역할이다. Pool 프로토콜은 어떤 지갑에서 트랜잭션이 발생할때 어떤 한곳에 모이게 되는데 이를 Pool 이라고 하며, 아직 승인되지 않은 트랜잭션들을 가지고 있다. 때문에 채굴기능만을 가지고 있는 노드는 이 Pool 프로토콜이 필요할 것이다.
Light-Weight Stratum Wallet - 위의 Light-Weight(SPV) Wallet 의 기능과 같으나 Network 기능이 없다. 때문에 Stratum프로토콜을 이용하여 Network기능이 있는 노드와 연결하여 이웃에게 트랜잭션을 전달한다.
Mining-Node - 채굴만을 담당하는 노드이다. 2가지 경우가 있다. Pool과 연결과에 채굴하는 경우와 Stratum과 연결되어 Light-Weight Stratum Wallet과 Stratum프로토콜을 가지고 연결되어있는 경우 2가지 이다. 전자는 말그대로 Pool이 바로 붙어있기에 채굴만 하면 될 것이고, 후자의 경우는 Stratum 프로토콜을 통해 연결되어 Network기능이 있는 노드와 연결 후 Pool에 접근할 것이다. Stratum 프로토콜을 사용하는 것의 차이다.
이렇게 노드의 종류가 다양한 이유는, 위에서 언급한 노드의 기본적인 4가지 기능 (지갑, 채굴, 블록체인, 네트워크) 에 대해 모든 기능을 가지고 있는 노드는 많지 않기 때문에, 이를 보완해 주기 위해서 Stratum프로토콜과 Pool프로토콜이 존재하게 되었다. 그리고 이 두개의 프로토콜과의 연결관계로 인해 노드의 종류가 다양해진 것이다.
위의 노드들이 존재하는 비트코인의 전체 네트워크의 그림은 아래와 같다.
Network 기능이 없는 노드들은 Stratum프로토콜을 이용하여 연결이 되어 있는 것을 볼수 있고 Stratum프로토콜을 통해 Block-Chain기능, Network기능이 있는 노드와 연결되고 이 Network기능을 통해 Full Node와 연결이 되어있다.
Stratum프로토콜조차 사용하지 않고 채굴을 하는 Miner노드는 Pool프로토콜을 사용하여 주변 Block-Chain기능이 있는 노드와 연결이 되어있다. 아마 이 경우는 채굴만을 전담으로하는 업체들이 주로 사용하는 방식일 것이다.
만약 새로운 노드의 기능이 생긴다면, 위에서 설명한 노드 외에 새로운 노드와 이를 뒷바침할 프토토콜이 생길 가능성도 있다고 예상해본다. 현재 비트코인 네트워크의 노드 종류는 위와 같다.
이어질 바로 다음 포스팅에서는 트랜잭션이 생성된 시점부터 최종 블록에 추가되는 단계까지 Flow를 알아볼텐데, 이때는 Full Node, SPV노드(지갑), Miner노드(채굴) 라고 단순하게 3가지로만 생각하기로 하자. 저 위의 노드들의 상황을 다 고려하면 오히려 머리가 아플것이다.
글을 마무리 하기 전 현재 존재하는 Full Node의 수는 몇개인지 알아보자.
직접 확인하고 싶은 사람은 https://bitnodes.earn.com/ 에 접속해보자.
현재 11359개의 Full Node가 비트코인 네트워크를 열심히 유지하고 있음을 확인할 수 있다.
Full Node의 수는 매우 중요하다. 그만큼 비트코인이 얼마나 안정적으로 운영이 되고 있는지를 확인 할수 있기 때문이다.
Bitcore를 설치하게 되면 가장 먼저 Full Node와 연결을 하여 네트워크를 유지하게되고, 필요하다면 Block-Chain을 전달받을 수도 있다. 정확하게는 종자노드 (오랫동안 Full Node를 잘 유지해온 노드)라는 단어를 사용한다.
노드의 종류에 대해서 알아보았다. 글 중간에 언급한대로, 나의 다른 포스팅을 보거나 다른 블록체인 관련 글을 읽을 때는 쉽게 지갑 = SPV노드 , 채굴 = Miner노드 라고 생각하면 편하고, 모두 Full Node라고 생각해도 글을 이해하는데는 문제가 없을것이다.
이어서 트랜잭션이 발생한 후 부터 블록에 저장되기 까지의 Flow에 대한 포스팅을 진행하겠다.
질문이나 추가정보가 있거나 포스팅 내용에 문제가 있다면 댓글 바란다.
https://steemit.com/kr/@niipoong/bitcoin-tx-and-block-store-process
트랜잭션 발생부터 블록저장 포스팅입니다. 참고바랍니다.