블록체인 기초

Aiden
15 min readJan 22, 2022

--

이 포스팅은 ‘블록체인 인 액션’ (비나 라마머시 저, 정우현 옮김)의 내용을 다루고 있다.

필자는 블록체인을 완전 처음부터 공부하는 것이라, 필자의 블록체인 시리즈 포스팅은 블록체인에 관심이 있는 개발자라면 모두 이해할 수 있을 것이라 생각한다.

이번 포스팅은 1장 ‘블록체인 기초’를 다룰 것이다. 주요 내용은 아래와 같다.

  1. 블록체인 이해하기
  2. 탈중앙화 시스템 인프라 알아보기
  3. 분산 장부 기술 탐구하기
  4. 신뢰 창출(trust-enabling) 프로토콜 분석하기
  5. 실전 시나리오에서 블록체인 애플리케이션 사용 동기

블록체인 기술은 40년 이상의 강력한 과학적인 연구를 기반으로 한다.

  • 암호학
  • 합의
  • P2P 네트워크
  • 해싱
  • 인터넷
  • 머클 트리 — 머클트리(Merkle Tree)는 블록에 포함된 거래 내역을 나무 형태로 요약한 것이다. 1979년 머클트리를 개발한 랄프 머클(Ralph Merkle)의 이름을 따서 머클트리라고 부르며 해시트리(Hash Tree), 혹은 이진트리(Binary Tree)라고도 한다. 출처 — http://wiki.hash.kr/index.php/%EB%A8%B8%ED%81%B4%ED%8A%B8%EB%A6%AC

비트 코인에서 블록체인으로

초기에 블록체인에 열광한 이유는 은행과 같은 중개자 없이 인간이 만든 경계(예: 국경)를 넘어 전 세계 누구에게나 디지털 통화를 P2P로 전송할 수 있다는 점이었다(비트코인이 시발점). 이런 열풍은 비 암호 화폐 유형의 트랜잭션에 대해서도 P2P 기능을 적용할 수 있다는 사실이 알려지면서 더욱 고조되었다. 트랜잭션은 소유권, 증서, 음악, 예술, 비밀 코드, 회사들 간의 계약, 자율 운행 결정 등의 수많은 결과물을 포함한다.

트랜잭션 : 어떤 오퍼레이션을 실행할지, 그 오퍼레이션을 실행하기 위한 데이터, 그리고 메세지 송신인, 수신인, 트랜잭션 수수료, 저장할 때의 타임스탬프 등을 포함하는 P2P 메세지로서 블록체인에 기록된다.

이더리움은 검증, 인증 그리고 저장 능력이 다른 디지털 자산과 연관된 트랜잭션과 시스템으로 확장할 수 있다는 점에서 혁신을 이루었다.

블록체인이란 무엇인가

블록체인은 피어 참여자들 간의 트랜잭션으로 이루어진 탈중앙화 시스템에 신뢰를 구축해주는 기술이다. 블록체인의 목적은 참여자들이 올린 트랜잭션을 확인하고 검증(검증에 실패했을 때는 거부)해 주고, 그 트랜잭션을 실행해 주며, 각 참여자의 동의하에 이러한 행위들의 증거를 기록해 주는 것이다.

블록체인 프로그래밍은 기존 시스템을 전부 대체한다기보다는 확인과 검증을 하는 신뢰 중개 코드를 바탕으로 기존 시스템을 개선하는 것이다.

비트코인과 이더리움을 위한 블록체인 스택에 대해 알아보자

비트코인 스택지갑 애플리케이션
블록체인 : 비트코인 프로토콜
오퍼레이팅 시스템과 네트워크 : 프로토콜 레벨 프로그래밍
컴퓨터 시스템 하드웨어 : 예) 리눅스와 TCP/IP
이더리움 스택탈중앙화 블록체인 애플리케이션
스마트 컨트랙트와 가상머신 샌드박스
블록체인 : 이더리움 프로토콜
오퍼레이팅 시스템과 네트워크 : 프로토콜 레벨 프로그래밍
컴퓨터 시스템 하드웨어 : 예) 리눅스와 TCP/IP

비트코인은 오직 지갑 애플리케이션만을 가지고 있지만, 이더리움은 스마트 컨트랙트(smart contract)라는 프로그래밍이 가능한 코드 기능을 제공한다.

