코딩공부/블록체인 & 하이퍼레저 패브릭

6. 하이퍼레저 패브릭 구성요소(3)

에반셀린 2023. 8. 16. 10:08

https://product.kyobobook.co.kr/detail/S000001916918

 

하이퍼레저 패브릭으로 배우는 블록체인 | 윤대근 - 교보문고

하이퍼레저 패브릭으로 배우는 블록체인 | 프라이빗 블록체인 플랫폼 전문가를 위한 첫걸음! 국내 최초의 하이퍼레저 패브릭 입문서!국내외 많은 기업들이 블록체인 서비스 개발에 하이퍼레저

product.kyobobook.co.kr


1. Ledger

블록체인의 핵심인 분산원장(Distriduted Ledger)에 대해 알아보겠다.

디지털 세계의 원장을 알아보기에 앞서 현실 세계의 원장은 어떤 구조인지 알아보면 은행을 예로 들면, 은행에서의 원장은 현재 잔액과 통장 개설 시점부터 현재까지의 입/출금 기록 두 가지로 구분할 수 있다.

 

하이퍼레저 패브릭은 이러한 현실세계의 원장을 바탕으로 분산원장을 설계했는데, 하이퍼레저 패브릭의 분산원장도 현재 상태를 나타내는 World state, 원장의 생성 시점부터 현재까지의 사용 기록을 저장하는 블록체인(Blockchain) 두 가지로 구분할 수 있다.

 

  • World state에 저장된 데이터는 합의 과정에 의해 블록체인에 포함되기 전까지 체인코드를 통해 조회/변경/삭제가 가능합니다.

  • 합의에 의해 결정된 블록 및 블록체인은 절대 수정할 수 없습니다.(Non-deterministic, Fork 문제 해결)

  • World state는 데이터의 기록, 수정, 읽기 등이 빈번하게 발생하기 때문에(분산) 데이터베이스로 구축되어 있습니다.(LevelDB, CouchDB 지원)

  • 블록체인(Transaction log)은 데이터 요청이 거의 없고, append-only 방식의 저장이 목적이기 때문에 파일 시스템 형태로 저장되어 있다.

잘못된 데이터가 발견됐을 경우에도 이미 합으이가 완료된 블록의 데이터는 수정할 수 없다.

수정을 위해서는 World state에서 데이터를 적절하게 수정하여 값을 올바르게 맞춰줘야 합니다.

 

World state는 현재 값을 관리하는 데이터베이스인데 World state를 데이터베이스로 구축하게 되면 사용자들이 데이터를 저장하고 읽어올 때 다양한 기능을 사용할 수 있다. 하이퍼레저 패브릭에서는 key-value 저장 방식을 사용하는 LevelDB와 JSON 포맷의 저장 방식을 사용하는 CouchDB중 하나를 선택해서 World state 데이터베이스를 구축할 수 있다.

 

다음으로, 블록(Block)과 블록체인(Blockchain)에 대해서 알아보겠다.

정해진 용량만큼 혹은 일정 시간동안 발생한 트랜잭션은 하나의 블록이 됩니다. 블록체인은 이렇게 생성된 블록들이 합의 과정을 무사히 마친 후 암호화적 기법을 통해 생성된 순서대로 연결되어 저장되는 데이터를 일컫는다.

 

블록 헤더는 현재 발생하고 있는 트랜잭션에 대한 해시값과 이전 단계에서 생성된 블록의 해시값이 포함되어 있다. 이처럼 블록의 해시값이 연결된 데이터 구조에서는 블록에 저장된 데이터를 안전하게 보관할 수 있다. 왜냐하면 첫 번째 블록부터 현재까지의 블록 안에 모든 트랜잭션에 대한 기록이 저장되어 있기 때문에 악의적인 노드가 이전 블록의 값을 변경하려고 시도해도 올바른 블록을 소유한 Peer들의 합의 과정에 의해 저지당하게 됩니다.

 

블록에 암호화적 해시 기법으로 연결되어 있으며, 블록안에 Header, Data, Metadata 필드가 존재한다.

지금부터 블록을 구성하는 구성요소를 알아보고자 한다. 블록의 Header부터 살펴보자면, Header는 세 가지 항목으로 구성되어 있다.

 

  • Block number 0부터 시작하여 합의 과정에 의해 블록이 생성될 때마다 숫자가 1씩 증가하게 된다.

  • Current Block hash : 현재 블록에 포함되어 있는 트랜잭션의 해시값이다.

  • Previous Block Hash : 이전 블록에 대한 해시값이다.

