[Makers Basic 2] 블록체인의 작동원리

장경재
BlockMakers Powered by DAIOS
6 min readSep 19, 2018

본 자료는 해시넷 블로그의 글을 조금 더 이해하기 쉽게 재 가공하였습니다.

블록체인이란?

분산원장 기술이라고 하는 데 이는, 다수의 거래내역을 묶어 하나의 데이터 블록을 구성하고 해시를 이용하여 이러한 블록들을 체인으로 연결한 뒤 다수의 사람들에게 복사하여 분산 저장하는 기술이다.

다수의 사람들에게 복사, 분산 저장하기 때문에 데이터의 위변조가 불가능하여 권위를 가진 중개기관이 없더라도 신뢰할 수 있는 안전한 거래와 데이터 처리가 가능하다.

출처 : SlideShare

작동원리

작동원리를 알아보며 블록체인에 대해서 좀 더 이해해 볼 수 있다.

  1. 블록 구성
  2. 체인 연결
  3. P2P 분산 저장
  4. 블록체인을 만들기 위해 처음 해야 하는 일은 다수의 거래 기록을 묶어 하나의 블록을 구성하는 일이다.

거래의 최소 단위는 트랜잭션(transaction, ‘Tx’)이라고 하며 트랜잭션이란 더 이상 쪼갤 수 없는 업무 처리의 최소 단위를 말한다.

(예를 들어, A라는 사람이 B라는 사람에게 1,000원을 지급하고 B가 그 돈을 받은 경우, 이 거래 기록은 더 이상 작게 쪼갤 수가 없는 하나의 트랜잭션을 구성한다. 만약 A는 돈을 지불했으나 B는 돈을 받지 못했다면 그 거래는 성립되지 않는다. 이처럼 A가 돈을 지불하는 행위와 B가 돈을 받는 행위는 별개로 분리될 수 없으며 하나의 거래 내역으로 처리되어야 하는 단일 거래이다.)

블록체인에서 이러한 거래내역은 해시(hash) 함수를 이용하여 암호화된다. 거래내역을 단순히 텍스트로만 표시한다면 그 길이가 각각 다르지만 해시 함수를 이용하면 이러한 다양한 길이를 가진 데이터를 고정된 데이터로서 변환할 수 있다.

Sha-256 해시함수를 사용할 경우 거래내역의 길이와 상관없이 2진수로 256자리의 고정된 길이를 가진 값으로 변환하게 된다.

이렇게 해시함수를 거친 거래내역들을 여러개 묶어 하나의 블록을 형성한다. 거래내역의 갯수와 상관없이 일정한 시간에 한번씩 블록을 생성한다. (예를 들어 비트코인의 경우에는 10분정도에 한번씩 새로운 블록을 구성한다.)

하나의 블록에는 모든 하위 해시를 다시 해시 함수를 통하여 변환한 값인 루트 해시 값이 하나 존재한다. 루트 해시를 생성하기 위해서는 1개의 거래내역에 해당하는 해시값과 다른 1개의 해시값이 해시 연산을 통하여 새로운 상위 해시를 생성해내는 것이다. 이런 방식이 지속적으로 진행되게 된다. 이 때 해시의 개수가 홀수라면 자기자신과 해시 연산을 수행한다. 이렇게 반복적으로 해시연산 과정을 거치게 되면 트리 구조에 최상위 지점에는 단 하나의 루트 해시만 남게 된다. 이러한 해시 구조를 해시트리 또는 머클트리라고 한다.

해시의 특성상 거래내역중 단 한 부분만 변경 되더라도 모든 해시의 값들이 변경되기 때문에 데이터의 위변조 되었는지 즉시 확인이 가능하다.

이런 과정을 통하여 새로 구성된 블록은 타임스탬프(timestamp) 서버에 의해 생성된 시간이 기록되며, 전체 네트워크에 전파한다. 타임스탬프란 전자문서가 특정한 시점에 존재하고 있었다는 ‘존재증명’과 그 이후 데이터가 위변조 되지 않았다는 ‘내용증명’을 해주는 일종의 전자 도장이다.

