하이퍼레저 개요
요약
블록체인 개념
개념, 구현 맥락, 후속 학습거리를 지식 그래프에 연결하기 위한 정리 노트입니다.
핵심 포인트
- 블록체인 개념
- 하이퍼레저 프로젝트
- Hyperledger Fabric 아키텍처
- 컴포넌트
- 핵심 용어
지식 그래프
정리 내용
하이퍼레저 프로젝트
하이퍼레저 프로젝트는 리눅스 재단에서 주관하는 블록체인 오픈소스 프로젝트로 금융, IoT, 물류, 제조, 기술 산업 등 여러 산업에 걸쳐 응용 가능한 블록체인 기술을 만드는 것이 목표이다.
Hyperledger Fabric 아키텍처

컴포넌트
- 신원확인 (Identity)
- 패브릭 네트워크에 접속하려면 신원확인을 가장 먼저 진행한다. 패브릭은 폐쇄형 구조의 프라이빗 블록체인을 지향하고 있으며 권한을 가진 사용자만이 분산원장에 데이터를 입력, 수정. 삭제 할 수 있기 때문이다. 신원확인은 MSP(Membership Service Provider)를 통해 이뤄진다.
- 원장 (Ledger)
- 블록에 트랜잭션(거래) 정보가 실제로 저장되는 공간이다. 블록체인의 데이터를 관리하는 분산원장 데이터베이스를 가리키며, 이를 관리 및 처리하기 위한 기능으로 구성돼 있다. 하이퍼레저 패브릭에서는 한채널이 한 원장을 가지며 한 채널 안에 속한 피어 노드는 동일한 원장의 복사본을 가진다. 원장은 업데이트되며 채널 안에서 합의를 통해 일관성을 유지한다.
- 거래 / 트랜잭션 (Transaction)
- 스마트 컨트랙트인 체인코드의 실행을 의미한다. 대용량 트랜잭션을 처리하기 위해 버전 1.0부터 기존 버전 0.6의 아키텍처 구조를 획기적으로 변경한 새로운 아키텍처를 제공하고 있는데, Endorsing peer(엔도싱 피어)와 Ordering Service Node(오더링 서비스 노드)가 그 역할을 수행한다. 엔도싱 피어 노드를 통해서 보증 검증과 트랜잭션을 배치 처리하고, 오더링 서비스 노드를 통해 프라이빗 블록체인 네트워크에 참여하고 있는 모든 피어 노드들에게 분기하는 역할을 수행하고 있다.
- 스마트 계약 / 체인 코드 (Smart Contract)
- 체인 코드를 통해 프라이빗 블록체인에서 기업 및 컨소시엄으로 구성된 서비스에 맞게 블록체인을 활용할 수 있도록 비즈니스 로직을 구현할 수 있다. 하이퍼레저 패브릭은 이와 샅은 비즈니스 로직을 구현할 수 있도록 다양한 개발 언어를 지원하고 있는데, 버전 1.1부터 Go, Node.js, Java등을 지원하기 시작했다. 더 나아가 개발 언어의 장벽을 없애기 위해 ‘하이퍼레저 컴포저’ 라는 별도의 간단한 UI 기반 개발 도구도 제공하고 있다.
핵심 용어
- 채널
- 네트워크에서 구성 요소 간 그룹을 나눠 트랜잭션을 수행해야 할 때 사용한다. 트랜잭션의 접근 권한을 그룹별로 설정하고 관리하는 중요한 프라이빗 블록체인 기술 요소이다.
- 조직
- 네트워크느 조직 단위로 구성되는데, 조직 별로 피어 노드 관리 및 권한 부여, 보증 정책 등을 수행하며, 클라이언트, 즉 네트워크 참여자의 접근 권한도 관리한다.
- 피어노드
- 가장 기본적인 네트워크 구성 요소로, 블록체인 네트워크를 유지하고 트랜잭션의 제안 및 응답을 처리하며, 원장과 체인코드를 관리하고 저장하는 역할을 수행한다.
- 엔도싱 피어 노드
- 보증 정책에 따라 요청된 트랜잭션을 먼저 실행해보는 검토 역할을 수행한 후 트랜잭션에 트랜잭션 보증 사인을 첨부하는 역할을 한다.
- 커미팅 피어 노드
- 엔도싱 피어 노드가 실행한 트랜잭션 결과를 검증 문제가 없으면 트랜잭션을 확정하고 그 내용을 블록체인에 업데이트하는 역할을 한다.
- 앵커 피어 노드
- 채널 내에서 대표 역할을 수행하는 피어 노드다
- 리더 피어 노드
- 조직에서 모든 피어 노드를 대표한다.
- 오더링 서비스
- 피어 노드에게 트랜잭션을 전달해 전체 블록체인 네트워크가 작동하도록 컨트롤하는 오더링 서비스 노드가 존재한다.
- 오더링 서비스 알고리즘
- Solo 오더링 서비스
- 가장 기본적인 알고리즘으로 하나의 중앙 집중형 오더링 서비스가 모든 트랜잭션의 순서를 결정한다. 즉, 개발자가 블록체인 네트워크를 구성할 때 쉽고 간단하게 이용할 수 있도록 만들어진 오더링 서비스로, 상용화가 아닌 테스트 용도로 사용하는 것이 적합하다. 가용성 확장성을 고려하지 않은 서비스
- 카프카 기반 오더링 서비스
- Pub/Sub 구조의 메시지큐 미들웨어인 카프카 기반의 오더링 서비스로 시스템의 결함으로 인해 피어 노드가 멈췄을 때 다른 분산 오더링 서비스를 제공할ㅇ 수 있다. 즉, 높은 처리량과 고가용서을 제공하지만, 비잔티움 문제에 노출돼 있는 한계가 있다.
- RAFT 오더링 서비스
- CFT(Crash Fault Tolerant) 알고리즘 기반 오더링 서비스다, 채널당 선출된 리더 노드(정확히는 채널 내 오더링 서비스 노드들 중에 하나) 가 모든 트랜잭션을 처리하고 그 결과가 나머지 노드에게 복제되는 리더 및 팔로워 모델에 기반한다. 비잔티움 문제를 해결하기 위해 하이퍼레저 패브릭이 출시한 BFT 계열 알고리즘이다. 하이퍼레저 패브릭 자체에 내장된 기술이기 때문에 카프카 기반 오더링 서비스 보다 구축이나 관리가 쉽다.
- Solo 오더링 서비스
- MSP
- 블록체인 네트워크에 인증 서비스를 제공하는 역할을 한다. 모든 참여자에게 해당하는 책임을 부여하고, 행위를 추적하는 책임성을 보장하며, 트랜잭션 익명성 및 트랜잭션 비연결성을 보장하는 프라이버시도 보장한다. 다시 말해 MSP는 블록체인 네트워크에 참여하는 피어노드, 오더링 서비스 노드 등 각 노드의 신원 역할 소속 권한을 관리하고 조직 구조를 설계하는 역할을 한다. 또한 블록체인 네트워크에 접속하려는 클라이언트의 신원을 확인하고 접근 권한으 제공한다.
- CA ( Certification Autority)
- MSP에서 암호화 인증을 위해 필요한 인증기관이며, 공개키 인증서 및 이에 대응하는 개인 키를 발급한다. 블록체인 네트워크에 접속하는 사용자에게는 신원등록 인증서를 발급한다. 1.1 버전까지 PKI방식으로 적용한 X.509 인증서 방식을 제공했고. 1.2버전 이후로 아이덴티티 믹서가 추가돼 익명성을 보장하는 암호화 기법으로 신원을 증명하는 방법도 제공하고 있다.
하이퍼레저 패브릭 시스템 플로우

