본문 바로가기
Block Chain/블록체인 구조와 기술

[블록체인] 7장, P2P 네트워크

by Y06 2021. 2. 16.

 

7.1 P2P 네트워크 개요

P2P 네트워크란 '대등한 관계의 컴퓨터 그룹이 직접 통신을 수행하는, 중심이 없는 네트워크'를 의미한다.

 

클라이언트 º 서버형 아키텍처에서는 각 컴퓨터의 역할이 명확하게 정해져 있으며 소수의 서버에 다수의 클라이언트가 접속하는 형태로 구축된다.

 

P2P형 시스템에서는 각 컴퓨터(이후 노드라고 표현한다)가 서로의 역할을 동시에 담당한다. 즉 각 노드는 서비스를 사용하는 동시에 서비스를 제공하는 기능도 한다. P2P형 시스템은 네트워크에 참가하는 노드가 서비스의 부분을 제공하게 된다. 이러한 시스템을 실현하기 위해 각 노드는 다른 노드와의 통신 경로를 설정하고 상호간에 서비스를 제공하는 네트워크를 구축한다.

 

클라이언트 º 서버형 P2P형
장점 단점 장점 단점
시스템의 중심에 위치한 서버가 서비스의 관리를 집중적을 수행하기 때문에 시스템의 설계나 유지가 쉬움 - 서버에 장에가 발생하는 경우 서비스가 중지됨

- 고서양 서버와 큰 네트워크 대역폭을 마련해야 함
- 서버를 준비할 필요가 없음

- 참가하는 각 노드의 자원과 네트워크 회선을 이용해 부하를 분산시키며 시스템을 운영하기 때문에 높은 확장성을 가짐
다수의 노드가 참여하는 P2P 네트워크를 구축하거나 다른 노드를 찾는 기능을 설계하기 위해서는 많은 노력이 필요함

7.2 P2P 네트워크 설계

P2P형 시스템에서의 서비스는 다수의 노드로 분산되어 제공한다. 따라서 자신의 요청에 대한 응답을 해줄 다른 노드를 찾는 기능이 필요하다.

 

7.2.1 퓨어 P2P와 하이브리드 P2P

P2P 시스템을 크게 분류하면 노드 탐색을 위해 인덱스 서버를 활용하는 '하이브리드 P2P'와 노드의 탐색도 포함해 자율 분산적으로 움직이는 '퓨어(Pure) P2P'의 2가지로 분류할 수 있다.

 

하이브리드 P2P - 각 노드가 보유한 데이터의 정보가 인덱스 서버에 기록된다.

- 노드는 자신이 요구하는 데이터의 소유자를 인덱스 서버에 질의하고 해당 데이터를 가진 노드 정보를 받은 뒤 직접 노드에 연결해 데이터를 교환한다.

- 각 노드가 직접 데이터를 주고받는 것은 P2P 형태지만 인덱스 서버에 요청하는 부분은 클라이언트 º 서버형 시스템의 형태다.
퓨어 P2P - 순수 P2P를 구현하고 있기 때문에 인덱스 서버 없이 자신이 원하는 데이터를 검색하는 기능도 노드 그룹에 의해 자율적으로 이루어진다.

- 데이터 검색은 P2P 네트워크 내의 노드 사이에서 메시지 전송을 통해 이루어진다.

P2P형과 클라이언트 º 서버형의 장단점은 하이브리드 P2P와 퓨어 P2P에도 동일하게 적용된다.

 

하이브리드 P2P는 인덱스 서버가 노드 검색 기능을 담당하기에 설계와 관리가 용이하지만 내결함성(Fault Tolerance)과 확장성이 떨어진다는 단점이 있다. 퓨어 P2P는 P2P의 장점을 최대한 활용해 확장성과 내결함성이 높지만 노드 검색을 위한 알고리즘을 구현해야 한다.

 

7.2.2 비구조화 오버레이와 구조화 오버레이

