[상상속의 스티밋KR 코인을 만들어보자 3편] 모두가 은행이 되어보자 Part1
coinkorea·@houstonian·
0.000 HBD[상상속의 스티밋KR 코인을 만들어보자 3편] 모두가 은행이 되어보자 Part1
세번째 글이네요. 이해를 위해서 [첫번째글](https://steemit.com/coinkorea/@houstonian/kr-1) 과 [두번째글](https://steemit.com/kr/@houstonian/kr-2-v0-2-decentralized-ledger) 을 읽고오시기 바랍니다. 프로토콜 v0.2 를 요약하면 아래와 같습니다. >1) 철수의 KR 은 오직 철수만 쓸 수 있습니다. > 2) 말해놓고 번복 할 수 없습니다. > 3) 돈 = "나, XX은, OO에게 YY만큼의 돈을 지급한다" 라고 적은 메시지 > 4) 이런 과정을 통틀어서 유식하게 트랜젝션이라 부릅니다. > 5) 지갑주소 = 공개키, 긴 자리수의 영문+숫자로 이루어진 문자열 = 비공개키 > 6) 모든 KR 에 일련 번호를 붙인다. > 7) 모두가 은행의 역할을 한다. (유식하게 분산원장이라 부른다.) 구체적으로 > 모두가 은행의 역할을 한다. 는 말은 다음을 의미합니다. > 1) 같은 일련번호를 가진 코인이 두번 쓰이지 않도록 보장한다. > 2) 각각의 일련번호를 가진 코인을 누가 가지고 있는지 기록한다. 위 두가지를 기록하고 저장하는 것을 유식한 말로 원장(ledger) 라고 하고, 모두가 개인의 원장에 같은 정보를 적어 기록하는 것을 **분산원장**(distributed ledger) 라 합니다. 이번글은 모두가 은행의 역할을 할 때, 어떤 특징들이 있는지 살펴보겠습니다.  ## 분산 원장의 단점 --- 분산원장. 말은 유식해보이고 좋은데 이게 마냥 좋은 것인지 한번 고민할 필요가 있습니다. 학창 시절의 기억을 떠올려 봅시다. 여러분들은, 공책을 몇권이나 가지고 계셨나요? 유별난 학생들을 제외하고는 주로, 하나의 공책으로 관리하거나 많아봐야 과목당 하나의 공책으로 관리합니다. 같은 내용 을 두권의 공책에 반복해서 정리하진 않죠. 왜냐? 1. 새로운 내용을 두배 혹은 그 이상으로 반복해서 적어야 하는 고통. 2. 그러다 보면, 어떤 공책에는 쓰고 어떤 공책에는 안쓰게 되는 관리의 문제. 가 있기 때문입니다. 분산원장도 동일한 문제가 있습니다. 비유를 하자면, 분산 원장은 전교생 모두가 수업내용은 물론, 시시콜콜한 개인사 까지 공유 하기로 약속하고 이를 개개인의 노트북에 **동일하게** 적어서 기록하는 것과 비슷합니다. **관리의 문제가 아주 크죠.** .png) ## 분산 원장의 장점 --- 한편, 장점도 있습니다. 한 과목의 내용을 세번 서로 다른 공책에 적어서 개똥이, 철수, 그리고 영희가 나눠가지고 있다고 상상해 보죠. 아주 악질인 개똥이가 본인만 시험에서 좋은 성적을 받으려고 다음과 같이 계획합니다. >"200페이지의 중요한 내용을 조작해서 멍청한 철수에게 알려줘야겠다. 그러면 나혼자 시험 점수 잘 받으 수 있겠지?" 그리고 철수에게 말합니다. >"철수야, 네 공책 200페이지의 내용 잘못 적혔어. 봐, 내 공책에는 이렇게 적혀있잖아." 철수가 멍청하다면 당하겠죠. 하지만, 우리의 철수는 스마트합니다. 냉큼, 개똥이의 말을 믿는 대신에 > "모든 공책이 같은 내용을 가지고 있다." 라는 사실을 기억하고 절친 영희에게 물어봅니다. >"영희야, 내 공책 200페이지 내용이랑 네 공책 200페이지 내용 한번 비교해봐도 될까?" 비교해보니, 서로 같습니다. 즉, 개똥이가 **거짓말** 하고 있다는 것을 알 수 있죠 .png) 만약 3권의 공책이 아니라 100권의 공책이 있어서 더 많은 사람의 것과 비교해보면 더 큰 확신을 가지고 알 수 있습니다. 즉, 나눠서 저장하는 방식은 공책간의 싱크를 맞추는 관리상의 어려움이 있으나 **서로 검증 해줄 수 있다**는 장점이 있습니다! 분산 원장도 마찬가지 입니다. 다른 말로하면, 모두가 각자의 원장을 관리하기 때문에 **은행** 과 같은 집중 된 역할도 필요 없다는 뜻이 됩니다. 구지, 모두가 하는 일을 거추장스러운 이름으로 부를 필요 없죠. ## 분산원장의 내용 --- 학창시절 공책에는 수업 내용을 적었지만, 스티밋KR 코인의 분산원장에는 도대체 어떤 내용들을 적어야 할까요? 바로, **"A가 B에게 C라는 일련번호를 가진 KR 을 D 만큼 준다."** 라는 내용이 들어가게 됩니다. 또한, **이 내용들의 순서가 아주 중요합니다.** 만약, 0KR 을 가진 영희에게 철수가 1KR 만큼을 주고 영희가 이를 다시 개똥이한테 전달한 경우, 1) “나, 철수는, 영희에게 일련번호 12323223 1 KR 을 지불한다.” 2) "나, 영희는, 개똥이에게 일련번호 12323223 1 KR 을 지불한다." 라고 적는 것과 1) "나, 영희는, 개똥이에게 일련번호 12323223 1 KR 을 지불한다." 2) “나, 철수는, 영희에게 일련번호 12323223 1 KR 을 지불한다.” 적는 것은 아주 큰 차이가 있죠. 후자의 경우, **영희는 아직 가지지 않은 돈을 개똥이에게 지불하죠** 따라서, **서로 연관 된 기록들은 반드시 발생한 순서대로 기록되어야 합니다.** 분산원장에 들어가는 실제 세부 내용은 이게 전부 입니다.  이게 다라고요? 네, 진짜입니다. "A가 B에게 일련번호 C의 1 KR을 준다." 라는 내용 말고는 일체의 다른 내용이 없습니다. .png) 그럼, "철수가 X 만큼의 KR 을 가지고 있다" 라는 정보는요? 네 없습니다. 하지만, 어떻게든 “잔고”의 개념을 구하긴 구해야 합니다. 이것을 포함한 다른 부수적인 문제들은 다음글에서 살펴보고 이번 글에서는 이 원장의 내용을 가지고 서로 돈을 어떻게 주고 받을지 살피는데 집중해 봅시다. ## 분산 원장의 이용 --- 우리의 친숙한 예제로 돌아와서 분산 원장을 통해 중복 지불 문제를 어떻게 해결 할 수 있는지 생각 해봅시다. 자, 짱구가 영희와 철수에게 **사기**를 쳐서 **동일한** 1 KR 을 양쪽에게 주고싶은 상황을 상상 해봅시다. 짱구가 영희와 철수에게 각각 1KR 씩 빚을 지고 있다고 가정하죠. 중복 지불의 경우입니다. 지금까지의 프로토콜을 이용하여 짱구가 "나, 짱구는, 철수에게 일련번호 12323223 1 KR 을 지불한다.” "나, 짱구는, 영희에게 일련번호 12323223 1 KR 을 지불한다.” 라는 메시지를 사인해서 거의 **동시에** 철수와 영희에게 각각 전달합니다. 이를 받은 철수와 영희는 본인들이 가진 원장을 이용하여 1) 짱구가 실제로 일련번호 12323223 의 1 KR 을 가지고 있고 2) 이게 아직 쓰이지 않은 코인 이라는 걸 확인한 뒤 바보같이 수락하고 다른 사람들 (가령, 개똥이)에게 이 사실을 알립니다. 두가지 문제가 발생 했습니다. 1) 철수와 영희는 사기를 당해서, 둘중에 한명은 1 KR 을 못쓰게 되는 상황이 발생 2) 제3자인 개똥이는 도대체 본인의 원장을 어떻게 업데이트해야 될지 모르는 딜레마 발생. 당연한 해결책은 집단지성을 이용하여 서로서로 물어보면 됩니다 위 상황으로 돌아가서 짱구에게 메시지를 받는 즉시, 철수와 영희는 본인의 원장을 통한 확인을 하고 추가적으로 다른 구성원들에게 물어봅니다. .png) 위 상황에서 개똥이는 “어? 철수, 영희 둘다 짱구에게 같은 일련번호를 가진 코인의 증명을 요청했네? 짱구가 거짓말 치고있군.” 이라고 즉각 알 수 있고 철수와 영희에게 **알려줄 수 있습니다.** 이를 확장해서 개똥이 뿐만 아니라 영칠이 땡칠이 영심이 영구 … … 길동이 놀부 등의 **더 많은** 친구들에게 추가적으로 확인을 요청해서 이 중 **충분한 숫자**의 친구들이 확인을 하는 경우에만 개똥이의 코인을 수락합니다. 집단지성을 이렇게 왜 이용하는 걸까요? 이론적으로, 모든사람이 같은 원장을 공유하고 있죠. 따라서, 누군가가 거짓말을 하는 경우에, 구성원 모두에게 거의 동시에 하지 않는 이상 거짓말은 빠르게 전파되어 (e.g. 철수, 영희 모두에게 같은 코인을 준 사실) 서로 대조를 통해 밝혀지게 됩니다. ## 요약 및 해결 하지못한 문제들 --- 이번글에서 분산원장의 1) 장단점 2) 내용 3) 사용법 을 알아봤습니다. 하지만, 날카로운 독자들 이라면 다음과 같은 질문을 하실 수 있겠네요 1) 잔고는 그래서 어떻게 계산되는데? 2) **충분한 숫자**는 누가 어떻게 결정하는데? 3) 중복지불의 문제가 진짜 해결 된 건가? 4) ~~아몰랑, 너의 글을 믿을 수 없어~~ 프로토콜은 애매모호함이 절대 있어서는 안된다는 말 기억나시나요? 네, 여전히 1), 2)번 질문을 답할 수 없는 한계점이 있습니다. 또한, 중복지불의 문제를 해결한 것 같지만 악질 개똥이가 여전히 중복지불을 할 수 있는 방법이 있습니다. 이 문제들을 해결하기 위해서, 작업증명 (Proof of Work) 을 다음글에서 다뤄보도록 하겠습니다.
👍 steemlink, payforplay, ubg, steem-star, rahul.stan, zyl, neander-squirrel, michellectv, danile666, accelerator, buildawhale, brainstormot, houstonian, virus707, cheerup, agilinger, hyunbr, beoped, pumpkini, knight4sky, noctisk, m8586, chosungyun, jm2, shiho, delimom, tpdns90321, ksg, junn, kim2, injoy, namchankyu, marty99999, hyeonsoon, jibbcn3576,