- Application에서 스마트 컨트랙트를 위한 트랜잭션을 시작할 때, 먼저 트랜잭션 제안서를 엔도싱 피어 노드에게 보낸다. 트랜잭션 제안서에는 클라이언트 ID, 트랜잭션을 제출하는 클라이언트의 서명 등이 내용으로 포함돼 있다.
- 제안을 받은 엔도싱 피어노드는 보증 정책에 따라 트랜잭션 제안서가 잘 구성돼 있는지 확인하고 서명이 유효한지 체크한 후, 체인코드를 실행한다. 이후 RW(read&write)세트를 포함하는 트랙잭션 결과를 생성해 반환한다.
- 전체 엔도싱 피어 노드들로부터 반환된 보증 요청의 결과 값들이 동일함을 확인해 해당 트랜잭션의 신뢰성을 확보했으면, 클라이언트 애플케이션은 트랜잭션을 RW세트와 함께 엔도싱 피어 노드들의 서명, 채널 ID를 오더링 서비스 노드에 전송한다. 이미 앞에서 검증이 마무리 됐기 때문에 트랜잭션 수행을 위해 전체 내용을 검사하지 않고 트랜잭션이 들어오는 순서만 정렬한다.
- 오더링 서비스 노드에서 생성된 트랜잭션 블록을 엔도싱 피어노드와 커미팅 피어 노드에게 전달한다. 각피어 노드는 보증 정책이 충족됐는지 확인한 후에 원장 상태가 변경됐는지 확인한다.
- 엔도싱 피어 노드와 커미팅 피어 노드는 RW세트가 현재 월그 스테이트 상태와 여전히 일치하는지 확인해 트랜잭션의 유효성을 검사한다. 트랜잭션이 유효성 검사에 실패하면 피어노드는 RW세트가 현재 월드 스테이트 상태와 일치하지 않는다는 것을 알린다. 블록에 기록된 트랜잭션은 무효로 기록하고, 월드 스테이트를 업데이트하지 않는다.
- 유효성이 검증된 트랜잭션은 모든 피어 노드의 데이터베이스에 기록된다. 이후 트랜잭셔의 성공 또는 실패 이벤트를 클라이언트 애플리케이션에 알린다. 위와 같이 총 6단계를 거쳐 트랜잭션이 하이퍼레저 패브릭 네트워크 안의 전체 원장에 업데이트된다. 트랜잭션은 체인코드의 실행이며, 체인코드는 개발자가 특정 기능을 구현해 채널 안에 피어 노드에 설치된다. 이와 같은 체인 코드를 사용자 체인코드라 하는데, 체인코드는 크게 사용자와 시스템 2가지로 구분할 수 있다. 일반적으로 개발자가 다루는 체인코드가 사용자 체인코드이며, 이와 같은 체인코드가 실제로 동작될 수 있도록 처리 흐름을 제어하는 것이 시스템 체인코드이다. 시스템 체인코드는 개발자가 직접 다루지는 않고 하이퍼레저 패브릭 자체에서 제공하고 있지만, 체인 코드를 제대로 이해하기 위해서는 시스템 체인 코드가 무엇인지 이해해야 한다.
하이퍼레저 패브릭 시스템 체인코드
일반적인 체인코드와 동일한 프로그래밍 모델을 가지고 있지만, 별도의 격리된 컨테이너에서 실행되는 일반적인 코드와 달디 시스템 체인코드는 피어 노드 프로세스에서 실행된다. 따라서 시스템 체인코드는 피어 노드의 자원에 더 많은 접근이 가능하다. 패브릭은 5가지 시스템 체인 코드를 제공한다
- LSCC (Lifecycle System ChainCode) - 라이프사이클을 돤리하는 체인코드
- Install 피어 시스템에서 체인코드를 저장하는 데 사용
- deploy 채널에서 체인코드를 인스턴스화하는 데 사용
- upgrade 체인코드 업그레이드
- getid 채널에 설치된 체인코드 ID를 가져온다
- getdepspec 피어에 설치된 체인코드 배포사양을 가져온다
- getccdata 채널에 설치된 체인코드로 저장된 데이터를 가져온다
- getchaincodes 채널에 배포된 체인코드 목록을 가져온다
- getinstalledchaincode 피어에 설치된 체인코드 목록을 가져온다
- CSCC (Configuration System ChainCode) - 피어 노드 및 프로세스 채널 구성, 트랜잭션에 대한 채널 관련 정보를 관리하기 위해 사용한다.
- joinchain 피어를 채널에 가입시킨다.
- GetConfigBlock 지정된 채널에 대한 구성블록을 가져온다
- GetConfigTree 체인코드 ID에 대해 현재 채널 및 자원 구성을 확인한다
- SimulateConfigTreeUpdate 체인코드 ID에 대해 현재 채널 및 자원구성을 업데이트한다.
- GetChannels 피어가 가입한 채널 목록을 가져온다
- QSCC (Query System ChainCode) - 블록 저장소에 저장된 블록 및 트랜잭션을 조회하기 위해 사용된다
- GetChainInfo 블록체인에 대한 정보르 조회하는데 사용한다
- GetBlockByNumber 채널의 특정 블록을 조회하는 데 사용한다
- GetBlockByHash 블록 해쉬값을 통해서 조회하는 데 사용한다
- GetTransactionByID ID로 트랜잭션 조회하는 데 사용한다
- GetBlockByTxID 트랜잭션 ID로 특정 블록 조회하는 데 사용한다
- ESCC (Endorser System ChainCode) - 트랜잭션을 실행한 후 트랜잭션 상태, 체인코드 이벤트, read/write set등 트랜잭션 결과를 포함한 응답 메세지에 서명을 넣기 위해 엔도싱 피어 노드에 의해 호출된다.
- VSCC (VAlidation System ChainCode) - 커미팅 피어 노드에 의해 호출돼 보증 정책 및 다중 버전 동시성 제어 검사와 같은 트랜잭션 유효성 검사를 처리한다. → 유효성 검사를 진행하여 원장의 차이가 발생하지 않고록 하는 중요한 역할을 수행한다. 따라서 수정이나 교체할 때 특별한 주의가 필요하다
참고 자료
- 하이퍼레저 패브릭 실전 프로젝트 - 조문옥, 이진수 외 2명 (출판_에이콘)
출처
- 원문: https://www.notion.so/245172a556d68058a883f0f4263faead
- Vault path: wiki/notes/architecture/하이퍼레저-개요.md