결국 이더리움 기준으로, 블록체인의 세 가지 레벨의 프로그래밍이 필요함을 알 수 있다.

  1. 프로토콜 레벨 프로그래밍 : 이 레벨은 블록체인 자체의 배포와 오퍼레이션을 위해 필요한 소프트웨어와 관련된 것이다. 만일 시스템 프로그래머이거나 운영자라면 이 레벨에서 프로그래밍을 한다. 이 책은 프로토콜 프로그래밍은 다루지 않는다.
  2. 스마트 컨트랙트 레벨 프로그래밍 : 이 레벨은 확인과 검증을 위한 규칙을 설계하고 프로그래밍하며, 해당 블록체인에 기록할 데이터와 메시지를 규정하는 스마트 컨트랙트(또는 룰 엔진) 프로그래밍에 대한 것이다. 스마트 컨트랙트는 사용자 애플리케이션을 대신해 블록체인을 가동해 줄 엔진이다.
  3. 애플리케이션 레벨 프로그래밍 : 이 레벨은 블록체인 프로토콜 외부에 있는 웹(또는 엔터프라이즈, 모바일) 애플리케이션 프레임워크와 유저 인터페이스 설계 콘셉트들을 사용해 프로그래밍하는 것이다.

Dapp은 스마트 컨트랙트라는 중요한 코드 요소를 내장하고 있다. 배포 트랜잭션을 통해 모든 스마트 컨트랙트의 똑같은 복사본을 블록체인 네트워크에 참여하는 노드들에게 배포한다.

Dapp은 신뢰 중개를 구현한 불록체인 함수들을 구동시키는 애플리케이션 로직을 가진 웹 또는 엔터프라이즈 애플리케이션이다.

스마트 컨트랙트(smart contract)는 Dapp의 로직을 표현해주는 변조 불가능하고 실행 가능한 코드다. 스마트 컨트랙트에서 정의한 데이터 변수와 함수들은 블록체인에서 확인, 검증, 저장을 가능케 하는 Dapp의 규칙을 강제하기 위한 상태와 오퍼레이션을 집합적으로 표현한다.

블록체인 프로그래밍

블록체인 프로그래밍을 차별화하는 네 가지의 근본적인 개념을 소개한다.

  1. 블록체인 인프라(decentralized infrastructure) — 블록체인 프로토콜, 스마트 컨트랙트, 애플리케이션을 지원하는 특정한 컴퓨팅 하드웨어와 소프트웨어 스택, 이러한 인프라의 주 구성요소는 컴퓨팅 노드와 이들 노드를 연결하는 네트워크다.
  2. 분산 장부 기술(distributed ledger technology )— 인프라 위에 장부가 있는데, 모든 참여자의 장부에 트랜잭션과 데이터를 동시에 기록한다. 장부는 모든 참여자가 동일한 사실을 저장하고 있기 때문에 분산되어 있다고 할 수 있다. 각 블록은 이전 블록의 서명과 연결되어 변조 방지가 되므로 변조 불가능(immutable)하다.
  3. 탈중개 프로토콜(disintermediation protocol) — 탈중앙화 시스템의 참여자들은 상호 간의 연결하고 통신하고 거래하기 위해 동일한 블록체인 프로토콜을 사용한다. 프로토콜은 모두가 따라야 할 규칙의 집합이다. 예를 들어, 이더리움과 하이퍼레저는 서로 다른 두 개의 블록체인 프로토콜이다.
  4. 신뢰 확립자(trust enabler) — 탈중앙화 참여자 시스템은 중앙화된 정부 기관이나 은행과 같은 중개자들이 없다. 그러므로 중개자 없이도 거버넌스(governance) 검사, 준수(compliance) 등에 대한 규칙을 구현하여 거의 자동으로 처리하는 인프라가 필요하다. 블록체인 소프트웨어는 신뢰 확립자의 역할을 맡는다.

블록체인 인프라

블록체인 인프라는 도시를 연결하는 철로나 도로처럼 내재적으로 탈중앙화가 이루어져 있다. Dapp을 배포한다는 것은 마치 철로나 도로 위에 기차나 자동차를 배치하는 것과 비슷하다.

탈중앙화 시스템은 분산 시스템의 일종으로, 하단과 같은 일이 일어난다.

  • 참여자들은 P2P로 소통한다.
  • 참여자들은 디지털이든 아니든 자신의 자산(예를 들어 오디오 파일, 디지털 건강 기록, 또는 토지)을 통제한다.
  • 참여자들은 자신의 의사에 따라 참여하거나 떠날 수 있다.
  • 참여자들은 통상의 신뢰 경계(예를 들어, 대학이나 나라)를 넘어서서 행위를 한다.
  • 결정은 중앙화 기관이 아니라 분산된 참여자들이 내린다.
  • 블록체인과 같은 자동화된 소프트웨어가 상호 간 중개(intermediation)를 담당한다.

