아하
검색 이미지
생활꿀팁 이미지
생활꿀팁생활
생활꿀팁 이미지
생활꿀팁생활
참신한두더지271
참신한두더지27119.04.02

블럭체인에서 블럭은 어떻게 생성되는건지 궁금합니다.

안녕하세요?

궁금한게 있어서 여쭤봅니다.

블럭체인은 블럭으로 이루어져 있다고 하는데요, 이때 블럭은 어떻게 만들어지는 건가요??

POS,POW 이런 방식이 있다고 하던데요, 이게 무엇인지 고수님들의 설명 부탁드리겠습니다.

55글자 더 채워주세요.
답변의 개수
1개의 답변이 있어요!
  • 작동 원리

    블록체인이 작동하기 위해서는 다수의 거래내역을 묶어 블록을 구성하고, 이 블록을 기존 블록체인의 끝에 연결하며, 다수의 컴퓨터에 P2P 방식으로 분산 저장해야 한다.

    블록 구성

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

    인터넷 등 온라인에서 거래가 발생한 경우, 각각의 트랜잭션별로 하나의 거래내역을 구성한다. 이 거래내역은 해시(hash) 함수를 사용하여 암호화된다. 해시 함수란 다양한 길이를 가진 데이터를 고정된 길이를 가진 데이터로 매핑하는 알고리즘이다. 각각의 거래내역을 텍스트로 표시할 경우 그 길이가 각각 다를 수 있지만, 이것을 해시 함수로 변환하면 항상 일정한 길이의 해시값이 나온다. 예를 들어, SHA-256 해시 함수를 사용할 경우, 거래내역이 아무리 짧거나 혹은 길어도 해시값은 항상 2진수로 256자리(즉, 16진수로 64자리)의 고정된 길이를 가진 값으로 표시된다. 이러한 해시 연산 과정을 거쳐 하나의 트랜잭션이 하나의 해시값이 대응하는 1:1 구조를 이루게 된다. 예를 들어 아래의 거래내역을 SHA-256 해시 함수를 사용하여 변환한 해시값은 다음과 같다.

    블록체인에서는 다수의 거래내역을 묶어 하나의 블록을 구성한다. 거래내역이 많든 적든 상관없이 항상 일정한 시간에 한 번씩 새로운 블록을 구성한다. 블록체인 기술을 적용한 대표적인 암호화폐인 비트코인의 경우 약 10분에 한 번씩 새로운 블록을 구성한다. 하나의 블록에는 하나의 루트해시가 존재한다. 루트해시란 모든 하위 해시들을 다시 해시 함수로 변환한 최종 해시값이다. 루트해시를 생성하기 위해 우선 각 거래내역에 1:1로 대응하는 해시값을 생성하고, 두 개의 해시를 합쳐 하나의 상위 해시를 생성하고, 그 상위 해시 2개를 합쳐 다시 더 상위의 해시를 생성한다. 만약 해시의 개수가 홀수이면 맨 마지막 하나의 해시는 자기 자신과 해시 연산을 수행한다. 이 과정을 계속 반복하면, 최종적으로 트리의 최상위 지점에 하나의 루트해시가 생성된다. 이러한 해시값의 구조를 해시트리 또는 머클트리라고 한다. 하나의 블록에는 반드시 하나의 루트해시가 존재한다. 만약 거래내역 중 하나라도 위변조할 경우 해당 해시값과 그 상위의 모든 해시값이 변경되어 결과적으로 루트해시가 달라지게 된다. 따라서 블록의 루트해시만 비교해 보면 그 하위에 있는 해시를 일일이 비교 검사하지 않더라도 데이터가 위변조되었는지 즉시 확인할 수 있다.
    새로 구성된 블록은 타임스탬프 서버에 의해 생성된 시간이 기록되며, 전체 네트워크에 전파된다. 타임스탬프(timestamp)는 전자문서가 특정한 시점에 존재하고 있었다는 '존재 증명'과 그 이후 데이터가 변경되지 않았다는 '내용 증명'을 해주는 일종의 전자 도장이다.

    체인 연결

    하나의 새로운 블록을 구성한 경우, 마치 체인처럼 이전부터 이어져 내려오던 블록체인의 맨 끝에 이 새로운 블록을 연결시켜야 한다. 새로운 블록을 기존 블록체인의 끝에 연결시키려면, 해당 블록의 이름에 해당하는 해시값을 찾아내야 한다. 새로운 해시값을 성공적으로 찾아내는 경우 새로운 블록이 생성되어 기존 블록체인에 연결된다.

    새로 구성한 블록의 이름에 해당하는 해시를 찾아내는 일은 수없이 많은 시도를 반복해야 하는 매우 힘든 과정이다. 왜냐하면 새로운 블록의 해시는 반드시 프로그램에 의해 미리 정해진 목표값보다 작아야 한다는 조건을 충족해야 하기 때문이다. 예를 들어, 목표 해시값이 00ff32라고 가정하고, 새로 만든 블록의 해시값이 12fa3b라고 하면, 이 값이 목표값보다 더 크기 때문에 블록 생성에 실패하게 된다. 하지만 새로 찾아낸 해시값이 00c3b1이라고 가정하면, 이 값은 목표값보다 더 작기 때문에 새로운 블록의 생성에 성공하게 된다. 다음은 2018년 5월 1일에 실제로 생성된 비트코인 520,654번째 블록의 해시값으로서, 숫자 앞부분에 영(0)이 18개가 표시되어 있다.

    * 블록번호 : 제520,654번째 블록
    * 블록해시 : 00000000000000000027d5cc71fb300b9d7c3b703da500a23a6a413297e7f8f4

    일반적으로 블록의 해시값은 해당 블록의 생성일시, 버전, 비츠(bits), 루트해시, 이전 블록의 해시, 그리고 논스(nonce)라고 불리는 임시값 등을 조합한 후 해시로 변환하여 생성한다. 해당 블록의 생성일시, 버전, 난이도, 루트해시와 이전 블록의 해시값은 이미 확정되어 정해진 값을 가지고 있지만, 논스라는 임시값이 달라짐에 따라 해시 연산 결과로 생성되는 블록 해시값도 다양하게 나올 수 있다. 예를 들어 논스가 1인 경우의 해시값과 2인 경우의 해시값은 전혀 다르다. 이 논스 값을 수없이 바꿔가면서 하나씩 대입하다가 새로 생성된 해시값이 일정한 목표값보다 더 작을 경우에 새로운 블록이 성공적으로 생성된다. 이처럼 특정한 블록에 대해 목표값 이하의 크기를 가진 해시값을 찾음으로써 새로운 블록을 생성하는 행위를 작업증명(PoW)이라고 한다. 작업증명의 대가로 일정한 개수의 암호화폐를 지급받는 것을 채굴(採掘) 또는 마이닝(mining)이라고 한다.


    P2P 분산 저장

    블록체인은 거래를 처리하고 기록·관리하는 권위 있는 중앙 조직이나 기구·기관이 없이, 네트워크에 연결된 개별 참여자들의 협업에 의해 유지된다.
    블록체인은 P2P 방식으로 운영된다. 피투피(P2P)란 Peer to Peer의 약자로서, 인터넷에 연결된 다수의 개별 사용자들이 중개기관을 거치지 않고 직접 데이터를 주고받는 것을 말한다. 영어로 Peer란 '동료'라는 뜻으로서, P2P란 인터넷에 연결된 한 동료가 다른 동료에게 데이터를 직접 전송하는 시스템을 말한다. P2P 방식은 기존의 서버-클라이언트 방식의 데이터 전송과는 본질적으로 다른 구조를 가지고 있다. 서버-클라이언트 구조에서 개별적인 참여자는 우선 서버에 데이터를 올려야 하고, 다른 참여자가 해당 서버로부터 데이터를 받아오는 방식으로 작동한다. 이런 점에서 서버-클라이언트 구조에서 서버는 중앙·중심·센터에 해당하고, 클라이언트는 서버에 연결된 종속적 위치에 놓이게 된다. 반면 P2P 방식을 따르는 블록체인에는 중앙이나 중심 또는 센터가 없다. 블록체인 네트워크에 참여하는 모든 참여자들은 서로 평등하다.

    블록체인에 저장된 데이터는 네트워크에 연결된 모든 노드(node)에 복사되어 분산 저장된다. 노드란 네트워크를 구성하는 각각의 개체를 말한다. 예를 들어, 10대의 컴퓨터가 서로 연결되어 네트워크를 구성하고 있는 경우 각각의 개별 컴퓨터가 하나의 노드가 된다. 즉, 이 시스템은 10개의 개별 노드로 구성된 네트워크 시스템이다. 서버-클라이언트 구조에서는 원본 데이터가 서버에 저장되어 있고 클라이언트는 서버에 접속하여 데이터를 열람·복사·다운로드 받지만, 블록체인 네트워크 구조에서는 중앙 서버가 존재하지 않으며 네트워크에 참여하는 모든 노드들이 서로 데이터를 복사하여 동일한 자료를 분산 저장하고 있다. 블록체인에 저장된 데이터는 원본과 사본의 구별이 없다. 블록체인 네트워크에 참여하는 개별 노드들은 다른 노드에 있는 데이터를 복사하여 저장함으로써 서로 동일한 데이터를 가지게 된다. 이 때 해당 데이터 전체를 100% 동일하게 복사하여 저장한 노드를 풀 노드(full node)라고 하고, 전체 데이터의 일부분만 복사하여 저장한 노드를 라이트 노드(light node)라고 한다.

    블록체인 네트워크에서 새로운 거래가 발생할 경우, 그 내역은 네트워크에 연결된 모든 노드들에게 전파되어 알려진다. 각 노드들은 일정한 시간 동안 이루어진 모든 거래를 하나로 묶어 새로운 블록을 구성하고, 목표값 이하의 해시값을 찾기 위해 경쟁한다. 네트워크에 참여한 수많은 노드들 중에서 가장 먼저 목표값 이하의 블록 해시값을 찾아낸 노드가 경쟁에서 승리하게 된다. 블록 해시를 가장 먼저 찾아낸 노드는 자신이 경쟁에서 승리했음을 전체 네트워크에 알린다. 네트워크에 참여한 다른 노드들은 새로 생성된 블록의 유효성을 검사하고 아무런 이상이 없을 경우 해당 블록의 생성을 승인한다. 이런 방식으로 전체 네트워크에 참가한 노드들 중에서 과반수가 새로 생성된 블록을 승인할 경우, 해당 블록은 정식 블록으로 채택되어 블록체인에 추가된다. 만약 서로 다른 거래내역을 가진 블록이 동시에 생성될 경우 네트워크는 약 1시간 정도 기다리면서 지켜보다가 가장 긴 길이를 가진 체인을 선택한다. 이 때 선택되지 않은 다른 블록은 버려져서 고아 블록(orphan block)이 되고 더 긴 길이를 가진 블록체인의 끝에 새로 생성된 블록이 연결된다. 이러한 과정을 통해 블록체인은 거래를 처리하고 승인하는 권위 있는 중앙기관이 없이도 네트워크 참여자들의 협업을 통해 안전하고 신뢰할 수 있는 시스템을 운영할 수 있다.

    블록체인에 저장할 수 있는 데이터는 두 종류가 있다. 하나는 텍스트, 이미지, 문서, 음악, 동영상 등 원본 데이터이고, 다른 하나는 이 원본 데이터를 해시함수를 이용하여 변환한 해시 데이터이다. 블록체인에 원본 데이터와 해시 데이터를 모두 올리는 것이 불가능하지는 않지만, 파일 용량이 커지면 전체적인 속도가 저하되고 관리의 효율성이 떨어질 수 있다. 따라서 대개의 경우 블록체인에는 해당 원본 데이터를 변환한 해시값만 기록하고, 원본 데이터는 별도의 서버에 저장하게 된다. 만약 해커가 원본 데이터가 저장된 서버를 공격하여 데이터를 위변조하더라도 해당 해시값을 가지고 있는 전 세계 모든 노드의 해시값을 동시에 위변조하지 않는 한, 조작 사실이 드러나고 정상적인 데이터로 인정받지 못하게 된다.