Hyperledger Fabric - (a)

zzwwoonn·2022년 4월 11일
1

Block Chain

목록 보기
1/4

하이퍼레저 패브릭이란 무엇일까? 기존의 블럭체인 네트워크들과의 차이점은 무엇이며, 어떻게 이루어져 있는지, 동작 방식까지 쉽고 간단하게 알아보자

혼자 공부를 하며 보다 이해를 원활히 하기 위한 목적으로 정리한 내용입니다. 글의 순서나 맥락이 어수선하여 이해를 하는데 어려울 수 있고, 특정 강의를 듣거나 배우지 않았기에 내용이 정확하지 않을 수 있습니다. 틀린 부분이 있다면 가감없이 따뜻하지만 객관적인 지적 부탁드립니다🤓

개념

하이퍼레저 프로젝트 중 가장 활발하게 활동 중인 하이퍼레저 패브릭 모듈러 아키텍쳐를 이용한 어플리케이션/솔루션 개발을 가능하도록 해주는 프레임워크이다.

하이퍼레저 패브릭은 허가형 프라이빗 블록체인(Permissioned Private Blockchain)의 형태를 가진다. 누구나 자유롭게 참여가 가능한 기존의 퍼블릭 블록체인(비트, 이더)과 달리, 하이퍼레저 패브릭에서는 인증 관리 시스템(패브릭 CA - 인증 기관, 중간 관리자 역할)에 의해 허가된 사용자만이 블록체인 네트워크에 참여할 수 있다. 이 둘의 차이점에 대해서는 제일 마지막 부분에 다뤄본다.

따라서 패브릭 네트워크에 참여한 노드들은 이미 시스템에 의해 허가된, 신뢰를 가진 노드로 볼 수 있고 퍼블릭 블록체인에서 사용하는 악의적인 노드를 검증하기 위한 복잡한 합의 알고리즘 등을 필요로 하지 않는다. 단지 원장에 접근하려는 사용자가 허가된 노드인가, 그러한 권한이 있는가, 트랜잭션이 제대로 구성되어 있는가를 검증하는 정도로 충분하다.

또한 패브릭에서는 모든 노드가 동일한 원장으로 정보를 공유할 수 있고, 비지니스 목적에 맞게 공유하고자 하는 노드 간에만 별도의 원장을 생성하는 것도 가능하다. 기존의 블록체인 네트워크(퍼블릭 - 이더, 비트)에서는 참여한 모든 노드에게 원장에 기록되어 있는 정보가 공유되었다. 하이퍼레저 패브릭은 네트워크 내에서 목적에 맞는 별도의 원장을 생성할 수 있는 채널(Channel)을 제공한다.

구성요소

Ledger

블록체인 기술의 핵심인(보통 블록체인 그 자체라고 부르기도 한다) 분산원장(Distributed Ledger)이다. 블록과 거래가 들어가있는 블록체인이라고 이해하면 된다. 공유하고자 하는 데이터의 변화를 모두 기록해둔 것이 원장(Ledger)이다.

원장은 현재의 최신 상태를 저장해놓은 데이터베이스인 월드 스테이트(World State)와 상태 변화에 대한 모든 로그 기록이 저장 되어있는 블록체인(Blockchain) 부분으로 나뉘어있다. 일반적으로 Peer만 들고있다(활용한다). Orderer가 들고있는 Ledger는 배포용이다.

추가로 원장에 새로운 내용을 업데이트 하거나 기존의 내용을 읽어 오기 위해 필요한 것이 바로 체인코드(Chaincode, smart contract)이다.

Smart Contract
스마트 컨트랙트는 블록체인에 등록되어 작동하는 프로그램으로서, 특정한 기능들의 실행을 가능하게 해준다. 복잡한 계산은 물론, 데이터의 기록과 변경, 가치의 전송 등 목적에 맞는 알고리즘을 프로그래밍할 수 있으며, 실행되는 모든 정보는 블록체인에 기록된다. 블록체인 상에서 작동되는 프로그램이므로, 중앙서버나 계약의 중재자가 없어도 실행되며, 블록체인의 장점인 안전성, 정확성, 투명성 등이 모두 보장된다.