위와 같은 조건을 충족시켜주는 블록체인의 아키텍쳐적인 요소들을 살펴보자.

블록체인 노드, 네트워크, 그리고 애플리케이션

블록체인 노드는 트랙잭션의 엔드포인트로서 작동에 필요한 컴퓨팅 환경을 호스팅하고, 트랜잭션을 릴레이하며, 브로드캐스팅하는 기능을 수행한다.

노드(node)는 탈 중앙화 시스템의 참여자를 위한 블록체인 소프트웨어와 그것이 설치된 장비 또는 하드웨어를 집합적으로 부르는 말이다.

하단은 단일 블록체인 노드의 논리적인 아키텍처를 보여준다.

탈중앙화 애플리케이션 : 웹 또는 엔터프라이즈 애플리케이션
가상머신 샌드박스 상의 애플리케이션 로직(참여자 어카운트가 추가되어있음) : 애플리케이션 로직을 실행하는 환경을 구현한다.
블록체인 프로토콜 구현 : 이 레이어가 트랜잭션과 블록 합의 같은 블록체인의 기능을 구현한다.
네트워크와 오퍼레이팅 시스템
컴퓨터 시스템 하드웨어 : 위 네트워크와 오퍼레이팅 시스템과 컴퓨터 시스템 하드웨어는 웹 서버가 가지고 있는 것과 동일하다.

어카운트(account)는 트랜잭션을 수행하는 주체의 고유한 아이덴티티를 나타낸다. 트랜잭션을 시작하기 위해서는 어카운트가 필요하다.

하나의 노드는 탈중앙화 네트워크에서 피어 참여자들의 아이덴티티를 나타내는 다수의 어카운트를 지원할 수 있다. 256비트 주소가 각 어카운트를 나타낸다.

이 책은 컴퓨터 시스템 하드웨어, 네트워크와 오퍼레이팅 시스템, 블록체인 프로토콜 구현의 레이어는 다루지 않는다. 애플리케이션 로직 레이어에서 데이터 액세스 컨트롤, 확인, 검증, 그리고 저장을 위한 함수 코딩과 같은 문제들을 해결한다. 가장 상위 레벨은 사용자를 마주하는 인터페이스인데, 여기서 HTML 자바스크립트, 그리고 관련된 프레임워크와 같은 웹(또는 엔터프라이즈) 프로그래밍이 이루어진다. 이러한 요소들은 Dapp과 유저 인터페이스(UI)레이어를 구성한다.

블록체인 애플리케이션은 일반적으로 많은 수의 참여자를 노드 네트워크를 통해 연결한다. 각 노드는 이를 이용하는 서로 다른 사용자들을 식별할 수 있는 다수의 어카운트를 지원한다. 하나의 노드는 다수의 Dapp을 호스팅할 수 있다.

네트워크 식별자를 가지고 블록체인 노드 네트워크를 식별한다. 예를 들어, 네트워크 ID #1은 메인 이더리 퍼블릭 네트워크이고, 네트워크 ID #4는 링키비라고 불리우는 퍼블릭 테스트 네트워라는 식이다. 스마트 컨트랙트를 네트워크에 배포할 때 네트워크의 식별자를 사용해서 어느 네트워크를 사용하는 것인지를 표시해 주어야만 한다. 주어진 단일한 네트워크를 이용하는 참여자들은 트랜잭션 내용을 저장하기 위해 단일한 분산 장부를 공유한다.

스마트 컨트랙트는 블록체인 노드가 호스팅하는 가상머신(VM)과 같은 샌드박스 환경에서 실행된다. 스마트 컨트랙트의 구문은 객체지향 언어의 클래스와 유사하다. 이것은 데이터, 함수, 함수를 실행하기 위한 규칙들을 담고 있다. 스마트 컨트랙트 함수를 호출하거나 실행하면, 블록체인에 기록할 트랜잭션을 생성한다. 만일 함수 호출이 확인과 검증 규칙에 위배되면, 이 함수 호출은 취소된다. 그러나 함수 수행이 성공적이면, 생성된 트랜잭션은 저장을 위해 네트워크에 브로드캐스팅 된다.

분산 장부 기술(Distributed Ledger Technology, DLT)

이번 섹션은 하단과 같은 내용을 설명한다.

  • 블록체인 DLT를 구성하는 요소
  • 트랜잭션을 저장하는 블록을 위한 DLT의 물리적 구조
  • 애플리케이션이 어떻게 의도한 목적, 즉 신뢰 구축을 위한 확인, 검증 및 변조 불가능한 저장을 위해 DLT를 사용하는지에 대한 상세한 작동 과정 설명
  • DLT의 무결성을 위한 합의 알고리즘(고수준에서)

