정의
'블록'이라고 하는 관리할 데이터를 분산 컴퓨팅 환경에 체인처럼 연결해서 저장하는 기술
원리
간략 설명
- 다수의 거래내역을 묶어 블록을 생성 후 생성한 블록을 기존 블록체인의 끝에 연결한 다음 다수의 컴퓨터에 P2P 방식으로 분산 저장하는 방식이다.
1. 블록 구성
1. 다수의 거래 기록을 묶어 하나의 블록을 구성. 거래의 최소 단위는 트랜잭션(transaction, 약칭 'Tx')이다.
2. 인터넷 등 온라인에서 거래가 발생한 경우, 각각의 트랜잭션 별로 하나의 거래내역을 구성한다. 이 거래내역은 해시(hash) 함수를 사용하여 암호화된다
3. 각각의 거래내역을 텍스트로 표시할 경우 그 길이가 각각 다를 수 있지만, 이것을 해시 함수로 변환하면 항상 일정한 길이의 해시값이 나온다.
4. 이러한 해시 연산 과정을 거쳐 하나의 트랜잭션이 하나의 해시값이 대응하는 1:1 구조를 이루게 된다
5. 블록체인에서는 다수의 거래내역을 묶어 하나의 블록을 구성하는데, 거래내역이 많든 적든 상관없이 항상 일정한 시간에 한 번씩 새로운 블록을 구성한다.
6. 하나의 블록에는 하나의 루트 해시가 존재한다. 루트 해시를 생성하기 위해 우선 각 거래내역에 1:1로 대응하는 해시값을 생성하고, 두 개의 해시를 합쳐 하나의 상위 해시를 생성하고, 그 상위 해시 2개를 합쳐 다시 더 상위의 해시를 생성한다. 이 과정을 계속 반복하면, 최종적으로 트리의 최상위 지점에 하나의 루트 해시가 생성된다. 이러한 해시값의 구조를 해시 트리 또는 머클 트리라고 한다. 하나의 블록에는 반드시 하나의 루트 해시가 존재한다. 만약 거래내역 중 하나라도 위변조 할 경우 해당 해시값과 그 상위의 모든 해시값이 변경되어 결과적으로 루트 해시가 달라지게 된다. 따라서 블록의 루트 해시만 비교해 보면 그 하위에 있는 해시를 일일이 비교 검사하지 않더라도 데이터가 위변조 되었는지 즉시 확인할 수 있다.
7. 새로 구성된 블록은 타임스탬프 서버에 의해 생성된 시간이 기록되며, 전체 네트워크에 전파된다. 타임스탬프(timestamp)는 전자문서가 특정한 시점에 존재하고 있었다는 '존재 증명'과 그 이후 데이터가 변경되지 않았다는 '내용 증명'을 해주는 일종의 전자 도장이다.
2. 체인 연결
하나의 새로운 블록을 구성한 경우, 마치 체인처럼 기존 블록체인의 맨 끝에 새로운 블록을 연결시켜야 한다. 새로운 블록을 기존 블록체인의 끝에 연결시키려면, 해당 블록의 이름에 해당하는 해시값을 찾아내야 한다. 새로운 해시값을 성공적으로 찾아내는 경우 새로운 블록이 생성되어 기존 블록체인에 연결된다.
일반적으로 블록의 해시값은 해당 블록의 생성 일시, 버전, 비츠(bits), 루트 해시, 이전 블록의 해시, 그리고 논스(nonce)라고 불리는 임시 값 등을 조합한 후 해시로 변환하여 생성한다.
해당 블록의 생성 일시, 버전, 난이도, 루트 해시와 이전 블록의 해시값은 이미 확정되어 정해진 값을 가지고 있지만, 존스라는 임시 값이 달라짐에 따라 해시 연산 결과로 생성되는 블록 해시값도 다양하게 나올 수 있다.
특정한 블록에 대해 목표값 이하의 크기를 가진 해시값을 찾음으로써 새로운 블록을 생성하는 행위를 작업 증명(PoW)이라고 한다. 작업 증명의 대가로 일정한 개수의 암호화폐를 지급받는 것을 채굴(採掘) 또는 마이닝(mining)이라고 한다.
3. P2P 분산 저장
블록체인에 저장된 데이터는 네트워크에 연결된 모든 노드(node)에 복사되어 분산 저장된다. 블록체인 네트워크에 참여하는 개별 노드들은 다른 노드에 있는 데이터를 복사하여 저장함으로써 서로 동일한 데이터를 가지게 된다.
이때 해당 데이터 전체를 100% 동일하게 복사하여 저장한 노드를 풀 노드(full node)라고 하고, 전체 데이터의 일부분만 복사하여 저장한 노드를 라이트 노드(light node)라고 한다.
블록체인 네트워크에서 새로운 거래가 발생할 경우, 그 내역은 네트워크에 연결된 모든 노드들에게 전파되어 알려진다. 각 노드들은 일정한 시간 동안 이루어진 모든 거래를 하나로 묶어 새로운 블록을 구성하고, 목푯값 이하의 해시값을 찾기 위해 경쟁한다. 네트워크에 참여한 수많은 노드들 중에서 가장 먼저 목푯값 이하의 블록 해시값을 찾아낸 노드가 경쟁에서 승리하게 된다. 블록 해시를 가장 먼저 찾아낸 노드는 자신이 경쟁에서 승리했음을 전체 네트워크에 알린다. 네트워크에 참여한 다른 노드들은 새로 생성된 블록의 유효성을 검사하고 아무런 이상이 없을 경우 해당 블록의 생성을 승인한다. 이런 방식으로 전체 네트워크에 참가한 노드들 중에서 과반수가 새로 생성된 블록을 승인할 경우, 해당 블록은 정식 블록으로 채택되어 블록체인에 추가된다.
만약 서로 다른 거래내역을 가진 블록이 동시에 생성될 경우 네트워크는 약 1시간 정도 기다리면서 지켜보다가 가장 긴 길이를 가진 체인을 선택한다. 이때 선택되지 않은 다른 블록은 버려져서 고아 블록(orphan block)이 되고 더 긴 길이를 가진 블록체인의 끝에 새로 생성된 블록이 연결된다. 이러한 과정을 통해 블록체인은 거래를 처리하고 승인하는 권위 있는 중앙기관이 없이도 네트워크 참여자들의 협업을 통해 안전하고 신뢰할 수 있는 시스템을 운영할 수 있다.
특징
1. 탈중앙성
- 다수가 데이터를 저장, 증명하기 때문에 중앙 관리자가 존재할 필요가 없음.
2. 보안성
- 여러 명이 데이터를 저장하기 때문에 위·변조가 어려움
3. 투명성
- 누구나 네트워크에 참여 가능하며,, 거래 검증 및 승인 가능
단점
- 블록을 다른 사람에게 잘못 보낸다면 롤백이 불가능
- 현재 사용자가 늘어나서 전송 속도가 느림
마무리
최근 블록체인을 이용한 앱을 개발하고 있느라 글 포스팅이 늦어졌네요.
앱 기능 구현에 초점을 맞추고 개발하다 보니 블록체인에 대한 이해가 부족하다고 판단돼서 정리할까 합니다.
아직 부족하거나 틀린 부분이 있을 수도 있으니 주의하시면 좋을 거 같습니다.
이번 포스팅은 마무리하면서 다음 포스팅에서 뵙겠습니다.
참고
https://en.wikipedia.org/wiki/Blockchain
https://www.ibm.com/kr-ko/topics/what-is-blockchain
https://brunch.co.kr/@bumgeunsong/50
https://kr.cointelegraph.com/bitcoin-for-beginners/how-does-blockchain-work
https://m.blog.naver.com/hashnet/221347028042
'기타 분야 > 블록체인' 카테고리의 다른 글
The Graph 란? (0) | 2021.12.09 |
---|---|
ERC - 721과 ERC - 1155 (0) | 2021.10.11 |
ERC-1155 란? (0) | 2021.10.05 |
NFT(Non-Fungible Token) 란? (0) | 2021.10.03 |
코인 vs 토큰 차이점 (1) | 2021.08.28 |