스마트 컨트랙트는 서로 다른 조직간의 규칙을 정의하고 애플리케이션에서 스마트 컨트랙트를 호출하는 트랜잭션을 요청하여 그 결과를 원장에 기록한다. 스마트 컨트랙트는 주로 world state에서 put, get, 그리고 delete 동작을 정의하며 블록체인에 존재하는 트랜잭션 기록을 쿼리를 통해 얻을 수 있다.

Peer

클라이언트의 요청에 의해 발생하는 체인코드의 실행을 담당한다. Peer node는 Orderer가 만든 블록을 검증하고 그 블록을 바탕으로 원장(Ledger)을 저장하고 유지하는 노드이다. (블럭을 받아서 자기 블럭 체인에 연결하고 자기의 월드 스테이트를 업데이트한다.)

원장(Ledger, Chain)을 가진 패브릭에서 가장 기본이 되는 노드이다. 블록체인을 보관한다. 트랜잭션(거래)을 시뮬레이팅 하는 역할을 수행한다. 원장(Ledger)과 체인코드(Chaincode, smart contract)를 관리하며 패브릭 네트워크를 구성하는 노드를 피어(Peer)라 부른다.

시뮬레이팅
트랜잭션이 참조할 체인코드를 호출하고 승인하는 피어가 로컬로 보유하고 있는 상태의 복사본을 호출하여 트랜잭션을 임의로 실행하는 피어를 승인하는 것과 관련

패브릭 네트워크 참여자들은 피어에 설치되어 있는 체인코드 실행 요청을 통해 피어에 저정된 원장에 데이터를 읽거나 쓸 수 있다. (자신에게 요청된 트랜잭션을 검증하고 전파한다) 이러한 요청은 보통 사용자의 편의를 위해 체인코드와 함께 개발되는 Dapp을 통해 이루어진다.

체인코드 실행을 요청하는 트랜잭션이 발생하면 3단계의 과정(execution-ordering-validation, 다음 포스팅에 자세하게 설명)을 거쳐 원장에 기록되고 사용자에게 결과를 반환한다.

Orderer

검증된 트랜잭션들을 이용해 최종적으로 블록을 생성한다(트랜잭션(거래)을 모아서 블록을 생성"만" 한다. (시뮬레이팅 하지 않음, <블록을 찍어내기만 한다>라고 이해)) 합의 알고리즘에 따라 클라이언트들(App, User)로부터 오는 거래(transaction proposal, 거래 제안)들을 순서화(정렬)시켜 피어 노드에 전달한다. (패브릭 네트워크에서 블록 내의 트랜잭션 순서를 결정하는 역할을 담당)

정리 해보자면 Endorsing peer들이 시뮬레이션을 통해 적절하다고 판단한 트랜잭션들을 모아서 정렬한 후 실제 블럭을 생성하는 노드를 orderer라 하는 것이다. 하이퍼레저 패브릭에서 orderer가 트랜잭션의 순서를 정렬하는 방법에는 solo와 kafka 방식이 있다.

orderer는 블록을 생성한 후 자신에게 연결되어 있는 leader peer들에게 블록을 전달하고, leader peer들이 다시 자신이 속한 채널의 peer들에게 블록을 전달하면 peer들은 블록을 검증한 후 자신의 원장에 추가시키게 된다. 패브릭에서는 체인코드 실행을 요청하는 트랜잭션부터 원장에 기록되는 과정을 통틀어 합의라고 부른다.

체인코드의 보증 정책에 따라, 하나 내지 여러 피어에게 같은 입력에 대한 체인 코드 실행 결과가 동일함을 보증받는 것이 첫 번째 신뢰 단계이고, 체인코드가 생성한 트랜잭션들이 오더러에 의해 한 블록 내에서 같은 순서로 취합되는 것이 두 번째 신뢰 단계이다. => 다음 포스팅에서 자세하게 다뤄보자.

CA