트랜잭션, 블록, 그리고 블록의 체인

애플리케이션은 트랜잭션과 스마트 컨트랙트 코드 실행을 시작한다. 예를 들어, 애플리케이션에서 어카운트 간에 단순한 암호 화폐 송금을 하면 ‘send’라는 트랜잭션을 생성한다. 블록체인 네트워크를 통해 이 트랜잭션을 브로드캐스팅할 후, 변조 불가능한 분산 장부에 기록한다.

트랜잭션을 어떻게 생성하고 네트워크에 전파하는지 살펴보았으니, 이제 이것을 어떻게 블록체인에 저장하는지에 대해 알아보자. 트랜잭션의 집합이 블록을 만들고, 블록의 집합이 블록체인을 만든다. 그 과정은 하단과 같다.

  1. 수집한 네트워크의 트랜잭션들은 검증 단계를 거쳐 풀로 모인다. 노드는 블록을 만들기 위해 풀에서 트랜잭션들을 골라서 세트를 만든다. 트랜잭션들을 고르는 기준은 일반적으로 트랜잭션에 책정된 수수료다. 수수료가 비싼 트랜잭션부터 선택 받는다.
  2. 참여 노드들은 합의 알고리즘을 사용해 기존 체인에 추가될 트랜잭션들을 포함하는 하나의 블록에 대해 집합적으로 동의, 즉 합의를 한다.
  3. 체인의 현재 리드 블록을 나타내는 값, 즉 해시를 새롭게 추가될 블록에 더해서 체인 링크(chain link)를 만든다.

블록체인은 추가만 허용하는(append-only) 분산된 변조 불가 장부다. 제네시스 블록(genesis block)이라 불리는 첫 번째 블록에서 블록체인을 생성한다. 블록체인에 참여하는 모든 노드는 제네시스 노드로부터 시작해서 모두 동일한 블록체인 복사본을 가진다. 블록체인 DLT의 특징은 다음과 같다.

  • 분산되어 있다. 블록체인 프로토콜은 분산된 각각의 참여 노드들이 동일한 블록의 체인 복사본을 가지고 있다는 것을 보장해 주기 때문이다.
  • 변조가 불가능하다. 새로 생성되는 모든 블록은 현재 블록체인 헤드의 해시값을 통해 기존 블록체인에 링크되어 있기 때문이다.

일단, 기억해 두어야 할 점은 변조 불가능성을 보장하기 위해 블록 n을 나타내는 서명 값이 블록 n+1에 저장되어 있다는 것이다. 노드의 데이터에 조금만 변화가 와도, 그것이 의도적이건 아니었던 간에 해당 블록의 해시값은 바뀌고, 결국 그 노드의 체인은 유효하지 않게 된다. 블록체인의 블록은 참여 노드들의 로컬 파일 시스템에 저장된다. 각 노드에 있는 블록들의 체인은 해당 블록에 있는 트랜잭션들과 그와 관련된 데이터를 저장하고 있는 분산 장부다.

2020년을 기준으로 비트코인 블록 생성(또는 채굴) 주기, 즉 트랜잭션 컨펌 주기는 약 10분이다. 이더리움에서는 블록 컨펌이 약 10초에서 19초 안에 일어난다. 반면에 신용카드에서는 트랜잭션 컨펌이 1초 안에 이루어 진다. 아직은 신용카드보다 느리지만, 블록체인 프로토콜 레벨을 다루고 있는 개발자 커뮤니티는 여러 합의(consensus) 알고리즘과 네트워크 레벨에서 릴레이하는 테크닉들을 사용하여 트랜잭션 컨펌 타임을 줄이기 위해 노력하고 있다.

탈중개 프로토콜

프로토콜 또는 규칙의 집합이 블록체인의 구조와 오퍼레이션을 관할한다.

  • 블록체인의 구조(트랜잭션, 블록, 그리고 블록의 체인)
  • 암호화, 해싱, 그리고 상태 관리를 위한 기반 알고리즘과 표준
  • 블록의 합의와 일관성 있는 체인을 구현하기 위한 방법
  • 불일치하는 장부를 초래할 수 있는 예외들을 처리하는 테크닉
  • 이러한 맥락에서 일관성, 정확성, 변조 불가능성을 유지하기 위한 블록체인의 코드와 규칙들의 실행 환경

블록체인의 구조와 오퍼레이션은 임의적인 것이 아니라 프로토콜에 따른다. 프로토콜 구현은 블록체인 애플리케이션을 만들 베이스 레이어를 확립하는 것이다.

