#3- 블록체인 기술 및 블록에 관한 정의

in #kr7 years ago (edited)


main.png


안녕하세요. 어미새입니다.


저번 포스팅에서는 해시함수에 대해 알아봤습니다. 저번시간 내용을 간략하게 정리해보면 아래와 같습니다.

해시함수

  1. 해시함수는 임이의 길이를 갖는 메시지를 입력받아 고정된 길이의 해시값을 출력하는 함수이다.
  2. 해시 함수를 사용하는 목적은 메시지의 오류나 변조를 탐기 위해, 즉 데이터의 무결성을 제공하기 위해 사용한다.



해시함수의 특징

  1. 어떤 입력 값에도 항상 고정된 길이의 해시 값을 출력 한다.
  2. 입력 값의 아주 일부만 변경되어도 전혀 다른 결과 값을 출력한다.(눈사태 효과)
  3. 출력된 결과 값을 토대로 입력 값을 유추할 수 없다.



해시 함수에 대한 글을 읽지 않으신분은 읽어보시는게 좋을 것 같습니다!
(https://steemit.com/kr/@yahweh87/2)



이번 포스팅에서는 블록체인의 간략한 정의와 블록체인에서 사용되는 '블록(Block)', 블록을 구성하는 블록의 구성요소에 대해 간략하게 알아보겠습니다!

(이번 포스팅은 최대한 간략한 개요 정도만 설명할 예정이며 추후 계속적인 포스팅을 통하여 심도있게 각 구성요소를 알아볼 계획입니다.)


블록체인(Block-chain)


블록체인은 말 그대로 블록과 블록을 체인형태(링크드 리스트)로 연결한 자료구조입니다. 블록체인에서 사용되는 '블록'일정 시간마다(비트코인의 기준으로 10분에 한 번씩 생성됩니다.)

여러 건의 거래내역을 하나의 블록으로 묶어 기존에 생성된 블록에 체인처럼 계속적으로 연결하는 데이터 구조를 의미합니다. 블록체인은 모든 거래 정보를 포함하는 거대한 분산 장부라고 할 수 있습니다. 블록체인은 분산되고, 독립 적이며, 공통 장부(원장, Ledger) 관리 기술이라고 할 수 있습니다.

그럼 본론으로 들어가서 블록체인에 구성요소인'블록(Block)'이 무엇인지 자세히 알아보도록 하겠습니다.


'블록(Block)이란 무엇인가?'


앞서 간략하게 설명드린 것처럼 블록은 블록체인의 원소 개념으로, 다수의 거래 정보의 묶음을 의미합니다. 블록에는 블록의 이름이 있습니다. 이 이름은 Height(높이)라는 용어로 표현되고 있습니다. 블록체인을 길게 이어진 수평선으로 보는 것이 아니라 한 칸 한 칸 쌓아나가 탑의 형태로 구성된다고 생각하여 Height(높이)라는 말을 쓴다고 합니다. 하지만 이 높이는 정확한 블록의 이름이 아닙니다. 블록의 정확한 이름은 TXID라 불리는 블록의 해시값입니다. 이 블록의 해시값은 블록의 헤더 정보를 모두 합산한 후 SHA256으로 변환된 값입니다.


'블록의 구성요소'


블록을 구성하는 요소들은 여러 가지 요소들이 있습니다만 크게 2가지로 구분해보면 블록 헤더와 블록바디로 나누어볼 수 있습니다. 아래의 그림은 여러 가지 인터넷 자료들을 참조하여 만든 블록 구조 도입니다.


block_element.png

지금부터 블록 구성요소에 대해서 하나씩 간략하게 살펴보도록 하겠습니다. 이번 포스팅의 목표는 각 블록의 구성요소와요소들의 역할에 대한 개념 정리 정도만 되었으면 좋겠습니다.
(너무 깊이 있게 살펴보기엔 내용이 방대하기 때문에 자세한 내용은 구성요소 하나 하나를 재 포스팅하여 명확한 개념 정리를 하도록 하겠습니다.)


'블록 해시(Hash of the block)'


블록 해시는 쉽게 '블록'의 이름 정보라고 생각하시면 될 것 같습니다. 블록 해시는 블록의 헤더 정보인 버전, 이전 블록 해시, 머클 루트, 타임, bits, 논스 정보를 모두 더하여 합을 구한 후 SHA256으로 변환한 결과 값입니다.


block_hash_ver_01.png

위의 그림처럼 블록 헤더 정보(버전 + 이전 블록 해시+ 머클 루트 + 타임 + bits + nonce)의 합산 정보를 구한 후 SHA256으로 변환하면 블록의 블록 해시 값을 구할 수 있습니다.(여기서 합산한다는 의미 그리고 단순히 SHA256으로 변환해서는 정확한 블록 해시 값을 구하 수 없습니다.)

우선 개념적으로는 헤더 정보를 모두 합산하여 SHA256 변환하면 블록 해시 값을 추출할 수 있다고만 이해하시고 추후 합산하는 과정이나 블록해시의 자세한 설명은 따로 포스팅 하겠습니다.


'버전'


말 그대로 해당 블록의 버전입니다. 현재 이 블록 헤더를 만든 비트코인 프로그램의 버전 정보로 이해하시면 될 것 같습니다.


'이전 블록 해시(Previousblockhash)'


앞서 블록체인은 거래 정보의 묶음인 블록이 체인 형태로 연결되어 있다고 설명해 드렸습니다. 이름에서도 직관적으로 알 수 있습니다만 이전 블록 해시 정보는 이전 블록의 주소 값을 가리키는 요소입니다.


block_chain.png

위의 그림처럼 각 블록의 헤더 정보에는 이전 블록의 해시정보를 가지고 있습니다. 각 블록이 이전 블록의 헤시 정보를 가지고 있기 때문에 각 블록이 서로 서로 연결되어 있는 구조가 될 수 있습니다.


'머클 루트(Merkle Root)'


'머클 루트'는 블록의 바디 부분에 저장된 트랜잭션(거래 정보) 들의 해시 트리라고 생각하시면 되겠습니다. 각 트랜잭션과 가까운 노드 끼리 쌍을 지어 해시 값을 구하여 최종적으로 구해진 해시 값이 머클루트 해시 값이 되겠습니다.

머클루트의 역할은 아래와 같습니다.

  1. '머클루트'(머클해시)값을 통해 단일 블록 내에 존재하는 트랜잭션의 무결성을 검증할 수 있다.
  2. '머클루트'(머클해시)값을 이용하여 블록의 해시 값을 생성하였기 때문에 블록의 해시의 무결성도 함께 검증할 수 있다.

쉽게 말해 해당 블록이 유효한지에 대한 무결성을 검증하기 위한 요소가 머클루트 혹은 머클해시라는 구성요소입니다. (다음 포스팅에서 이 머클루트에 대한 개념을 정리 할 예정입니다!)


'타임(Time)'


해당 블록의 대략적인 생성 시간을 의미합니다. 타임 스탬프는 유닉스 기준일 자로 표시되며 1970년 1월 1일 자정부터 경과한 시간을 초 단위로 계산한 값입니다.


'bits'


bits는 난이도 해시 목표 값을 의미하는 지표입니다. 이 부분에 대해서는 마이닝 즉 채굴이 어떻게 이루어지는지에 대한 포스팅에서 자세히 다루도록 하겠습니다.


'Nonce'


난스는 블록을 만드는 과정에서 해시 값을 구할 때 필요한 재료 역할을 수행합니다. 이 부분에 대해서도 채굴과 관련된 포스팅에서 자세히 다루도록 하겠습니다.


위의 내용을 다시 한번 정리를 좀 해보면..

  1. 블록체인은 블록과 블록을 체인형태(링크드 리스트)로 연결한 자료구조이다.
  2. 블록체인에서 사용되는 '블록'일정 시간마다 여러 건의 거래내역을 하나의 블록으로 나타내며, 블록체인의 원소 역할을 수행한다.
  3. 블록의 구성요소는 크게 블록 헤더와 블록 바디로 나눌 수 있다.
  4. 블록 체인은 이전에 생성된 블록과 새롭게 생성된 블록을 체인처럼 계속적으로 연결하는 데이터 구조를 의미한다.

지금까지 블록체인 기술 그리고 블록체인을 구성하는 블록 요소 및 블록 구조에 대한 간략한 개념정리를 해봤습니다.

다음 포스팅에서는 머클루트에 대한 포스팅을 할 예정입니다. 많은 관심 부탁드립니다!

긴글 읽어주셔서 정말 감사합니다!



다음편 보기 / #4 - 머클트리(Merkle Tree) 및 머클루트(Merkle Root)에 관한 정의
(https://steemit.com/kr/@yahweh87/4-merkle-tree-merkle-root)


[참고 사이트]

https://steemit.com/kr/@jsralph/merkle-trees

https://steemit.com/kr/@feyee95/1-1

https://commons.wikimedia.org/wiki/File:Bitcoin_block_structure.svg
http://hanaloum.blogspot.kr/2014/06/block-1_9584.html
https://www.slideshare.net/YechanAn/blockchain-77203988
http://blog.naver.com/PostView.nhn?blogId=renucs&logNo=220958282185&parentCategoryNo=&categoryNo=36&viewDate=&isShowPopularPosts=false&from=postView
https://homoefficio.github.io/2016/01/23/BlockChain-%EA%B8%B0%EC%B4%88-%EA%B0%9C%EB%85%90/
http://privacy.jiransoft.co.kr/%EB%B9%84%ED%8A%B8%EC%BD%94%EC%9D%B8%EA%B3%BC-%EB%B8%94%EB%A1%9D%EC%B2%B4%EC%9D%B8%EA%B8%B0%EC%88%A0/
https://brunch.co.kr/@ppineapple17/1

Sort:  

크으으 역시 이과와 문도리가 보는 블록체인의 시각차이는 .... 함수 나오는 순간 윽액 윽액

하하 댓글보고 완전 빵 터졌습니다. 댓글 감사합니다~ 즐거운 하루 보내세요~!

덕분에 개념 잡고 갑니다 ㅎㅎ 감사합니다.

개념 잡히셨다니 너무 뿌듯하군요~ 즐거운 하루 보내세요~

좋은 포스팅 감사합니다👍

댓글 감사합니다! 힘내서 포스팅 이어가겠습니다👍

블록체인의 기본 개념을 잘 설명해주셔서 감사합니다~

도움이 되었다니 정말 뿌듯합니다. 앞으로도 좋은 포스팅 많이하겠습니다 ^^;

궁금하던 부분이 많이 해소되었습니다. 역시 프로그래머라 그런지 "자료구조"라는 표현을 쓰시는군요, 블록체인을 정의할 때 "자료구조" 라고 쓰는 것은 어미새님이 처음인듯요(제가 본 것 중에서요ㅎㅎ)

앗 제가 댓글을 너무 늦게 확인했네요! 죄송합니다:) 궁금하신 부분이 해소 되셨다니 뿌듯하네요~ 즐거운 스팀잇하세요:)