패브릭은 허가된 사용자만이 참여할 수 있는 허가형 블록체인이라고 했다. 패브릭에서는 사용자의 권한 및 인증을 위해 MSP(Membership Service Provider)라는 인증 관리 시스템을 사용하는데 여기에는 네트워크 내 노드의 역할과 권한 등이 정의되어 있다. 또 이러한 MSP를 발급하고 관리하는 역할을 하는 기관을 CA(Certificate Authority)라고 한다.

패브릭 네트워크의 각 조직들은 자신의 신원을 관리하고 각 조직에 속한 사용자들을 인증하기 위해 CA(Certificate Authority)를 운영한다. CA는 조직과 사용자들에게 디지털 증명서(digital certificate)를 발급하는 역할을 한다. 사용자를 인증해주는 것은 중요한 역할이기 때문에 CA는 보통 신뢰있는 기관이 담당하는데, 하이퍼레저 패브릭에서는 Fabric-CA 노드가 그 역할을 수행한다.

App

사용자, User, Client, Application 등을 의미하기도 한다. 인증서, 지갑에 해당하는 무엇인가를 가지고 거래를 만드는 역할이다. Peer와 Orderer와 함께 상호작용한다. 패브릭 네트워크를 사용할 수 있는 유저 정보와 패브릭 네트워크 접속 정보를 이용하면 네트워크 외부에서 트랜잭션을 발생시키거나 데이터를 조회할 수 있다. 현재 지원하는 하이퍼레저 패브릭 SDK 는 Node.js, Java, Go SDK 이다.

Chaincode

Chaincode, smart contract, 하이퍼레저 패브릭에서는 스마트 컨트랙트와 체인코드라는 용어를 같은 의미로 사용한다. 하지만 그 둘에는 미세한 차이가 있다. 일반적으로 스마트 컨트랙트는 world state에 포함된 비즈니스 객체의 생명주기(life cycle)를 제어하는 트랜잭션 논리를 정의한다. 반면 체인코드는 정의한 트랜잭션 논리를 패키징하여 블록체인 네트워크에 배포한다.

즉, 스마트 컨트랙트는 트랜잭션을 관리하는 역할이고 체인코드는 스마트 컨트랙트 배포를 위해 패키지화되는 방식을 관리하는 역할이다. 스마트 컨트랙트는 체인코드 내에 정의되고 동일한 체인코드 내에 여러 스마트 컨트랙트를 정의할 수 있다. 체인코드가 배포되면 그 안에 있는 모든 스마트 컨트랙트가 애플리케이션에 제공된다.(포함 관계라고 이해)

같은 버전, 같은 내용의 체인코드가 참여자들 사이에서 공유되어 사용되어야 하며 공유되는 체인코드를 통해 하나의 비즈니스 프로세스를 수행하고 데이터를 공유한다. 체인 코드는 일반적으로 네트워크 구성원이 동의 한 비즈니스 논리를 처리하므로 스마트 컨트랙트로 간주 될 수 있다. 체인 코드에 의해 생성 된 상태는 해당 체인 코드로만 범위가 지정되며 다른 체인 코드로 직접 액세스 할 수 없다. 하지만 동일한 네트워크 내에서 적절한 권한이 주어지면 체인 코드는 다른 체인 코드를 호출하여 해당 상태에 액세스 할 수 있다.

퍼블릭, 프라이빗 공통점과 차이점

비트, 이더

  • 퍼블릭 블록체인
  • 개인키 기반
  • 하나의 프로그램이 모든 걸 처리한다.
    (하나의 노드가 거래를 모으기도 하고, 블럭도 만들고, ... 혼자 다 한다)
  • 블록 생성자 = 스마트 컨트랙트

Fabric

  • 프라이빗 블록체인
  • 인증서 기반으로 상호작용 - Fabric CA 라는 중간 관리자가 있다
  • 각각 역할을 나누어서 처리 (각 역할이 분배되어 있다)
    (거래 모으는 애랑, 거래 시뮬레이팅 하는 애랑, 블럭을 만드는 애랑 다 제각각이다.)
  • 블록 생성자 != 스마트 컨트랙트
  • 하나의 키 값을 한 블록에서 여러 번 바꿀 수가 없다.

1개의 댓글

comment-user-thumbnail
2022년 4월 11일

덤벨님 좋은 글 잘 읽었어용

답글 달기