2-1. 블록체인(Decentralization) 은 매우 안전한 시스템

in #bitcoin6 years ago (edited)

지난 포스팅에서 은행시스템은 안전한가? 에 대한 글을 남겼다. 그리고 결론으로 더 신뢰할수있는 시스템이 있다면 그것을 선택하는 것이 당연하다. 라고 주장했고 그 시스템은 블록체인이라고 언급했다.
블록체인이 안전하다고 주장하기 위해서는 아래 항목들 대한 설명이 필요할 것이다. 

  1. P2P 네트워크 (풀노드, 채굴노드, 라이트웨이드 노드 등)
  2. 블록생성 구조
  3. 합의 알고리즘


이 포스팅에서는 큰그림을  그려야 할것같고 2-1-1 꼴로 하위 항목으로 위를 설명해야 할 것 같다.
아래는 은행시스템, 블록체인 시스템을 크게 설명할수 있는 그림이다.


편의상 은행시스템이라고 했지만 왼쪽은 Centralization 중앙화 시스템을 대표하는 그림이고 오른쪽은 블록체인 즉, Decentralization 탈중앙화 시스템에 대한 그림이다. 블록체인을 설명하면서 이를 이용한 화폐인 암호화폐 그중에서 비트코인을 예로 설명을 하도록하겠다.
앞선 포스팅(https://steemit.com/bitcoin/@niipoong/1-1-centralization) 에서 설명했듯  A->B 에게 10000원을 전달한다 라는 트랜잭션이 발생하면 중앙시스템에서 A, B의 각각의 잔액정보와 A->B에게 전달했다! 라는 트랜잭션 정보 이 두가지를 저장하고 관리하기때문에 우리는 이를 신뢰하고 은행시스템을 이용한다고 설명했었다. 


중앙화 시스템이 각각의 사용기관과 중앙에 존재하는 서버 및 데이터베이스(DB)가 연결 되 있는 것에 비해 오른쪽 그림을 보면 모두가 연결되어있고 각각 유기적으로 연결되어 있음을 볼수있다. 이러한 관계를 두고 p2p네트워크라고 한다. peer to peer network 의 약자이다. (p2p네트워크는 중요한 내용이기에 다음 포스팅에서 더욱 구체적으로 다룰것이다.) 각각에 연결된 주체들을 블록체인에서는 노드라고 표현한다.  중앙화가 하나의 서버와 DB로 모든 트랜잭션과 거래, 개인 기록을 관리했다면 블록체인을 이에 대한 부담을 각각의 노드로 분산해 준다.
블록체인 시스템의 노드들을 좀더 자세히 들여다 보자.
 


위 그림을 확인해보면 각 노드들을 User A, User B라고 사용자라는 단어로 지칭했는데 이 이유는 이 글을 보고있는 당신, 그리고 글을 쓰고 있는  나 , 추가로 컴퓨팅 파워와 블록들을 저장할 수 장비만 있다면 누구나 블록체인의 노드가 될 수있기 때문이다. 한마디로 누구나 은행(중앙집권 시스템)의 중앙서버와 DB의 역할을 할 수 있다는 의미이다. 누구나 사용자이면서 관리자가 될수 있다는 말이다.


각 노드를 보면 각각 블록체인이 하나씩 달려 있음을 볼수있다 (사실, 좀더 깊게 들어가면 노드는 종류에 따라 블록체인이 없을수도 있다, 2-1-2 p2p네트워크 노드 설명에서 자세히 다룰 것이다 ) 노드 내부에 있는 블록체인이 중앙 시스템의 DB역할을 담당한다. 


데이터의 기능만을 Json형식으로 보기 편하게 정리해보겠다. (Json형식이란 데이터를 그냥 보기 편하게 구조화 했다고 생각해주세요. )

Centralization DB{
     -개인간의 거래정보(A->B에게 10000원 전달했다라는 트랜잭션)
     - A,B의 각각의 잔고
}
 

위의 정보는 블록체인 시스템에서는
Node {
      블록체인{
              - 블록1 (...)
              - 블록2 (...)
              - 블록3 (A->B에게 10000원을 전달했다 라는 트랜잭션 정보)
              ...
      }
}

위와 같은 꼴로 저장이 되어있다.  은행이 가지고있는 모든 트랜잭션 정보들을 블록체인 내부의 노드에서 모든 트랜잭션을 각각 가지고 있다는 것이다. 

중앙집권시스템이 노드수만큼 존재한다고 생각하면 된다. 그리고 이 노드들은 각각 p2p네트워크를 통해 서로 똑같은 블록데이터를 갖도록 유지한다(동기화)


조금 예리한 사람이라면 위의 블록체인 Json 형식에서는 Centralization DB 에 존재하는 A,B의 잔고 정보가 존재하지 않다는 사실을 알아차렸을 것이다. 

맞다. 비트코인 내부의 블록체인에서는 각각의 지갑들의 잔고를 따로 블록으로 관리하지 않는다.
A가 B에게 10000원을 보낸다! 라고 헀을때 A에게 10000원에 잔고가 충분히 있는지에 대한 검증은 A가 여태 발생한 모든 트랜잭션 덩어리들의 결과값 (UTXO라는 의미가 또 존재한다 )들을 추리는 과정이 필요하다. 이는 향후 자세히 다룰것이다.


굉장히 길게 설명했지만 정리하면 간단하다. 

1. 블록체인은  은행의 중앙시스템이 노드 수만큼 존재한다고 생각하면 된다.
2. 이 노드들은 중앙시스템이 갖고있는 데이터들을 블록체인이라는 블록들의 연결덩어리로 관리한다.
3. 모든 노드들의 데이터는 서로 동기화된다.
4. (중요하다) 누군가가 임의로 데이터를 바꾸기 위해서는 거의 대부분의 노드에 접근하여 해당 트랜잭션이 존재하는 블록의 정보를 바꿔야한다.


이후 하위 포스팅을 통해 블록체인 내부를 좀더 자세히 파헤쳐보기로 하겠다.



[자료 출처]

[그림1, https://m.blog.naver.com/PostView.nhn?blogId=10songking&logNo=221050648726&proxyReferer=https%3A%2F%2Fwww.google.co.kr%2F]

[그림2, http://cyberfrat.com/is-the-blockchain-an-economy-or-a-computer-science-innovation/