퓨어 P2P형 시스템은 중앙 서버 없이 노드 탐색을 실현하기 위해 응용프로그램 수준의 네트워크를 구축해야 한다. 이것을 '오버레이 네트워크'라고 한다. 오버레이 네트워크는 각 노드와 노드간 통신 경로에서 구성돼 실제 네트워크와는 다른 네트워크 토폴로지를 가진다.

 

비구조화 오버레이는 각 노드가 인접 노드를 선택할 때 제약이 없도록 설계한 오버레이 네트워크다. 즉, 특정 네트워크 토폴로지가 규정되지 않았다는 말이다. 노드 탐색은 메시지를 인접 노드에 차례로 전파해 확산시키는 방법을 사용한다. 비구조화 오버레이의 장점은 유연한 탐색이 가능하다. 하지만 이 방식은 목적 노드에 메시지가 전달되는 것을 보장할 수 없고, 노드 수가 증가하면 네트워크에 메시지가 너무 많아지는 확장성 문제가 발생한다는 단점이 있다.

 

비구조화 오버레이에서 메시지 전파 문제를 해결하기 위해 일부 시스템에서는 '슈퍼 노드'라는 개념을 도입했다. 이것은 일부 노드를 다른 일반 노드보다 상위 노드를 만드는 것이다. 메시지의 전파는 슈퍼 노드끼리 구축된 네트워크에서 이루어진다.

 

슈퍼 노드는 네트워크에 참가하는 노드 수에 따라 수가 조절된다. 슈퍼 노드의 임명은 노드와 네트워크의 성능 등을 통해 자율적으로 이루어진다.

 

구조화 오버레이는 각 노드별로 연결할 상대가 미리 정해져 있으며 네트워크 토폴로지도 엄격하게 설계된 오버레이 네트워크다. 각 노드에는 ID가 할당되고 그 ID에 따라 연결할 상대가 결정된다. 전형적인 구조화 오버레이 위에서는 각 데이터에 대해서도 노드와 동일한 ID가 할당돼 각 데이터는 자신의 ID와 가장 가까운 ID를 가진 노드에 저장된다. 메시지 전송도 ID를 사용한 경로를 선택(라우팅-Routing)으로 이루어진다. 메시지에는 대상 ID를 기재해 대상 ID에 가까운 인접 노드가 선택되게 한다. 이렇게 전송이 반복되면 대상 ID에 메시지가 도착한다.

 

구조화 오버레이의 장점은 메시지 도착 가능성 및 확장성이 높다는 것이다. 네트워크 토폴로지도 엄격하게 설계됐기 때문에 노드 수가 증가해도 메시지의 전송횟수는 크게 늘어나지 않는다.

 

한편 구조화 오버레이는 ID 등을 기반으로 메시지를 전송하기 때문에 비구조화 오버레이와 같이 유연한 탐색은 할 수 없다. 대부분의 구조화 오버레이 검색 알고리즘은 데이터 ID를 사용한 완전 일치 검색만 가능하다.

 

7.2.3 블록체인 기반 기술 분류

Bitcoin Core
/ 이더리움
모든 노드가 같은 역할을 가지고 동등한 네트워크를 형성하기 때문에 퓨러 P2P로 분류할 수 있다. 또한 에트워크 토폴로지에 제약도 없기 때문에 비구조화 오버레이라고도 한다.
Hyperledger Fabric validating peer/non-validating peer처럼 노드에 따라 역할이 다르다는 점에서 슈퍼 노드의 개념을 도입한 비구조화 오버레이라고 볼 수 있다. 또한 전용 멤버십 서버를 가지고 있다는 점에서 하이브리드 P2P라고도 할 수 있다.

7.3 P2P 네트워크에 따른 블록체인의 동작(개요)

