Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

블록체인이란 무엇인가?

한 문장 요약: 블록체인은 “모든 참여자가 동일한 장부를 갖는 분산 데이터베이스“다.

Node.js 백엔드 개발자로서 여러분은 PostgreSQL, MongoDB, Redis 같은 데이터베이스를 다뤄봤을 것이다. 데이터베이스는 데이터를 저장하고 조회하는 시스템이다. 그렇다면 블록체인은 왜 등장했을까? 기존 데이터베이스로 충분하지 않았을까?

이 챕터에서는 블록체인이 탄생한 배경과 핵심 개념을 Node.js 개발자의 관점에서 설명한다.

먼저 잡는 네 단어

블록체인 설명은 보통 익숙하지 않은 단어가 연쇄적으로 나옵니다. 본문으로 들어가기 전에 네 단어를 먼저 고정하세요.

단어백엔드 비유
트랜잭션(Transaction)체인 상태를 바꾸기 위해 제출하는 서명된 요청인증된 POST 요청
블록(Block)여러 트랜잭션을 묶은 기록 단위append-only 변경 로그 배치
체인(Chain)이전 블록 해시로 연결된 블록 목록삭제/수정이 막힌 이벤트 로그
노드(Node)트랜잭션과 블록을 검증하고 전파하는 프로그램DB 복제본과 API 서버 역할을 함께 하는 참여자

이 네 단어의 관계는 다음과 같습니다.

사용자가 트랜잭션을 만든다
        ↓
노드들이 트랜잭션을 검증하고 전파한다
        ↓
검증자/채굴자가 여러 트랜잭션을 블록으로 묶는다
        ↓
새 블록이 이전 블록 뒤에 붙어 체인이 길어진다

이 구조를 기억하면 뒤에서 나오는 해시, 합의, 가스, 스마트 컨트랙트도 “체인에 안전하게 기록하기 위한 장치”로 연결해서 이해할 수 있습니다.


1. 문제의 출발점: 이중 지불(Double Spending)

인터넷 상에서 돈을 보내는 것을 생각해보자. 내가 1만 원짜리 디지털 파일을 Alice에게 보냈다면, 그 파일을 복사해서 Bob에게도 보낼 수 있다. 디지털 데이터는 복사가 자유롭기 때문이다.

현실 세계에서 이 문제를 해결하는 방법은 은행이라는 신뢰할 수 있는 중개자를 두는 것이다.

Alice의 계좌 잔액: 10,000원
    │
    ├─ 은행이 Alice의 잔액 확인
    ├─ Alice → Bob 5,000원 이체 기록
    ├─ Alice의 잔액을 5,000원으로 업데이트
    └─ Bob의 잔액을 5,000원 증가

은행은 중앙 원장(Central Ledger)을 관리하며, 모든 거래를 기록하고 이중 지불을 방지한다. 그런데 문제가 있다:

  • 은행이 해킹당하면? → 모든 데이터가 조작될 수 있다
  • 은행이 파산하면? → 돈을 잃을 수 있다
  • 은행이 거래를 거부하면? → 막을 방법이 없다
  • 은행이 거래 내역을 조작하면? → 알 수가 없다

2008년 금융 위기 당시, 중앙화된 금융 시스템의 한계가 드러났다. 바로 그 해, **사토시 나카모토(Satoshi Nakamoto)**라는 정체불명의 인물이 비트코인 백서를 발표했다.

“A purely peer-to-peer version of electronic cash would allow online payments to be sent directly from one party to another without going through a financial institution.” — 비트코인 백서, 2008


2. 해결책: 분산된 장부

블록체인의 핵심 아이디어는 단순하다. 중앙 기관 없이 거래를 검증하고 기록하는 것이다.

전통적인 시스템:
┌──────────┐     ┌──────────┐     ┌──────────┐
│  Alice   │────▶│  은행    │────▶│   Bob    │
└──────────┘     │(중앙 DB) │     └──────────┘
                 └──────────┘

블록체인 시스템:
┌──────────┐     ┌──────────┐     ┌──────────┐
│  Node 1  │────▶│  Node 2  │────▶│  Node 3  │
│ (장부 사본)│◀───│ (장부 사본)│◀───│ (장부 사본)│
└──────────┘     └──────────┘     └──────────┘
      │                │                │
      └────────────────┴────────────────┘
           모두가 동일한 장부를 보유

