Blockchain 용어
Blockchain 기술의 핵심 특징 중 하나는 "no firewall, no trust" 원칙이다. 이는 중앙화된 신뢰 기관 없이도 시스템이 안전하게 작동할 수 있음을 의미한다. 또한 모든 데이터는 네트워크의 모든 참여자에게 복제되어(replication of all data) 분산 원장으로서의 투명성과 내구성을 보장한다.
Consensus Algorithm
분산 시스템에서 참여자들이 공통된 상태에 합의하는 메커니즘이다.
- BFT(Byzantine Fault Tolerance): 비잔틴 장애에도 시스템이 올바르게 작동할 수 있게 하는 알고리즘
- PoW(Proof of Work): 계산 작업을 통해 블록 생성 권한을 얻는 방식으로, Bitcoin이 사용
- PoS(Proof of Stake): 보유한 코인의 양과 기간에 따라 블록 생성 권한을 부여하는 방식
Data Structure
블록체인의 데이터를 구성하는 구조이다.
- Chain: 각 블록이 이전 블록의 해시를 포함하여 연결되는 선형 구조
- DAG(Directed Acyclic Graph): 순환 없는 방향성 그래프로, 여러 병렬 트랜잭션을 허용하는 구조
Account Model
블록체인에서 자산과 상태를 관리하는 방식이다.
- UTXO(Unspent Transaction Output): 사용되지 않은 트랜잭션 출력을 기반으로 하는 모델, Bitcoin이 사용
- Account-based: 계정의 상태와 잔액을 직접 관리하는 모델, Ethereum이 사용
Processing Model
스마트 계약과 트랜잭션을 처리하는 방식이다.
- Bitcoin script: Bitcoin의 단순한 스크립팅 언어
- EVM(Ethereum Virtual Machine): Ethereum의 스마트 계약 실행 환경
- Wasm(WebAssembly): 브라우저에서 실행 가능한 바이너리 형식으로, 일부 새로운 블록체인에서 채택
Consensus Algorithm
Consensus Algorithm은 분산 컴퓨팅과 다중 에이전트 시스템에서의 기본적인 문제이다. 이는 오류가 있는 프로세스들 사이에서 동일한 값에 대한 합의에 도달하기 위한 알고리즘이다.
Byzantine Generals' Problem은 다음과 같은 상황을 설명한다. 3명의 장군이 전령을 통해 통신하는데, 이때 전령이나 장군이 배신자일 수 있다. 이 문제는 충성스러운 장군이 2/3 이상일 때만 해결 가능하며, N ≥ 3f+1 조건이 필요하다. 여기서 f는 오류 노드 수이고, 2f+1은 정직한 노드 수를 의미한다. 오류 유형에는 두 가지가 있는데, 일반 오류는 충돌(응답 없음)이고, 비잔틴 오류는 충돌 또는 오작동(일관되지 않은 응답 반환)이다.
Blockchain Network은 누구나 참여 가능하고, 누구나 블록을 제안할 수 있다. 참여자는 정직하지만 노드 운영에 전문성이 없거나, 해커이거나, 네트워크를 파괴하려는 적일 수 있다. 이는 Byzantine Generals' Problem과 정확히 일치하는 상황이다.
PBFT(Practical Byzantine Fault Tolerance)는 Byzantine Generals' Problem에 대한 실용적 해결책으로, N ≥ 3f+1 조건이 필요하다.
PoW(Proof-of-Work)는 해시 알고리즘의 특성을 활용하며, 20개의 leading zeros를 가진 블록의 해시 값을 찾는다. 엄밀히 말하면, PoW는 consensus algorithm이 아니며, 가장 긴 체인이 canonical chain이 된다. 네트워크 보안은 계산 능력(hashpower) 제공으로 보장되며, 해시 파워가 많을수록 네트워크가 더 안전해진다.
PoW의 장점은 참여 중인 노드 수나 분배된 토큰 수를 알 필요가 없다는 것이다. 단점으로는 높은 에너지 소비, 51% 공격 가능성, 효율성을 위해 특수 하드웨어가 필요하여 노드 운영이 어렵다는 점이 있다.
PoS(Proof-of-Stake)는 충분한 양의 native tokens을 스테이킹해야 하는 validators가 블록을 제안하고 증명할 수 있으며, 행동에 기반한 보상을 받는 시스템이다. PoS 자체는 블록 제안자 선택 방법이나 validators로부터 증명 결과 수집 방법 등 합의 도달 방법을 구체적으로 설명하지 않는다.
PoS의 장점은 장기적으로 native tokens을 고정하고, 참여가 용이하며, 에너지 소비가 낮다는 것이다. 단점으로는 떠나기 쉽고, 자금으로 체인을 쉽게 조작할 수 있다는 점이 있다.
Data Structure
블록체인의 데이터 구조는 트랜잭션을 조직하고 연결하는 방식에 관한 것이다. 여기서 중요한 질문은 "데이터가 조작되지 않았음을 어떻게 보장할 수 있는가?"이다. 이를 위한 두 가지 주요 접근법이 있다:
- Blockchain (블록의 체인)
- DAG (Directed Acyclic Graph, 방향성 비순환 그래프)
이러한 구조에서 데이터 조작을 방지하는 핵심 기술은 해시 함수이다.
위 이미지는 DAG 구조를 보여준다. 각 노드(T1, T2 등)는 트랜잭션을 나타내며, 화살표는 트랜잭션 간의 참조 관계를 나타낸다. 또한 T3와 T4 사이에는 엄격한 순서가 없으며, T5는 다른 어떤 트랜잭션에 의해서도 참조되지 않는 "잊혀진 트랜잭션"이 될 수 있다.
Blockchain과 DAG의 주요 차이점은 다음과 같다:
Blockchain의 특징
- 단순한 구조
- 어떤 트랜잭션이 다른 트랜잭션보다 먼저 처리되었는지 쉽게 구분 가능
DAG의 특징
- 더 복잡한 구조
- 어떤 트랜잭션이 다른 트랜잭션보다 먼저 처리되었는지 구분하기 위한 메커니즘이 필요
- 트랜잭션이 확인되려면 다른 트랜잭션에 의해 참조되어야 함
- 또는 글로벌 동기화 포인트인 "펜스(fence)"가 필요할 수 있음
DAG 기반 블록체인 플랫폼으로는 Hedera, IOST, Sui, Fantom 등이 있다.
DAG 구조는 병렬 처리를 가능하게 하고 확장성을 향상시킬 수 있지만, 트랜잭션의 순서와 유효성을 보장하기 위한 추가적인 메커니즘이 필요하다는 복잡성을 가진다.
Blockchain Account Model
블록체인에서 계정 모델은 잔액을 저장하기 위한 저장소 레이아웃을 정의한다. 블록체인의 데이터는 기본적으로 계정의 잔액 정보(예: Alice가 얼마나 많은 토큰을 가지고 있는지)에 관한 것이다. 두 가지 주요 계정 모델 접근법이 있다:
UTXO (Unspent Transaction Output) 모델

