블록체인은 모두가 같은 데이터를 가진다고 했다.
블록체인 네트워크를 형성하기 위해 노드는 합의를 이끌어내야 한다.
이를 "합의 형성"이라고 부른다.
어떻게 분산 컴퓨팅 과정에서 합의를 이끌어내는지 알아보자
분산 컴퓨팅이란 여러 번 설명했듯이 여러 컴퓨터가 동시에 연산을 수행하고
역할을 나누어 빠르게 결과를 이끌어내기 위한 연산 방법 중 하나다.
하지만 블록체인에서는 역할을 나누는 형태로 사용하지 않는다.
모든 노드가 공평하고 동일한 역할을 한다고 앞서 말했다.
즉, 블록체인 네트워크에서 분산 컴퓨팅에선 역할을 나누지 않고 모든 노드가 같은 연산을 수행한다.
-> 같은 연산이니까 같은 결과가 나와야 한다.
하지만 결과를 보장할 수 없다.(특히 public에서)
왜??? 연산이 같은데 어떻게 결과가 틀리냐???
우선 의문을 가지고 있자.
모든 노드의 결과가 같다고 생각했지만
결과가 다르다면 블록체인 네트워크는 어떻게 유지가 되어야 할까?
바로 합의를 이끌어낸다.
결국 합의란 서로 ~~로 하자는 약속이다.
++실제로 그런 결과가 나왔다는 얘기가 아니다.(실제로 나왔으면 그걸 쓰지 굳이 합의하지는 않는다)
블록체인의 노드는 각각 맞다고 생각하는 결과에 블록을 연결한다.
** 여기에서 연결된 블록의 길이에 차이가 발생하면 더 긴 블록이 있는 체인을 선택한다.
블록체인에서 쓰이는 분산컴퓨팅은
고속으로 연산결과를 얻기보다는 블록체인의 변조나 부정행위 등의 방지를 위해서 쓰인다.(합의 형성)
** 실제로 노드에 모든 연산 결과가 적용되는데에 시간이 꽤나 걸린다.
저렇게 합의 형성에 실패함으로 분기가 생기고 나중에 분기 중 합의가 형성되어 채택되는 것이다.
위에서 같은 연산의 결과가 왜 달라지냐는 의문이 있었다.
달라지기 때문에 합의가 필요하다고 했었고
그렇다면 왜 결과가 달라지며 합의는 어떻게 이루어지는가??
**여기서는 Public 환경을 가정한다( 불특정 노드 참여)
블록체인은 원칙이 모든 노드가 같은 작업을 한다는 것이다.
즉, 모든 노드의 작업이 끝났을 때 결과도 같아야 한다.
당연히 모든 결과가 같을 때에는 합의라는 것을 형성할 필요도 없다.
모든 노드가 정상적으로 작동했다는 말이다.
++ 반대로 말하면 비정상적으로 작동한다면 결과가 달라진다는 말도 된다.
다만 일부 노드에서 비정상적으로 작동할 경우 결과가 달라진다.
일반적으로 사람들이 다수결을 하듯이
블록체인에서도 다수결에 따라 특정 작업결과를 모두가 수행한 결과라고 합의한다.
뭐 우리는 과반수라는 말을 쓴다.
총원 2/3 이상이 찬성하면 가결 아니면 부결 이런 식으로 많이 쓴다.
하지만 불특정 다수의 노드가 참여하는 환경에선
현재 연산되고 있는 노드가 몇 개인지 알 수 없다.
만약 3천만개 중 2천 8백만 개가 1이란 결과를 가리키고 2백만 개가 0이란 결과를 가리킨다면
1이 절대 다수가 맞을까???
**사실 전체 노드는 1억개였고 후에 보니 7천 2백만 개가 0이란 결과를 가리켜
0이 다수였다.
라는 경우도 생기지 않을까??
즉, 우리가 연산을 진행과정 중에서 전체 노드의 수를 알지 못하니 과반수라는 개념을 적용할 수 없고
다수결로 합의를 하는 것이 오히려 논리적이지 않은 경우가 되는 것이다.
비트코인이 그렇다.
언제든지 우리는 노드로 참여할 수 있다.
위와 같이 다수결로 결정한다면
** 불특정 노드를 다수 참여시켜서 결과를 조작하게 만들 수도 있다는 말이 된다.
여기서 유명한 이론이 나오는데
비잔티움 장애, Byzantine Fault
요약하자면 올바르게 작동하는 노드들이 얼마나 되는지 알 수 있느냐??? 라고 볼 수 있다.
반대로 Private 환경이면
우리는 노드의 참여자를 제한하고 그 수를 알 수 있다.
또한 Private에선 리더를 정할 수도 있다.
그래서 리더가 합의를 이끌어낼 수 있다.
그렇다고 리더가 ~하자 해서 모두 따르는 것이 아니다.
~하자는 의견을 리더가 내놓을 수 있는 것이다.
그렇다면 찬반이 생기고 그것에 따라 다수결로 결정하는 것이다.
우리가 알고 있는 일반적 블록체인과 다른 느낌이다.
하지만 여전히 Public은 문제가 해결되지 않는다.
어떻게 리더를 정하냐부터 문제다.
때문에 리더 없이 합의를 이끌어내는 과정이 필요하다.
하지만 위에서 말했다시피 전체 참여자를 알 길이 없다.
그럼 무엇으로 판단해야할까??
모든 사용자가 자신의 이익을 위해서 움직인다고 가정하자.
예전에 말했다시피 public chain이 유지될 수 있는 이유는 채굴보상(가상화폐)를 제공하기 때문이다.
즉, 모든 사용자는 어떠한 보상을 얻기 위해 행동할 것이다.
이러한 것을 이용해
올바른 선택을 한 사용자만이 보상을 얻을 수 있게 한다.
여기서 2가지 개념이 나온다.
작업 증명(Proof of Work) 그리고 지분 증명(Proof of Stake)
다음 글에서 이 둘에 대해서 더 자세히 알아보자
'컴퓨터, IT 지식 > 블록체인' 카테고리의 다른 글
블록체인을 이해하기 위한 배경지식 - 합의(2) (0) | 2021.05.15 |
---|---|
블록체인을 이해하기 위한 배경지식 - 파일 관리 방법 (0) | 2021.05.11 |
블록체인을 이해하기 위한 배경지식 - CAP (0) | 2021.04.22 |
블록체인을 이해하기 위한 배경지식 - P2P (0) | 2021.04.22 |
블록체인을 이해하기 위한 배경지식 - 암호기술 (0) | 2021.04.21 |