
Keywords: Enterprise Blockchain, Hyperledger Fabric, Raft Consensus, Chaincode Lifecycle, Gateway SDK
1. Hyperledger 란?
기존 퍼블릭 블록체인(비트코인, 이더리움)의 확률적 합의(PoW, PoS) 모델은 포크(Fork) 발생 가능성으로 인해 기업 간 계약 및 결제 시스템에 적용하기에는 불확실성이 큰 반면, 프라이빗 블록체인 Hyperledger Fabric은 허가된 노드간의 합의를 통해 포크 없는 즉각적인 완결성을 보장합니다.
Fabric은 실행-순서화-검증(Execute-Order-Validate라)는 병렬 처리 아키텍처를 채택함으로써 병목 현상을 해결하고 처리량(Throughput)을 확보합니다.
– Execute (실행): 클라이언트가 보낸 트랜잭션을 피어(Peer)들이 시뮬레이션하고 보증(Endorsement)하는 단계
– Order (순서화): 오더러(Orderer)가 여러 트랜잭션을 모아 순서를 정하고 블록을 만드는 단계
– Validate (검증): 만들어진 블록을 모든 피어가 다시 한번 검증하고 최종적으로 원장에 기록하는 단계
2. 아키텍처 및 로직
2.1 Execute-Order-Validate 모델
Fabric의 트랜잭션 처리 방식은 다음과 같습니다. 모든 노드가 합의 후 실행하는 기존 방식(Order-Execute)과 달리, 실행(Execute) 후 순서화(Order), 그리고 검증(Validate)하는 단계를 거칩니다.
클라이언트가 트랜잭션을 제출하면 보증 피어(Endorse)들이 이를 시뮬레이션하고 서명합니다. 이후 오더러(Orderer)가 트랜잭션을 모아 블록을 생성하고, 각 피어(Peer) 에게 전달하여 검증을 수행합니다. 이 구조 덕분에 병렬 처리가 가능해져 엔터프라이즈급 성능을 확보할 수 있습니다.
오더러(Orderer)는 트랜잭션의 내용이 올바른지 여부는 검사하지 않습니다.
트랜잭션의 순서를 정하고, 블록을 생성해 네트워크에 배포하는 역할만 수행합니다.
트랜잭션의 유효성 검증은 피어(Peer) 가 담당합니다.
2.2 Kafka 제거와 Raft 합의 알고리즘
1.x 버전대에서 사용되던 Kafka/Zookeeper 기반의 Ordering Service는 운영하는데 난이도가 매우 높아 2.x 버전부터는 Raft(Etcd 기반) 알고리즘이 변경되었습니다.
Raft는 CFT(Crash Fault Tolerance)를 지원하는 합의 알고리즘입니다. 동작 원리의 핵심은 리더(Leader)와 팔로워(Follower) 모델입니다.
- Leader Election: 클러스터 내에서 하나의 리더 노드를 선출하여 모든 트랜잭션 요청을 독점적으로 받습니다.
- Log Replication: 리더는 받은 트랜잭션을 팔로워 노드들에게 전파하고, 과반수(Quorum) 이상의 노드가 데이터를 저장했다고 응답하면 해당 트랜잭션을 확정(Commit)합니다.
3. 네트워크 구축 및 배포
Ubuntu 환경에서 Test Network를 구동하고, 체인코드를 배포하여 트랜잭션을 처리하는 상세 과정입니다.
Step 1. 환경 구성 및 바이너리 설치
Fabric 컴포넌트(Peer, Orderer, CA)는 Docker 컨테이너로 구동됩니다. 최신 버전의 Git, cURL, Docker, Go 언어 환경을 구성합니다.

sudo apt update sudo apt install -y git curl jq docker.io docker-compose-v2 golang-go
Docker 설치 후에는 현재 사용자가 sudo 없이 Docker 명령어를 사용할 수 있도록 권한 그룹에 추가해야 합니다. 이 단계를 건너뛰면 스크립트 실행 중 권한 오류가 발생할 수 있습니다.
![]()
# 현재 사용자를 docker 그룹에 추가 sudo usermod -aG docker $USER # 로그아웃 없이 그룹 권한 바로 적용 newgrp docker
공식 설치 스크립트(install-fabric.sh)를 통해 Fabric 바이너리와 Docker 이미지를 다운로드합니다.

# 폴더 생성 & 이동 mkdir -p ~/hyperledger-test cd ~/hyperledger-test # 설치 스크립트 실행 curl -sSLO https://raw.githubusercontent.com/hyperledger/fabric/main/scripts/install-fabric.sh && chmod +x install-fabric.sh ./install-fabric.sh docker samples binary
Step 2. 네트워크 구동 및 채널 생성
network.sh 스크립트는 컨테이너 오케스트레이션을 자동화해 줍니다. 아래 명령어로 노드를 구동(up)하고 기본 채널(createChannel)을 생성합니다.