네트워크에 참여하는 모든 노드(컴퓨터)가 전체 거래 내역의 사본을 갖는다. 누군가 데이터를 조작하려면 네트워크의 과반수 이상을 동시에 공격해야 한다. 이것이 사실상 불가능하게 만드는 것이 블록체인의 핵심이다.


3. 블록체인의 핵심 속성

3.1 불변성 (Immutability)

한번 블록에 기록된 데이터는 수정이 사실상 불가능하다. 왜냐하면:

  • 각 블록은 이전 블록의 해시값을 포함한다
  • 특정 블록을 수정하면 그 블록의 해시값이 바뀐다
  • 해시값이 바뀌면 이후 모든 블록이 무효화된다
  • 네트워크의 모든 노드가 이 변조를 감지한다
[블록 #1] ──해시 포함──▶ [블록 #2] ──해시 포함──▶ [블록 #3]
    │                        │                        │
    │  블록 #1 수정 시도       │                        │
    ▼                        │                        │
[블록 #1']                   │                        │
 (해시 변경됨)                │                        │
    │                        │                        │
    └──▶ 블록 #2와 연결 끊김! ──▶ 블록 #3도 무효!

3.2 투명성 (Transparency)

퍼블릭 블록체인(비트코인, 이더리움)에서는 모든 거래 내역이 공개된다. 누구나 블록 익스플로러(예: etherscan.io)에서 모든 트랜잭션을 조회할 수 있다.

  • 개인정보는 보호된다 (주소는 공개되지만, 그 주소의 실제 소유자는 모름)
  • 거래 자체는 투명하게 공개된다
  • 감사(Audit)가 용이하다

3.3 탈중앙화 (Decentralization)

단일 실패 지점(Single Point of Failure)이 없다:

중앙화 시스템:
    ┌───────────┐
    │   서버    │◀── 서버 다운 = 서비스 전체 중단
    └───────────┘

분산 시스템:
   ●───●───●
   │   │   │
   ●───●───●
   │   │   │
   ●───●───●
   
   일부 노드가 다운되어도 네트워크는 계속 동작

4. 전통 DB vs 블록체인: 개발자 관점 비교

Node.js 개발자에게 친숙한 PostgreSQL과 블록체인을 직접 비교해보자.

항목PostgreSQL블록체인
데이터 저장중앙 서버의 단일 DB수천 개 노드에 분산 복제
쓰기 속도매우 빠름 (ms 단위)느림 (초~분 단위)
읽기 속도매우 빠름빠름 (로컬 노드 조회 시)
데이터 수정UPDATE/DELETE 자유사실상 불가능
접근 제어Role 기반 (DBA가 관리)암호학 기반 (개인 키)
합의 과정필요 없음 (단일 권위)필수 (과반수 동의)
신뢰 모델DB 관리자 신뢰코드(알고리즘) 신뢰
장애 허용레플리케이션으로 일부 해결노드 상당수 장애에도 동작
비용서버 비용트랜잭션 수수료 (Gas)
감사로그 (관리자 조작 가능)완전 공개 (조작 불가)
사용 사례대부분의 앱신뢰가 필요한 분산 시스템

언제 블록체인이 필요한가?

블록체인이 적합한 경우:

  • 여러 기관이 데이터를 공유해야 하는데, 서로 신뢰하지 못할 때
  • 데이터의 불변성과 감사 추적이 핵심일 때
  • 중개자 없이 가치를 이전해야 할 때
  • 자동으로 실행되는 계약(스마트 컨트랙트)이 필요할 때

블록체인이 불필요한 경우:

  • 단일 조직이 관리하는 일반 앱
  • 빠른 읽기/쓰기가 필요한 서비스
  • 데이터 수정이 자주 필요한 서비스

5. Node.js 개발자를 위한 비유

여러분이 여러 회사가 함께 사용하는 공유 시스템을 만든다고 상상해보자.

일반적인 접근 (중앙화):
- 회사 A가 서버를 운영
- 회사 B, C, D는 회사 A의 API를 통해 데이터 접근
- 회사 A가 데이터를 마음대로 수정할 수 있음
- 회사 A 서버가 다운되면 모두가 피해

블록체인 접근 (탈중앙화):
- 모든 회사가 동일한 DB 사본을 보유
- 새 데이터를 추가하려면 과반수의 동의 필요
- 어느 회사도 단독으로 데이터를 수정할 수 없음
- 일부 서버가 다운되어도 나머지로 운영 가능

더 구체적으로, Node.js 코드로 비유하면:

// 전통적인 데이터베이스 (중앙화)
class CentralDatabase {
  constructor() {
    this.data = []; // 단일 서버에만 존재
  }
  
  async write(record) {
    // 관리자가 마음대로 수정 가능
    this.data.push(record);
  }
  
  async delete(id) {
    // 기록 삭제도 가능
    this.data = this.data.filter(r => r.id !== id);
  }
}

// 블록체인의 개념 (탈중앙화)
class Blockchain {
  constructor() {
    this.chain = []; // 모든 노드가 동일한 사본 보유
  }
  
  async addBlock(data) {
    // 새 블록 추가는 네트워크 합의 필요
    const newBlock = {
      index: this.chain.length,
      data: data,
      previousHash: this.getLastBlock().hash,
      hash: this.calculateHash(data),
      timestamp: Date.now()
    };
    
    // 합의 과정을 통해서만 추가 가능
    if (await this.getNetworkConsensus(newBlock)) {
      this.chain.push(newBlock);
    }
  }
  
  // DELETE는 없다! 수정도 없다!
  // 오직 새 블록 추가만 가능
}

6. 블록체인의 종류

6.1 퍼블릭 블록체인 (Public Blockchain)

  • 누구나 참여 가능
  • 완전히 탈중앙화
  • 예: 비트코인, 이더리움
  • 특징: 느리지만 가장 안전하고 투명

6.2 프라이빗 블록체인 (Private Blockchain)

  • 허가된 참여자만 접근
  • 중앙 기관이 존재
  • 예: Hyperledger Fabric
  • 특징: 빠르지만 탈중앙화 정도가 낮음

6.3 컨소시엄 블록체인 (Consortium Blockchain)

  • 특정 그룹(예: 여러 은행)이 공동 운영
  • 반탈중앙화
  • 예: R3 Corda, Besu 기반 기업 네트워크
  • 특징: 프라이빗과 퍼블릭의 중간
탈중앙화 정도:
낮음 ◀─────────────────────────▶ 높음
프라이빗    컨소시엄    퍼블릭
  │            │          │
Hyperledger  Besu/IBFT  이더리움/비트코인

7. 블록체인 기술 스택 전체 그림

이 가이드에서 우리가 배울 내용을 미리 살펴보자:

┌─────────────────────────────────────────┐
│              애플리케이션 레이어           │
│  (DApp, Web3 프론트엔드, Node.js 백엔드)  │
├─────────────────────────────────────────┤
│              스마트 컨트랙트 레이어        │
│         (Solidity, ERC-20, ERC-721)      │
├─────────────────────────────────────────┤
│              이더리움 프로토콜 레이어      │
│    (EVM, Gas, 트랜잭션, 계정 모델)        │
├─────────────────────────────────────────┤
│              합의 레이어                  │
│         (PoW, PoS, IBFT 2.0)            │
├─────────────────────────────────────────┤
│              네트워크/P2P 레이어          │
│           (노드 통신, 블록 전파)           │
├─────────────────────────────────────────┤
│              암호학 기초                  │
│    (해시, 공개키/비밀키, 디지털 서명)      │
└─────────────────────────────────────────┘

8. 핵심 정리

  • 블록체인 = 분산 불변 장부: 모든 참여자가 동일한 데이터를 갖고, 아무도 단독으로 수정할 수 없다
  • 탄생 배경: 신뢰할 수 있는 중개자 없이 이중 지불을 방지하기 위해
  • 핵심 속성: 불변성, 투명성, 탈중앙화
  • 적합한 사용 사례: 서로 신뢰하지 못하는 여러 당사자가 데이터를 공유해야 할 때
  • PostgreSQL과의 차이: 중앙 권위자가 없고, 데이터 삭제/수정이 불가능하며, 합의 과정이 필요

다음 챕터에서는 블록체인의 기반이 되는 암호학 — 해시 함수, 머클 트리, 공개키 암호화 — 을 Rust 코드와 함께 깊이 파고들 것이다.