위 그림은 UTXO 모델을 보여준다. UTXO는 사용되지 않은 트랜잭션 출력을 의미한다.
UTXO 모델의 작동 방식:
- 각 트랜잭션은 이전 트랜잭션의 출력을 입력으로 사용한다.
- Transaction 1에서 UTXO1(10 BTC)이 입력으로 사용되어 세 개의 새로운 출력(UTXO2, UTXO3, UTXO4)을 생성한다.
- Transaction 2에서는 UTXO3(6 BTC)와 UTXO4(1 BTC)가 입력으로 사용되어 새로운 출력 UTXO5(7 BTC)를 생성한다.
UTXO 모델에서 중요한 질문:
- 거스름돈을 받고 싶다면 어떻게 할까?
- 예: 10 BTC를 가지고 있고, Alice에게 5 BTC를 보내고 나머지 5 BTC를 내게 돌려받고 싶다면?
- 이 경우 하나의 트랜잭션에서 두 개의 출력(Alice에게 가는 5 BTC와 자신에게 돌아오는 5 BTC)을 생성한다.
- 여러 UTXO를 가지고 있다면 나의 잔액을 어떻게 알 수 있을까?
- 사용자의 잔액은 해당 사용자가 소유한 모든 UTXO의 합으로 계산된다.
- 지갑 소프트웨어가 이 계산을 자동으로 처리한다.
비트코인은 UTXO 모델을 사용하는 대표적인 예이다.
계정 기반(Account-based) 모델