Block Data에는 해당 블록에 포함된 트랜잭션이 순서대로 저장되어 있다.

트랜잭션을 구성하고 있는 세부 항목들은 다음과 같다.

 

  • Header : 트랜잭션의 version 정보와 트랜잭션이 실행되는 체인코드의 이름 등이 명시되어 있다.

  • Signature : 트랜잭션 생성자의 Identity 관련 디지털 인증서 정보가 있다.

  • Proposal : 체인코드에 들어가는 트랜잭션의 입력값이 저장되어 있다. 해당 입력값을 이용해서 체인코드를 실행시킨다.

  • Response : 트랜잭션 처리 결과값은 Read/Write Set 형태로 반환하는 필드이다.
    Read는 트랜잭션의 proposla이 반영되기 전 값이고, write는 proposal 값이 반영된 후의 값을 의미한다. 이 값은 추후 최신 블록 검증 과정에 사용된다.

  • Endorsement : 트랜잭션을 보증해 준 Peer의 Identity 정보가 포함되어 있다. 보증 정책에 따라서 Endorsement는 한 개 혹은 여러 개가 될 수 있다.

  • Chaincode name : 트랜잭션이 실행되는 체인코드를 구분하는 데 사용된다.
    Peer가 트랜잭션을 입력받으면 Chaincode name이 가리키는 체인코드를 실행한다.

마지막으로, Metadata에는 블록 생성자의 Identity 정보,

블록에 포함되어 있는 Transaction 보증 여부등이 포함되어 있다.

2. Gossip

Gossip 프로토콜이 하이퍼레저 패브릭에서 어떤 역할을 하는지 알아보고자 한다.

Gossip 프로토콜은 하이퍼레저 패브릭 네트워크에서 다음과 같이 두 가지 기능을 담당한다.

 

  • Peer는 끊임없이 브로드캐스트 메시지를 생성하여 동일한 채널에 있는 Peer들의 상태를 확인한다.
    만약에 Peer가 특정 시간동안 브로드캐스트 메시지에 대한 응답을 하지 못하게 되면 브로드캐스트 메시지에 응답하지 못한 Peer에 문제가 발생한 것으로 간주하고 해당 Peer는 네트워크에서 오프라인 상태로 인식된다. 
  • Peer는 Gossip 프로토콜을 통해 같은 채널 내 Peer들을 랜덤하게 선택하여 분산원장을 전송한다.
    Gossip 프로토콜을 통해 분산원장을 수신한 Peer는 자신의 분산원장과 비교하여 업데이트된 최신 정보가 있으면 자신의 분산원장에 해당 내용을 업데이트한다.

각 조직의 Peer는 Orderer로부터 분산원장을 업데이트할 수 있는데, 조직의 모든 Peer가 Orderer에게 분산원장을 요청하면 Orderer가 과부하될 가능성이 높아지게 된다. 그리하여 각 조직에서는 모든 Peer가 Orderer와 통신하는 대신 Leader Peer를 대표로 선출하여 Orderer와 통신을 하게 된다.

 

Leader Peer는 수동 혹은 자동으로 선출될 수 있다. 수동으로 Leader Peer를 선출하게 되면 한 대 이상의 Leader Peer를 설정할 수 있다. 이러한 경우 Orderer에 과부하가 걸리지 않도록, 그리고 조직당 Leader Peer가 한 대 이상은 살아있도록 시스템 관리자가 수동으로 관리해야만 한다.

 

자동으로 Leader Peer를 선출할 경우 각 조직당 한 대의 Leader Peer가 선출된다. 선출된 Leader Peer는 같은 조직의 Peer에게 Heartbeat 메시지를 주기적으로 보내어 자신이 살아있음에 증명한다. 만약에 하나 이상의 Peer가 특정 시간동안 Heartbeat 메시지를 수신하지 못한다면 새로운 Leader Peer를 선출하게 된다. 네트워크 장애가 발생하여 조직 내 네트워크가 2개 이상으로 나눠지는 경우 2대 이상의 Leader Peer가 존재할 수도 있다. 이러한 경우 단절된 네트워크가 다시 복구되면 2대 이상의 Leader Peer중 하나만이 Leader Peer 역할을 수행하게 된다.

 

Leader Peer뿐만 아니라 모든 Peer는 자신의 시스템 상태를 알리기 위해 Heartbeat 메시지를 브로드캐스트하는데, 예를 들어 같은 채널에 소속된 Peer들 중 특정 Peer로부터 일정 시간동안 heartbeat 메시지가 수신되지 않으면 해당 Peer는 죽은 것으로 간주되어 채널 맴버쉽에서 제외되게 된다.