지금까지는 금융권이 왜 블록체인 기술에 관심 있고 금융권을 위한 블록체인에는 어떠한 요구사항이 있는지, 현재 프라이빗 블록체인 진영은 어떤 식으로 발전하고 있는지에 대해서 살펴봤습니다.

금융권을 위한 블록체인 관련글 보러가기

  1. 왜 금융권에서는 블록체인에 주목할까?
  2. 퍼블릭 블록체인의 한계와 프라이빗 블록체인 -1
  3. 퍼블릭 블록체인의 한계와 프라이빗 블록체인 -2
  4. Hyperledger Fabric, R3 Corda
  5. theloop loopchain

지금까지의 포스팅에서는 금융권 블록체인에 대한 요구사항과 현 상황에 대해 알아보았습니다.

이번 글부터는 블록체인 상에서의 거래, 합의, 스마트 컨트랙트 등 주요 요소에 대해 기술적으로 살펴보려고 합니다. 우선 블록체인이 어떻게 동작하는지 거래 예제를 통해 설명하도록 하겠습니다.

블록체인 네트워크 구성원

대표적인 블록체인 네트워크인 비트코인을 포함하여 일반적인 블록체인 네트워크 구성요소는 두 가지입니다. 바로 블록체인 노드와 블록체인 클라이언트입니다.

  • 노드 : 트랜잭션 내역 보관, 트랜잭션 승인, 분산합의
  • 클라이언트 : 트랜잭션 생성, 거래 내역 확인 (비트코인의 경우 지갑)

사용자 관점에서는 블록체인의 노드는 일반적인 서비스의 백엔드(Backend) 역할을 하고 블록체인 클라이언트는 클라이언트 역할을 합니다. 클라이언트가 새로운 트랜잭션을 발생시키면 노드들은 트랜잭션을 분산합의 과정을 통해 공유하고 트랜잭션을 실행하죠. 클라이언트는 트랜잭션의 결과를 확인할 수 있습니다.

블록체인 노드는 두 가지 종류의 데이터베이스를 가지고 있습니다. 올바른 트랜잭션을 모두 보관하는 블록체인 트랜잭션 보관 데이터베이스와 저장된 트랜잭션을 어플리케이션에 적용한 어플리케이션 데이터베이스를 가지고 있습니다.

스크린샷 2017-03-13 오후 3.30.51.png
블록체인 자료구조(트랜잭션 내역 DB)

노드가 가지고 있는 두 가지 DB 중 트랜잭션 목록을 보관하는 DB는 블록체인(Block-chain)이라는 특이한 구조로 되어 있습니다. 이 DB의 특이한 구조가 이제는 전체를 대표하는 명칭이 되었죠. 트랜잭션 내역 DB는 블록체인이라는 이름처럼 블록이 연결된 구조로 되어 있습니다. 각 블록은 순서가 정해진 트랜잭션 리스트가 있고 각 블록들은 시간의 순서대로 연결되어 있죠(순서가 기재되어 있습니다). 블록체인 자료구조를 이용하면 모든 트랜잭션의 순서를 확정 지을 수 있습니다.

암호화 화폐 거래 예제 

블록체인 네트워크에 참여하는 객체에 이어 실제 블록체인 기반 암호화 화폐(Cryptocurrency) 송금 예제를 통해 실제로 어떻게 동작하는지 알아봅시다.

잠깐 이야기를 돌려서 실물화폐의 경우 실제 전달하는 방법은 매우 간단합니다. 자신이 가지고 있는 화폐를 실제 전달받는 사람에게 전하면 되죠. 하지만 디지털 거래의 경우 실제 화폐를 주고받을 수 없으므로 다른 방식으로 거래를 합니다. 거래 내용에 맞게 장부를 갱신하는 것이죠.

A와 B가 OO 은행을 이용한다고 가정했을 때 A가 B에게 10만 원을 송금하면 OO 은행에 있는 장부에서 A가 B에게 10만 원을 보냈다는 기록과 함께 A의 잔액이 10만 원이 감소하고 B의 잔액이 10만 원이 증가합니다. 즉, 거래 내용과 잔액의 상태, 두 가지 정보가 있고 거래 내역이 검증되면 잔액의 상태가 변경됩니다. 암호화 화폐 거래 방식도 이와 같은 방식입니다.

블록체인이 Peer-to-Peer 네트워크라고 해서 다른 사람에게 직접 돈을 보낸다고 생각할 수 있지만, 노드들의 네트워크 위상(Topology)이 전부 같은 Peer-to-Peer 네트워크인 것이지 실제 돈이 오가는 것은 노드들이 보관하는 데이터베이스를 갱신하는 방식으로 동작합니다. 은행에서 일어나는 거래 방식과 유사하죠.  은행의 경우 거래 데이터를 유지하는 은행이 거래에 대한 보증 주체라면 블록체인 네트워크의 경우 블록체인에 참여하는 모든 노드가 전부 같은 장부를 유지한다는 것이 다르고 나머지 과정은 유사합니다.

스크린샷 2017-03-13 오후 2.43.49
디지털 화폐 거래 순서도

위의 그림은 암호화 화폐 송금 시 일어나는 일에 대해서 그린 다이어그램입니다. A가 B에게 돈을 보내기 위해 트랜잭션을 생성하여 블록체인 네트워크에 전파하면 블록을 생성하는 노드는 트랜잭션을 모아 블록에 저장합니다. 이때 A의 잔액이 충분한지, 중복 으로 사용하지 않는지 등 거래에 대한 검증은 별도로 이루어지며 이러한 검증 방법은 거래에 따라 달라지게 됩니다.

이후 해당 트랜잭션들을 적용해 자신의 잔액 DB를 갱신하고 다른 노드들에 블록을 전파합니다. 다른 노드들은 전파된 블록 데이터에 따라 자신의 잔액 DB를 갱신하고 블록을 저장합니다. 이제 모든 노드의 잔액 DB와 트랜잭션 내역 DB가 갱신되었습니다. 장부가 갱신되었다는 것은 송금이 완료되었다는 것입니다. 거래가 완료되었습니다.

앞선 과정 중 블록 생성 노드를 정하는 과정이나 동시에 블록이 생성되었을 때 올바른 블록을 선택하는 과정은 분산합의 알고리즘에 따라 달라집니다. (Proof of Work와 같은 경쟁 형태의 분산합의 알고리즘의 경우 여러 개의 블록 생성 노드가 정해질 수 있습니다) 다음에 분산합의 관련 포스팅을 통해 이 과정에 대해 자세히 설명하겠습니다.

이번 포스팅에서는 블록체인 기술 개요로 블록체인 네트워크에 참여하는 객체들에 대한 설명과 암호화 화폐 예제를 통해 실제로 어떻게 돌아가는지 알아보았습니다. 다음에는 블록체인을 단순한 화폐 시스템이 아니라 다양한 서비스에 적용할 수 있게 확장한 스마트 컨트랙트에 대해 알아보도록 하겠습니다.