P2P 네트워크에서 블록체인이 어떻게 작동하는지 살펴보자.

 

  1. 블록체인을 구성하는 P2P 네트워크에서 한 노드(노드 X라고 한다)가 거래 데이터(트랜잭션)를 보낸다. 아직 이 시점에서 거래 자체는 실행(성립)되지 않은 상태다.
  2. 노드 X로부터 P2P 네트워크로 전달된 트랜잭션은 네트워크에 참가하는 모든 노드로 전파된다. 이처럼 자신이 작성한 거래 데이터를 블록체인 네트워크에 전송하고 모든 참가 노드에 전파시키는 것을 '브로드캐스트'라고 한다.
  3. 트랜잭션을 받은 모든 노드가 마이닝을 실시해 조건에 맞는 해시값을 발견하면 기존의 블록체인에 새로운 블록을 추가한다(발행자는 노드 Y라고 한다). 이것을 Proof of Work(PoW)라고 한다.
  4. 새로운 블록을 추가한 노드 Y는 블록을 P2P 네트워크에 브로드캐스트 한다.
  5. 블록을 받은 각 노드는 블록이 올바른 것인지 검증하고, 문제가 없다면 해당 블록을 받아들여 자신이 가지고 있는 블록체인을 업데이트한다. 그리고 이 시점에 거래가 성립된다.

7.4 P2P 네트워크에 따른 블록체인의 동작(상세)

7.4.1 P2P 네트워크에서 다른 노드와의 연계

 

Bitcoin Core 1. DNS(예를 들어 bitseed.xf2.org)를 통해 검색

2. 클라이언트 소프트웨어에 사전에 하드코딩된 준 영구 노드 목록 참조

3. 명령줄에서 지정한 IP 주소 순서대로 네트워크의 노드 목록을 취득하여고 시도한다.

-> 2번째 이후는 그때까지 네트워크에서 인식한 노드 목록을 각 클라이언트의 내부 데이터베이스에 보존해놓기 때문에 그 정보를 바탕으로 다른 노드와의 연계를 시도한다.
이더리움 시작점이 되는 노드에서는 사전에 하드코딩된 부트스트랩 노드 목록을 참조해 연결을 시도한다. 그리고 이 부트스트랩 노드는 기동시 명령줄에서 지정할 수 있다. 그밖의 다른 노드는 디스커버리 프로토콜을 사용해 발견할 수 있다.
Hyperledger Fabric 기동시 지정한 시작점이 되는 노드(CORE_PEER_DISCOVERY_ROOTNODE)에 대한 디스커버리 프로토콜을 발행해서 참가자 목록을 받아온다. 그 후의 동작은 해당 노드가 validating peer냐 non-validating peer냐에 따라 달라진다. validating peer의 경우 정보를 전파하기 위해 자신을 제외한 모든 validating peer와 매시 형태의 네트워크를 구축한다. 반면 non-validating peer는 연결이 허용된 가장 가까운 validating peer와 연결을 수행한다.

7.4.2 데이터(블록) 송수신

Bitcoin Core는 정보 본체를 송수신할 때 그 해시값을 inv 메시지로 상대방에게 보내주고, 정보를 송수신해야 할 때는 getdata 메시지를 보내 정보의 본체를 요구하는 특징을 가지고 있다. 이런 방법으로 P2P 네트워크를 흐르는 데이터 양을 줄일 수 있다.

 

이더리움은 블록체인의 데이터 자체가 아니라 그 해시를 모든 노드가 공유하는 공간에 체인으로 지정해 '워터 풀'로 이용한다. 이 워터 풀에서 자기 노드에게 부족한 데이터를 찾고, 해시를 이용해 블록을 요청하거나 획득한다.

 

Hyperledger Fabric은 노드간 통신에 gRPC를 이용하며 이를 통해 양방향 스트림 기반 메시징을 할 수 있다. 그리고 직렬화된 Protocol Buffers를 사용하고 있다. gRPC와 Protocol Buffers는 모두 구글에서 개발한 기술이다.

 

 


출처: 블록체인 구조와 기술_아키하네 요시하루, 아이케이 마나부 지음