2. 하나의 새로운 블록이 구성 되었다면 다음으로 이전에 있었던 블록체인의 맨 끝에 이 새로운 블록을 연결시켜야 한다. 이를 하려면 기존의 있던 블록의 해시값을 찾아내야 한다. 새로운 해시값을 성공적으로 찾아내는 경우 기존 블록체인에 연결된다.

이러한 새로 구성한 블록의 이름에 해당하는 해시를 찾아내는 일은 매우 힘든데 이유는 새로운 블록의 해시는 반드시 프로그램에 의해 미리 정해진 목표값보다 작아야 한다는 조건을 지니고 있기 때문이다.

블록의 해시값은 해당 블록의 생성일시, 버전, 루트해시, 이전 블록의 해시, 그리고 논스라고 하는 임시값 등을 조합한 후 해시로 변환하여 생성한다. 논스 값을 지속적으로 바꿔가면서 새로 생성된 해시값이 목표값보다 더 작을 경우에 새로운 블록이 성공적으로 생성된다.

이렇게 특정한 블록에 대해 목표값 이하의 크기를 가진 해시값은 찾아 새로운 블록을 생성하는 행위를 작업증명(PoW)이라고 한다. 작업증명의 대가로 일정한 개수의 암호화폐를 지급받는 것을 채굴, 마이닝(mining)이라고 한다.

출처 : steemKR

3. P2P 분산 저장

P2P란 peer to peer이란 뜻으로 인터넷을 통해 연결된 다수의 사용자들이 직접 데이터를 주고 받는 것을 말한다. 이러한 P2P방식은 서버-클라이언트 방식과는 다르게 한 동료가 다른 동료(peer)에게 데이터를 직접 전송하는 시스템을 말한다. 기존 시스템은 서버가 중심이고 클라이언트는 종속적이게 되지만 블록체인은 이러한 P2P방식이기에 모두가 평등하다.

블록체인에 저장된 데이터는 네트워크에 연결된 모든 사용자들에게 복사 분산저장되는데 이 때 각 개체들을 노드(node)라고 한다.

그리고 복사 분산저장된 정보는 모두 동일한데 어떤 것이 원본인지 사본인지에 대한 구별은 없다. 네트워크 데이터 전체를 100% 동일하게 복사하여 저장한 노드를 풀 노드(full node)라고 하며 이 데이터의 일부만을 복사하여 저장한 노드를 라이트 노드(light node)라고 한다.

Q. 어떨때 풀 노드와 라이트 노드를 고를 필요가 있을까?

A. 풀노드는 노드내에 모든 원장을 가지고 있다. 라이트 노드는 모든 원장의 Header만을 가지고 있다. 직접블록체인 노드로 참여하려 할 때 너무 많은 용량을 차지하는 것이 싫다면 라이트노드를 선택, 빠른 검색 등을 원한다면 풀노드로 구성할 수 있다.

블록체인 네트워크에서 새로운 거래가 발생할 경우, 그 내역은 네트워크에 연결된 모든 노드들에게 알려진다.

각 노드들은 일정한 시간 동안 이루어진 모든 거래를 하나로 묶어 새로운 블록을 구성, 목표값 이하의 해시값을 찾기 위해 경쟁한다. 가장 먼저 찾은 노드는 경쟁에서 승리하게 되고 이를 전체 네트워크에 다시금 알린다.

이 때 새로 생성된 블록의 유효성을 검사하고 이상이 없을 경우 새로운 블럭 생성을 승인하여, 정식 블록으로서 블록체인에 추가된다. 만약 동시에 서로 다른 거래내역을 가진 블록이 생성될 경우, 네트워크는 1시간 정도 기다리면서 가장 긴 길이를 가진 체인을 선택하여 연결된다. 이 때 선택되지 않은 블록은 고아 블록(orphan block)이 된다.

--

--