이더리움 블록체인 프로토콜이 도입한 코드 실행을 위한 프레임워크는 탈중앙화 영역에서 완전히 새로운 기회의 장을 열어 주었다. 스마트 컨트랙트는 이더리움 프로토콜의 구심점이자 이더리움이 기여한 핵심이기도 하다.

현재 많은 블록체인이 난립하고, 각자 다른 프로토콜을 사용하고 있지만, 결국 몇개의 체인으로 통합될 것이다.

신뢰 확립자

탈중앙화 시스템에서는 신분을 확인하는 사람도 없고, 신원을 검증하는 은행도 없다. 따라서 다른 메커니즘, 즉 소프트웨어 매커니즘이 필요하다. 블록체인은 인터넷에 신뢰 레이어를 만들어 신뢰 중개를 함으로써 이러한 필요를 충족시킨다. 탈중앙화(decentralized) 인프라, 분산(distributed) 장부 기술, 탈중개(disintermediation) 프로토콜, 이 세 가지의 3D가 집합적으로 시스템에 신뢰를 구축한다.

탈중앙화 시스템에서 신뢰 중개(trust intermediation)는 블록체인 인프라, 분산 장부 기술, 그리고 탈 중개 프로토콜에 의해 이루어진다.

과학자들이 연구를 서로 공유하기 위해 탄생시킨 인터넷은 집합적으로 컴퓨팅 머신들 간의 연결과 상호 네트워킹을 가능하게 했다. 하이퍼텍스트 트랜스퍼 프로토콜(HTTP)은 웹을 위한 기반 기술로 도입한 것이다. 1991년경에 표준이 된 HTTP는 웹 애플리케이션을 통해 많은 상업적 활동이 가능하도록 만들었다.

이 당시의 보안은 표준의 일부분이 아니었음에 주목하자. 증가한 디지털화, 온라인 활동의 활성화는 온라인 사기와 해킹의 증가를 동반했다. 그러나 보니 점차 보안은 웹 애플리케이션을 위한 매우 중요한 영역으로 떠올랐고, 2000년경 하나의 표준(HTTPS)으로서 HTTP를 개선하기에 이른다. 이것은 보다 보안성있는 웹 애플리케이션을 실현해 주었다. 글로벌 표준도 IETF(Internet Engineering Task Force)의 공식적인 RFC(Request for Comments) 표준문서로 확립되었다. 2009년에 도입된 블록체인은 인터넷의 보안 레이어와 더불어 신뢰 레이어로 자리 잡았다. 현재 중앙화 시스템들로 구현한 신뢰는 특별한 수단들에 의존하거나 공항이나 식료품점에서 체크아웃하는 경우처럼 사람이 개입해야한다. 반면에 블록체인은 Dapp을 위한 신뢰 레이어를 제공해 주는데, 이는 트랜잭션과 사실들의 소프트웨어 기반 확인, 검증, 변조 불가능한 저장을 통해 이루어진다.

되돌아 보기

컴퓨터 시스템은 하단과 같이 탈중앙화 시스템을 향해 진화해 왔다.

전자 기계 시스템 
->
중앙화 시스템(1960~) : 메인프레임 시스템이 모든 테이터와 컴퓨팅 파워를 가지고 있다.
->
개인 컴퓨팅 시스템(1975~) : 개인용 컴퓨터(PC)는 랩톱과 손바닥 크기의 컴퓨팅 디바이스로 진화했다.
->
중양화와 분산 시스템(1980년대 이후. 현재 우리가 여기에 있음) : 분산 자율화 네트워크로 연결한 프로세서. 중앙화 시스템의 재탄생. 아마존, 구글은 막대한 양의 데이터와 디지털 자산을 집적하여 은행과 같은 거대한 중개자로 부상하고 있다.
->
탈중앙화 시스템(2000+) : P2P. 디지털 자산은 피어와 P2P 트랜잭션에 의해 보유. 블록체인을 통해 여기에 당도할 것임. 블록체인 신뢰에 기반한 혁신적인 지구적 수준의 시스템 모델

이번장에서는 블록체인을 사용하는 이유, 구조적 컴포넌트, 세부적인 작동 내용, 블록체인이 가능하게 할 시스템의 신뢰와 정합성 등을 통해 블록체인을 작동하는 법을 배웠다. 또한 블록체인이 3D(탈중앙화, 탈중개, 분산)를 지원하는 수단이라는 것도 알아보았다.

마무리

다음 포스팅에서는 스마트 컨트랙트에 대해 다룰 것이며, 실제로 솔리디티라는 언어와 리믹스라는 IDE를 사용해서 코딩을 해볼 것이다.

--

--

Aiden

안드로이드 개발자(개인 공부용도의 블로그)