# 테스트 네트워크 폴더로 이동 cd fabric-samples/test-network # 혹시 켜져있는거 있으면 끄기 (초기화) ./network.sh down # 1. 네트워크 켜기 + 채널(mychannel) 생성 ./network.sh up createChannel -c mychannel # 2. 체인코드(basic) 배포 (Go 언어 버전) ./network.sh deployCC -ccn basic -ccp ../asset-transfer-basic/chaincode-go -ccl go
Step 3. 체인코드 배포 (Lifecycle)
Fabric 2.x의 핵심인 Chaincode Lifecycle을 수행합니다. deployCC 명령을 통해 [패키징 → 설치 → 승인(Approve) → 커밋(Commit)]의 4단계 합의 과정이 자동으로 진행됩니다.

./network.sh deployCC -ccn basic -ccp ../asset-transfer-basic/chaincode-go -ccl go
체인코드(Chaincode)의 구조
체인코드는 원장(Ledger)을 제어하는 로직입니다.
방금전 배포한 asset-transfer-basic은 World State(Key-Value DB)를 조작합니다.
// Go Lang 체인코드 예시: PutState로 원장에 기록
func (s *SmartContract) CreateAsset(ctx contractapi.TransactionContextInterface, id string, val string) error {
asset := Asset{ID: id, Value: val}
assetJSON, _ := json.Marshal(asset)
return ctx.GetStub().PutState(id, assetJSON)
}
Step 4. 트랜잭션 실행 (Invoke & Query)
Peer CLI를 사용하기 위해 환경 변수(MSP ID, 인증서 경로, 주소)를 설정합니다. 이 작업이 선행되어야 CLI가 올바른 피어를 타겟팅할 수 있습니다.

# 1. Org1 관리자 권한으로 환경변수 설정
export PATH=${PWD}/../bin:$PATH
export FABRIC_CFG_PATH=$PWD/../config/
export CORE_PEER_TLS_ENABLED=true
export CORE_PEER_LOCALMSPID="Org1MSP"
export CORE_PEER_TLS_ROOTCERT_FILE=${PWD}/organizations/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt
export CORE_PEER_MSPCONFIGPATH=${PWD}/organizations/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp
export CORE_PEER_ADDRESS=localhost:7051
# 2. 앵커 피어 업데이트 스크립트 실행 (내부적으로 configtxlator가 동작함)
./scripts/setAnchorPeer.sh Org1MSP mychannel
1. 자산 생성 (Invoke)
peer chaincode invoke 명령으로 트랜잭션을 발생시킵니다. status:200 응답은 피어의 보증과 오더러의 합의가 정상적으로 완료되었음을 의미합니다.
장부에 “smile” 내용 삽입 (Create)
ID: smile, 색깔: Green, 주인: Me

peer chaincode invoke -o localhost:7050 --ordererTLSHostnameOverride orderer.example.com --tls --cafile "${PWD}/organizations/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem" -C mychannel -n basic -c '{"function":"CreateAsset","Args":["smile", "Green", "10", "Me", "500"]}'
2. 자산 조회 (Query)
peer chaincode query 명령으로 원장 데이터를 조회합니다. 합의 과정 없이 로컬 상태 DB를 읽어오므로 결과가 즉시 반환됩니다.

peer chaincode query -C mychannel -n basic -c '{"function":"ReadAsset","Args":["smile"]}'
4. 마무리
기본적인 인프라 구축과 체인코드 연동까지를 다루었습니다.
실제 운영 단계에서는 CouchDB 활용, Rich Query 최적화, Kubernetes 기반의 오케스트레이션 환경 구성을 추가적으로 고려해야 합니다.
추후 게시글에는 퍼블릭 블록체인(Public Blockchain) 이더리움(Ethereum)을 활용한 스테이블 코인 발행, NFT에 구축 대해 다뤄보겠습니다.
간단 용어정리
- Peer: 블록체인 네트워크의 워커 노드 (실제 DB 및 체인코드 컨테이너 호스팅)
- Orderer: 트랜잭션 순서를 확정하고 블록을 생성하는 노드 (Raft 클러스터)
- Channel: 데이터 격리를 위한 논리적 서브넷 (파티션 개념)
- Chaincode: 원장 상태를 제어하는 비즈니스 로직 (Smart Contract / Serverless Function)
- MSP (Membership Service Provider): PKI 기반의 신원 인증 및 접근 제어 시스템
다른 글 읽기
LangChain · FAISS · CrewAI로 만든 문서 기반 AI 챗봇 구축기
https://idchowto.com/pdf-ai-chatbot-langchain/



