블록체인

박도준·2020년 11월 5일
1

블록체인

목록 보기
1/13
post-thumbnail

클라우드를 공부하는데 IBM의 블루믹스, MS의 애저 등 클라우드 서비스에서 블록체인이 적용된 클라우드 서비스를 발표하는 것을 보고 블록체인에 관심을 가지게 되었다.

블록체인이라는 용어는 가상화폐 비트코인이 떠오르면서 처음 접했다. 단지 가상화폐와 관련이 있다는 정도만 알고 자세히 알지 못했지만 이번 포스팅을 통해 블록체인에 대해 공부하고 정리하여 개념을 익히고자 한다.



블록체인이란?

블록체인은 데이터 분산 처리 기술이다.
즉, 네트워크에 참여하는 모든 사용자가 모든 거래 내역 등의 데이터를 분산, 저장하는 기술을 지칭한다.

블록체인이라는 이름이 붙은 이유는 블록들을 체인 형태로 묶은 형태이기 때문이다.

블록체인에서 '블록'은 개인과 개인의 거래(P2P)의 데이터가 기록되는 장부가 된다. 이런 블록들은 형성된 후 시간의 흐름에 따라 순차적으로 연결된 '사슬(체인)'의 구조를 가지게 된다.

모든 사용자가 거래내역을 보유하고 있어 거래 내역을 확인할 때는 모든 사용자가 보유한 장부를 대조하고 확인해야 한다. 때문에 블록체인은 '공공 거래장부' 또는 '분산 거래장부'로도 불리기도 한다.



기존 거래와 블록체인의 차이점

은행을 예로 들어보면, 기존거래 방식(중앙 집중형 원장 관리)은 은행이 모든 거래 내역을 가지고 있다. 만약 A가 B에게 10만원을 송금하면 현재 금융 시스템에서는 은행이 중간 역할을 한다. 왜냐하면 A가 B에게 10만원을 줬다는 사실을 증명해줘야 하기 때문이다. 은행은 두 사람 사이에 안전하게 거래할 수 있도록 중간 다리 역할을 해주는 것이다.

블록체인(분산 원장 관리)도 거래 내역을 저장하고 증명한다. 그러나 거래 내역을 은행이 아닌 여러 명이 나눠서 저장을 한다. 만약 한 네트워크에 10명이 참여하고 있다면 A와 B의 거래 내역을 10개의 블록을 생성해 10명 모두에게 전송, 저장한다. 나중에 거래 내역을 확인할 때는 블록으로 나눠 저장한 데이터들을 연결해 확인한다.



블록체인의 구성 및 메커니즘

먼저 최초의 블록을 Genesis Block 이라고 한다. 추가되는 블록은 헤더(Header)데이터(Data)로 이뤄져 있다.

제네시스 블록에 추가 되는 블록의 헤더에는 제네시스 블록의 해시 포인터를 갖고 있다.
해시 포인터는 이전 블록의 데이터가 어디에 저장되어 있는지와 Data가 변했는지를 검증하기 위한 검증 정보가 담겨져 있다.
(블록체인은 해시 포인터로 연결된 Linked List라고 할 수 있다.)

해시포인터는 이전 블록(=부모 블록)의 해시값을 뜻한다.
해시값은 해시 함수를 이용해서 임의의 데이터로부터 고정된 길이의 난수를 만들어 내는 방법이다. 입력값에서 출력으로 계산은 단순하지만, 역으로 출력 값에서 입력 값을 계산하는 것은 거의 불가능한 매우 어려운 작업이다.


블록에 대해 자세히 살펴보면, 블록의 헤더에는 블록의 버전 정보, 이전 블록 헤더의 해시값과 머클루트 값, 생성된 timestamp 정보, 마이닝시 사용되는 난이도 정보와 Nonce값을 가진다.

  • Block Version : 프로토콜 버전
  • Hash of previous block's header : 이전 블록의 해시값
  • Merkle Root : 머클 트리로 블록에 저장된 거래들의 루트 해시
  • Timestamp : 이 블록이 생성된 시간
  • nBits (Difficulty Target) : 블록에 대한 작업 증명 난이도 목표
  • Nonce : 작업 증명에 사용된 임의의 숫자

여기서 각각의 블록은 헤더에 이전 블록의 해시값만을 저장하고 트랜잭션 데이터에 대한 값을 저장하고 있지 않는다.


만약 트랜잭션 데이터를 악의적으로 변경하면 어떻게 검증할 수 있을까? 이는 머클루트 값을 통해 해결할 수 있다.

머클루트

머클루트머클트리의 루트값을 의미한다.
머클루트는 해시포인터로 이뤄진 이진트리이다. 루트 아래에는 자식 노드들이 달리고 최하위 노드에는 데이터를 가리키고 있는 해시포인터가 달리게 된다. 즉, 머클루트 값을 알면 모든 데이터의 해시 포인터를 알 수 있다.

만약 블록의 데이터를 머클트리로 구성하게 되면 누군가 일부 트랜잭션 데이터를 변경하게 되면 머클루트값 자체가 변하기 때문에 변경을 감지할 수 있게 된다.