위 그림은 계정 기반 모델을 보여준다.
계정 기반 모델의 작동 방식:
- 각 계정(Alice, Bob, Charlie)은 잔액 정보를 직접 저장한다.
- Transaction 1에서 Alice는 Bob에게 1 ETH를 보내고, Alice의 잔액은 10 ETH에서 9 ETH로 감소하고 Bob의 잔액은 1 ETH에서 2 ETH로 증가한다.
- Transaction 2에서 Bob은 Charlie에게 1 ETH를 보내고, Bob의 잔액은 2 ETH에서 1 ETH로 감소하고 Charlie의 잔액은 100 ETH에서 101 ETH로 증가한다.
계정 기반 모델에서 중요한 질문:
- Alice의 트랜잭션 히스토리를 어떻게 만들 수 있을까?
- 계정 기반 모델에서는 모든 트랜잭션이 특정 계정과 연결되어 있다.
- Alice의 모든 발신 및 수신 트랜잭션을 추적하여 트랜잭션 히스토리를 만들 수 있다.
이더리움은 계정 기반 모델을 사용하는 대표적인 예이다.
두 모델은 각각 장단점이 있으며, 블록체인 플랫폼의 목적과 요구 사항에 따라 선택된다. UTXO 모델은 프라이버시와 병렬 처리에 장점이 있고, 계정 기반 모델은 스마트 계약과 개발 용이성에 장점이 있다.
Blockchain Programming Model
블록체인의 프로그래밍 모델은 스마트 컨트랙트를 작성하고 실행하는 방식을 정의한다.
Bitcoin Script
위 그림은 Bitcoin Script의 구조를 보여준다. Bitcoin Script는 간단한 스택 기반 프로그래밍 언어로, 두 부분으로 구성된다:
- Input Script: 사용자가 encumbrance(제약 조건)를 해결하기 위해 제공하는 부분. 일반적으로 <sig> <PubK> 형태로, 서명과 공개 키를 포함한다.
- Output Script: 트랜잭션 출력에서 찾을 수 있으며, 출력을 사용하기 위해 충족해야 하는 encumbrance를 정의한다. 일반적인 형태는 DUP HASH160 <PubKHash> EQUALVERIFY CHECKSIG이다.
위 그림은 Bitcoin Script의 실행 예시를 보여준다. 이는 스택 기반 언어로, 각 명령어가 스택에 있는 값을 조작한다:
- 3 ADD 5 EQUAL 스크립트의 실행 과정
- 상수 값 '3'이 스택 상단에 추가됨
- ADD 연산자가 스택의 상위 두 항목을 꺼내고 더한 후 결과(5)를 스택 상단에 추가
- 상수 값 '5'가 스택 상단에 추가됨
- EQUAL 연산자가 스택의 상위 두 항목을 비교하여 결과(TRUE)를 반환
Bitcoin Script는 의도적으로 튜링 완전하지 않게 설계되어, 복잡한 스마트 컨트랙트보다는 간단한 거래 조건을 표현하는 데 중점을 둔다.
Smart Contract Languages for Ethereum
Ethereum은 다양한 스마트 컨트랙트 언어를 지원한다:
- Solidity:
- Ethereum의 가장 인기 있는 언어
- 객체 지향적, 고수준 언어
- C++에 영향을 받은 중괄호 언어
- 정적 타입 언어(변수 타입이 컴파일 시간에 결정됨)
- 상속, 라이브러리, 복잡한 사용자 정의 타입 지원
- Vyper:
- Python 스타일의 프로그래밍 언어
- 강력한 타입 시스템
- 작고 이해하기 쉬운 컴파일러 코드
- 효율적인 바이트코드 생성
- Solidity보다 적은 기능을 제공하여 컨트랙트를 더 안전하고 감사하기 쉽게 만드는 것을 목표로 함
- 수정자, 상속, 인라인 어셈블리, 함수 오버로딩, 연산자 오버로딩, 재귀 호출, 무한 길이 루프, 이진 고정 소수점 등을 지원하지 않음
- Yul:
- Ethereum을 위한 중간 언어
- EVM과 Ethereum 맞춤형 WebAssembly인 Ewasm을 지원
- 두 플랫폼의 공통 분모로 설계됨
- 고수준 최적화 단계의 좋은 대상
- Yul+:
- Yul의 저수준, 고효율 확장
- 초기에 optimistic rollup 컨트랙트를 위해 설계됨
- Yul에 새로운 기능을 추가하는 실험적 업그레이드 제안으로 볼 수 있음
- Fe:
- Ethereum Virtual Machine(EVM)을 위한 정적 타입 언어
- Python과 Rust에서 영감을 받음
- Ethereum 생태계에 새로운 개발자도 쉽게 배울 수 있도록 설계됨
- 2021년 1월에 알파 릴리스된 초기 개발 단계의 언어
이러한 언어들은 EVM(Ethereum Virtual Machine)에서 실행되는 바이트코드로 컴파일된다. Ethereum의 컴파일러 시스템은 이러한 고수준 언어를 EVM 바이트코드로 변환한다. 최근에는 Wasm(Web Assembly)도 Ethereum 생태계에 도입되어, 더 넓은 범위의 언어와 도구를 사용할 수 있게 되었다.
Components for Blockchain Applications
블록체인 기술이 발전하면서 분산 애플리케이션(DApp) 개발을 위한 다양한 구성 요소들이 등장했다. 이러한 구성 요소들은 기존의 Web2 환경과는 다른 특성을 가지며, Web3라고 불리는 새로운 인터넷 패러다임을 형성하고 있다. 위 이미지는 이러한 Web3 환경의 주요 구성 요소들을 시각적으로 보여주고 있다.
Web2와 Web3의 구성 요소 비교
Web2 애플리케이션은 주로 프론트엔드와 백엔드라는 두 가지 주요 구성 요소로 이루어져 있다. 프론트엔드는 사용자 인터페이스를 담당하고, 백엔드는 서버 측 로직과 데이터베이스 관리를 담당한다. 그러나 Web3 환경에서는 이러한 기본 구성 요소 외에도 스마트 컨트랙트, 지갑, 엔드포인트 노드, 인덱서, 오라클과 같은 추가적인 구성 요소가 필요하다.
프론트엔드
Web3 환경의 프론트엔드 개발은 기본적으로 HTML5, CSS, JavaScript, React, Angular, Vue, Next.js, Flutter 등 기존 Web2 기술을 활용한다. 하지만 블록체인과의 상호작용을 위해 몇 가지 중요한 차이점이 있다.
첫째, 사용자 인증을 위해 MetaMask와 같은 암호화폐 지갑과의 연동이 필요하다. 이는 사용자가 자신의 블록체인 자산에 접근하고 트랜잭션을 승인할 수 있도록 하는 핵심 기능이다.
둘째, Web3.js 또는 ethers.js와 같은 Web3 SDK를 통합해야 한다. 이러한 라이브러리는 프론트엔드 애플리케이션이 블록체인과 상호작용할 수 있도록 API를 제공한다.
셋째, 블록체인 노드에 대한 RPC(Remote Procedure Call) 요청을 통해 블록체인 데이터를 읽거나 트랜잭션을 제출한다. 이는 기존 Web2 애플리케이션의 API 호출과 유사하지만, 블록체인의 분산 특성으로 인해 더 복잡하고 시간이 많이 소요될 수 있다.
마지막으로, 블록체인 인덱싱된 데이터를 활용하여 사용자 경험을 향상시킨다. 블록체인 자체 데이터는 쿼리하기 어려울 수 있으므로, 인덱싱된 데이터를 통해 더 효율적인 데이터 접근이 가능하다.
백엔드
Web3 환경에서의 백엔드는 기존 Web2 백엔드와 유사한 기능을 수행하지만, 블록체인 데이터와의 상호작용이 추가된다. API와 데이터베이스 스키마를 설계할 때는 블록체인 데이터와의 효율적인 상호작용 방식을 고려해야 한다.
특히 중요한 것은 블록체인의 상태 변화를 모니터링하는 기능이다. 블록체인에서 발생하는 이벤트나 상태 변화를 실시간으로 감지하고, 이를 자체 데이터베이스에 반영함으로써 사용자에게 더 빠른 응답 시간과 향상된 검색 기능을 제공할 수 있다.
스마트 컨트랙트
스마트 컨트랙트는 블록체인 네트워크에 배포되는 프로그램으로, Web3 애플리케이션의 핵심 비즈니스 로직을 담당한다. 이 프로그램은 트랜잭션 제출을 통해서만 실행되며, 실행 결과는 블록체인에 영구적으로 기록된다.
스마트 컨트랙트의 가장 중요한 특징은 투명성과 불변성이다. 모든 사람이 스마트 컨트랙트의 코드와 실행 결과를 볼 수 있으며, 한 번 블록체인에 기록된 변경사항은 롤백이 불가능하다. 이러한 특성은 신뢰가 필요한 금융 거래, 소유권 등록, 투표 시스템 등에 적합하다.
제공된 이미지에서는 비즈니스 로직 스마트 컨트랙트가 블록체인 네트워크의 일부로 표시되어 있으며, 이는 애플리케이션의 핵심 기능이 분산된 블록체인 환경에서 실행됨을 나타낸다.
오라클
오라클은 블록체인의 중요한 제약 중 하나인 외부 데이터 접근 문제를 해결하는 구성 요소이다. 블록체인은 기본적으로 자체 네트워크 내의 데이터만 접근할 수 있기 때문에, 외부 세계의 데이터를 블록체인으로 가져오기 위해서는 오라클이 필요하다.
가장 일반적인 오라클 데이터 유형으로는 암호화폐 가격 정보와 같은 가격 피드가 있다. 이는 DeFi(분산 금융) 애플리케이션에서 특히 중요하다. 또한, 복권이나 도박과 같은 게임에서 공정성을 보장하기 위한 검증 가능한 랜덤 함수(VRF)도 오라클을 통해 제공된다.
이미지에서 오라클은 점선으로 표시된 별도의 구성 요소로 표시되어 있으며, 오라클 스마트 컨트랙트를 통해 블록체인 네트워크와 상호작용한다.
지갑
지갑은 Web3 산업에서 가장 중요한 구성 요소 중 하나로, 사용자의 암호화폐 자산과 개인 키를 관리하고 트랜잭션에 서명하는 역할을 한다. 지갑 없이는 블록체인과의 안전한 상호작용이 불가능하다.
지갑은 크게 두 가지 유형으로 나눌 수 있다. 첫째, 커스토디얼(Custodial) 지갑은 서비스 제공업체가 사용자의 개인 키를 관리하는 방식이다. 이러한 지갑은 사용자 경험이 좋고 키 분실 시 복구가 가능하지만, 서비스 제공업체가 사용자의 자금을 제어할 수 있다는 단점이 있다. 또한, 규제 대상이 되기 쉽다.
둘째, 논-커스토디얼(Non-custodial) 지갑은 사용자가 직접 개인 키를 관리하는 방식이다. 이 경우 사용자는 자신의 자금에 대한 완전한 통제권을 가지지만, 개인 키를 분실하면 자금을 영원히 잃을 수 있는 위험이 있다.
이미지에서 지갑은 사용자와 블록체인 네트워크 사이의 중요한 인터페이스로 표시되어 있으며, 카카오와 같은 서비스를 통해 접근할 수 있다.
엔드포인트 노드
엔드포인트 노드는 블록체인 네트워크의 풀 노드로, 애플리케이션이 블록체인 데이터를 읽고 쓰는 진입점 역할을 한다. 이 노드는 블록체인의 전체 데이터를 저장하고 새로운 트랜잭션을 검증하며, 다른 노드와 동기화를 유지한다.
엔드포인트 노드는 각 서비스에서 직접 운영하거나, Ankr, POKT Network, All That Node, QuickNode와 같은 전문 서비스 제공업체를 통해 이용할 수 있다. 자체 노드를 운영하면 더 많은 제어권을 가질 수 있지만, 인프라 관리의 부담이 크기 때문에 많은 DApp 개발자들은 외부 서비스를 활용한다.
이미지에서는 여러 엔드포인트 노드가 블록체인 네트워크와 연결되어 있는 것을 볼 수 있다.
인덱서
인덱서는 블록체인 데이터를 효율적으로 검색하고 분석할 수 있도록 구조화하는 중요한 구성 요소이다. 블록체인 노드 자체만으로는 복잡한 쿼리나 특정 계정의 트랜잭션 기록, 컨트랙트 이벤트 등을 효율적으로 검색하기 어렵다.
인덱서는 블록체인 데이터를 지속적으로 모니터링하고, 이를 특정 형태로 가공하여 데이터베이스에 저장한다. 이를 통해 애플리케이션은 훨씬 더 빠르고 복잡한 쿼리를 실행할 수 있다.
KAS, Etherscan API, Moralis, Alchemy, Covalent, Tatum, The Graph 등은 인덱싱 서비스를 제공하는 대표적인 플랫폼이다. 특히 The Graph는 블록체인 데이터를 위한 분산형 쿼리 프로토콜로, GraphQL을 통한 효율적인 데이터 접근을 지원한다.
이미지에서 인덱서는 데이터베이스를 갖춘 특별한 엔드포인트 노드로 표시되어 있다.
3-14 (2) 37분 ?
'학교공부 > 블록체인' 카테고리의 다른 글
[블록체인] History of Blockchain (0) | 2025.03.14 |
---|