포크(fork)

포크(fork)는 갈림길이 갈라지듯이 블록체인이 둘로 나뉘어지는 현상이다. 간단히 말해서 블록체인을 업그레이드 하는 것이다.

이때 포크에는 두가지 종류가 있는데 소프트 포크하드 포크가 있다.

  • 소프트 포크 : 이번 버전의 블록체인과 호관이 가능해 이용하기 위한 별도의 과정이 필요하지 않는 경우의 포크를 뜻한다.
  • 하드 포크 : 새로운 버전의 스마트폰을 구매하는 경우 내장된 메인보드와 CPU, RAM등 모든 부품이 새로운 스마트폰에 맞게 새롭게 적용되어야 하는데 이런 경우의 포크를 뜻한다.

하드 포크는 이전 버전과 호환이 불가능하다. 때문에 하드 포크의 경우 개발자들과 채굴자들의 동의가 필수적이다. 이때 합의하는 과정에 필요한 것이 합의 알고리즘이다.


합의 알고리즘

블록체인의 동작에서 가장 핵심인 합의 알고리즘에 대해 알아본다.

합의 알고리즘은 한 텀마다 컴퓨터가 수행하기 어려운 계산(해시값 찾기)을 수행하게 하고, 일정 결과를 만족시키는 결과값을 도출한 노드가 모든 노드들로부터 인정(합의)을 받는 행위라고 할 수 있다.

합의 알고리즘 종류에는 크게 두가지로 작업증명지분증명이 있다.

  • 작업증명(Proof of Work)은 컴퓨터의 연산력을 바탕으로 합의에 도달하고 그 연산력이 빠를수록 블록에 기록할 수 있는 권한이 더 많이 부여된다는 것이다.
  • 지분증명(Proof of Stake)은 작업이 아닌 더 많은 지분(해당 코인)을 가지고 있을수록 그에 비례하는 블록에 기록할 권한이 더 많이 부여되는 것이다.

이렇게 합의 알고리즘을 통해 합의가 되면 결국 하나의 체인이 남게 된다.
이때, 마지막에 남는 체인은 정격체인(Canonical Chain)이라고 하고, 이 정격체인에 들어있는 거래만이 실제로 일어난 거래라고 인정 받는다.

비트코인 네트워크에서는 결과값을 도출한 노드에게 비트코인으로 보상하게 되고 트랜잭션 데이터 블록을 추가하게 된다. 비트코인 네트워크에서는 이를 채굴이라고 한다.


블록체인의 동작 구조를 간단히 정리하면 아래와 같다.

  1. 블록체인은 해시 알고리즘을 이용하여 일정시간 동안 거래 내역을 블록화해서 연결하는 것이다. 구체적으로 일정시간 동안 모인 거래 내역과 직전 블록에서 전달된 해시값이 포함된 데이터를 대상으로 넌스값을 추가하여 새로운 해시값을 구한다.
  2. 해시 과정은 미리 합의된 특정 조건을 만족하는 해시값이 도출되도록 넌스 값을 계속 조정하면서 계산해보는 것이다. 만약 조건에 맞는 해시값이 도출되었다면 증명 과정이 성공한 것이며, 그때의 해시값과 넌스값 및 해당 거래내역 등을 묶어서 새로운 블록을 생성하고 직전 블록과 연결하면 되는 것이다.
  3. 이때 새로 생성된 블록에는 직전 블록의 해시값도 포함된다. 이러한 방식으로 계속해서 직전 블록의 해시값이 포함됨으로써 블록간의 긴밀한 연결이 이루어지며, 조작이 발생했을 때의 해시값의 검사를 통해 쉽게 파악되는 구조이다.


블록체인의 특징

장점

  1. 분산 저장
    블록체인 데이터는 대개 수천 개의 분산화된 네트워크 노드에 저장되기 때문에 시스템과 데이터는 기술적 실패와 악의적 공격에 대한 강한 저항력을 갖는다.

  2. 중앙 관리자가 필요 없다
    은행이나 정부 등의 중앙기관이나 중앙 관리자가 필요했던 것은 공식적인 증명, 등기, 인증 등이 필요했기 때문이다. 그러나 블록체인은 다수가 데이터를 저장, 증명하기 때문에 중앙관리자가 존재하지 않게 된다.

  3. 안전성
    승인된 블록들은 되돌리기가 무척 어렵고, 이는 데이터가 블록체인에 기록된 다음에는 이를 삭제하거나 변경하기가 무척 어렵다는 것을 뜻한다. 그만큼 중요한 정보들에 대해서는 안전성이 보장된다.


단점

  1. 데이터 수정
    블록체인 시스템은 블록체인에 데이터가 기록되면 이를 수정하기가 무척 어렵다.

  2. 느린 속도
    블록체인은 실제 사용하기엔 매우 느린 처리 속도이다. 때문에 간단한 이체를 하기 위해서는 상당한 시간이 소요된다.

profile
Better late than never

0개의 댓글