기본적인 Database Server중 하나 MySQL Server를 설치하고 실행해본다.



1. MySQL Installer 다운로드


먼저 MySQL Installer를 다운로드 한다.


자신의 OS에 맞는 버전을 선택하여 다운로드 하여 설치를 진행하면 된다.


링크 : https://dev.mysql.com/downloads/installer/





2. MySQL Workbench & MySQL Server 설치




1. Installer를 실행하여 Custom 설치를 선택한 후 Next를 클릭한다.




2. MySQL Server와 Workbench를 Install할 항목한 후 Next를 클릭한다.






3. Execute를 클릭하여 선택한 항목의 설치를 진행한다.






4. 설치가 완료되면 Next를 눌러 다음과 같이 설정을 진행한다.


- Standalone MySQL Server / Classic MySQL Replication 선택




- 포트 설정(디폴트 3306) 및 방화벽 예외 설정




- Authentication Method 설정 (디폴트로 RECOMMENDED 사항 선택)




- Account and Roles에서 Root Account Password를 설정한다. 그 밖에 User는 추가하지 않고 진행한다. (Root Password는 반드시 기억 해둬야 함!!!)




- Windows Service Name 설정(디폴트 값이 다소 상이할 수 있음...)




- Execuete를 눌러 설정 진행 및 완료








- Start MySQL Workbench after Setup을 선택하여 Workbench를 실행한다.



3. MySQL Workbench 실행 및 서버 로그인


- Local instance 선택



- 이전 과정에서 설정한 Root Password 입력




- 로그인 성공 시 다음과 같이 Query를 입력할 수 있는 화면이 출력 된다.



이로써 기본적인 Query를 실습 해볼 수 있는 MySQL 서버와 Workbench 세팅이 완료되었다.


'기타' 카테고리의 다른 글

180112 특강 <Future Network 2018 (Beyond 2017)>  (1) 2018.01.12

2장 비트코인의 작동원리




거래, 블록, 채굴, 블록체인


기존의 은행 업무 및 지불 체계와 달리 비트코인 시스템은 분산된 신뢰 네트워크를 기반으로 하고있다. 신뢰할 수 있는 중앙 통제 기관 대신 시스템 내의 다른 여러 참가자들의 상호작용을 통해 새롱누 속성이 생기면서 신뢰가 쌓이게 된다.


2장에서는 비트코인 시스템 내에서 진행되는 거래 과정에서 상위 단계이 있는 비트코인을 추적해서 거래 한 건이 분산화된 합의(Distributed consensus)라는 비트코인 메커니즘에 의해 '신뢰'를 얻고 승인을 받은 후 거래내역 전부가 담긴 분산 장부인 블록체인에 최종적으로 기록되는 과정을 살펴볼 것이다.


각 예시는 하나의 지갑에서 다른 지갑으로 송금 시 사용자들(Joe, Alice, Bob) 간의 상호 작용을 시뮬레이션하는 비트코인 네트워크 상에서 발생한 실제 거래를 기반으로 하고 있다.


블록탐색기는 비트코인 검색 엔진 역하을 하는 웹 어플리케이션으로, 이 서비스를 통해 비트코인 주소, 거래내역, 블록 등을 찾아볼 수 있고 이들 간의 관계 및 흐름을 볼 수 있다.


- 블록체인 인포(Blockchain info)

- 비트코인 블록 익스플로러(Bitcoin Block Explorer)

- 인사이트(insight)

- 블록아르 블록리더(blockr Block Reader)




비트코인 개요




그림에 나와있는 개괄 도표에서는 비트코인의 시스템의 구성 요소로 키가 들어있는 지갑을 보유한 사용자들, 네트워크에 전송되는 거래들, 거래내역 전부를 담고있는 권위 있는 장부인 동의 블록체인을(경쟁적 계산을 통해) 생산해 내는 채굴자들을 들 수 있다.




커피 한잔 구매하기


앨리스의 지갑에 0.1BTC가 송금되었다. 앨리스는 비트코인으로 첫 소매거래를 하기 위해 밥의 가게에서 커피 한 잔을 구매할 계획이다. 이는 판매시점 정보관리(POS) 시스템에 비트코인 옵션을 추가하면서 가능해졌다. POS 시스템은 달러로 나와있는 총 주문 가격을 일반적인 시세에 따라 비트코인으로 전환한 후 두가지 통화 단위에 대한 가격을 보여준다. 물론 이 거래에 대한 지불 요청(Payment request)이 들어있는 QR코드도 보여준다.


Total :

$ 1.50 USD

0.015 BTC


이 지불 요청 QR코드는 다음 URL을 인코딩한 것으로, 이는 BIP0021에 나와있다.


bitcoin:1GdK9UzpHBzqzX2A9JFP3Di4weBwqgmoQA?
amount=0.015&
label=Bob%27s%20Cafe&
message=Purchase%20at%20Bob%27s%20Cafe

Components of the URL

A bitcoin address: "1GdK9UzpHBzqzX2A9JFP3Di4weBwqgmoQA"
The payment amount: "0.015"
A label for the recipient address: "Bob's Cafe"
A description for the payment: "Purchase at Bob's Cafe"

송금할 비트코인의 목적지 주소만 담겨있는 QR코드와 달리 지불요청 QR 코드로 인코딩된 URL로서 목적지 주소, 지불 금액, 'Bob's Cafe등의 지불과 관련된 기본 내용을 담고있다. 지불요청을 통해 대금을 지불하는데 사용되는 정보를 미리 넣어 둘 수 있고, 동시에 사용자가 읽을 수 잇는 설명도 제공한다. 




비트코인 거래


간단하게 설명하자면 거래는 비트코인을 많이 보유한 소유주가 비트코인 일부를 다른 사람에게 전송하는 것을 승인한다고 네트워크에 이야기해 주는 것과 같다. 소유권의 사슬 속에서 비트코인의 새로운 소유주는 또 다른 소유주에게로 비트코인이 전송되는 것을 승인하는 다른 거래를 만드는 과정을 반복함으로써 매수한 비트코인을 소비할 수 있다.


각 거래는 하나이상의 '입력 값(Input)' 즉 비트코인 계좌에서 빠져나가는 차변과, 거래의 또다른 구성요소로서 하나이상의 '출력값(Output)' 즉 비트코인 계좌로 들어오는 대변으로 구성된다. 입력값과 출력값의 합계가 반드시 동일할 필요는 없다. 대신 출력값의 총합은 입력값의 총합보다 약간 작아야하며, 이 차이 값은 거래속에 포함된 '거래 수수료'가 된다.


거래 수수료란 공개장부에 거래를 포함시킨 채굴자가 수거하는 소액의 지불금이다. 비트코인 거래는 그림에서 보는 바와 같이 복식부기장부의 항목과 유사하다.


 또한 송금되는 비트코인의 금액(입력값) 각각에 대한 소유권을 소유주의 디지털 서명을 통해 증명하는 과정이 거래에 포함되며 누구든지 독립적으로 거래를 검증할 수 있다. '소비(Spending)'라 함은 이전 거래에서 송금되었던 돈이 비트코인 주소에 의해 확인된 새로운 소유주에게로 전송되는 거래에 서명을 함으로써 이루어지는 작업을 말한다.



 거래를 통해 거래 입력값에서 거래 출력값으로 가치가 이동한다. 입력값은 비트코인의 가치가 발생하는 지점으로, 주로 이전 거래의 출력값이다. 거래 출력값은 키를 이용해서 새로운 소유주에게 비트코인의 가치를 넘겨준다. 


 예상지출(Encumbrance)이라고 불리는 목적지는 향후 거래에서 나온 출력값을 새로운 거래에서 입력값으로 사용될 수 있다. 한 거래에서 나온 출력값은새로운 거래에서 입력값으로 사용될 수 있다. 이와 같이 소유권 사슬을 생성함으로써 가치가 비트코인 주소들 간을 이동하게 된다.


(한 거래의 출력값이 새로운 거래의 입력값이 되는 거래체인)



일반적인 거래 유형


가장 흔흐게 볼 수 있는 거래 유형은 하나의 주소에서 다른 주소로 단일 거래가 이루어 지는 형태이다. 이 경우 종종 원 소유주에게 돌려줘야 하는 '잔액'이 존재하며, 이때 하나의 입력값과 두 개의 출력값이 발생한다.


(가장 일반적인 트랜잭션)




또 다른 일반 유형으로는 여러 개의 입력값을 하나의 출력값으로 합치는 거래다. 이 형태는 실제로 동전과 단위가 작은 지폐가 많이 있는 경우 큰 단위의 지폐 한장으로 교환하는 행위와 동일하다. 지불 과정에서 잔액으로 받은 작은 단위의 금액을 정리하기 위해 지갑 어플리케이션에서 때때로 이 유형의 거래가 시행되기도 한다.


(돈을 합산하는 거래)



마지막으로, 비트코인 장부에서 종종 나타나는 일반적인 거래 유형은 하나의 입력값을 여러 명의 수신인에게 줄 수 있는 여러 개의 출력값으로 배분하는 형태다. 이 거래 유형은 기업체에서 다수의 직원들에게 급여를 지불하는 등 돈을 분배해야 할 경우에 사용된다.





거래의 구성


앨리스의 지갑 어플리케이션에는 앨리스의 명세서대로 거래를 진행하기 위해 적절한 입력값과 출력값을 선택하는데 필요한 모든 논리(logic)가 들어잇다. 앨리스가 해야할 일은 송금 목적지와 금액을 명기하는 일 뿐이다. 나머지는 앨리스가 자세한 사항을 지켜보고 있지 않아도 지갑 어플리케이션 내에서 진행된다. 더욱 중요한 사항은 완전히 오프라인 상태일 때도 지갑 어플리케이션을 통해 거래가 진행될 수 있다는 점이다. 마치 집에서 수표를 먼저 발행하고 나중에 봉투에 넣어 은행으로 우편 발송하는 것과 마찬가지로, 비트코인 거래도 굳이 비트코인 네트워크가 온라인에 접속해 있을 때 진행해서 서명할 필요는 없다. 단지 거래가 실행되어야 할 때 네트워크로 전송하기만 하면 된다.




올바른 입력값 얻기


우선 앨리스의 지갑 어플리케이션에서 밥에게 전송하기를 원하는 금액을 지불할 수 있도록 알맞은 입력값을 찾아야 할 것이다. 지갑 어플리케이션 대부분은 지갑 소유주가 보유한 키로 잠겨있는(지출이 예상되는) 'Unspent Transaction Output'에 대한 소용량의 데이터베이스를 보유하고 있다. 따라서 앨리스의 지갑에는 현금과 비트코인을 교환했던 조와의 거래에서 생성된 거래 출력값 복사본이 포함되어 있을 것이다.


풀 클라이언트(full client)를 사용하는 비트코인 지갑 어플리케이션의 경우, 블록체인상에 있는 모든 거래에서 실제로 발생한 UTXO의 복사본을 가지고 있다. 덕분에 지갑에서 거래 입력값을 생성할 수 있을 뿐만 아니라 정확한 입력값을 가지고 향후 거래를 신속하게 검증할 수 있다.


대부분의 사용자 지급에서는 사용자 본인의 UTXO만 추적하는 '라이트웨이트' 클라이언트를 가동한다.


지갑 어플리케이션에 소비되지 않은 거래 출력값 복사본이 보관되어 있지 않은 경우, 다른 제공자들에 의해 사용가능한 다양한 API를 이용하고 있는 풀인덱스 노드(full-index node)에 요청해서 해당 정보를 검색해달라고 비트코인 네트워크에 요구할 수 있다. 



(앨리스 비트코인 주소의 UTXO 전부를 조사)

$ curl https://blockchain.info/unspent?active=1Cdid9KFAaatwczBwBttQcwXYCpvK8h7FK

위의 예시는 RESTful API 요청으로, 특정 URL에 대한 HTTP GET 명령으로 작업을 진행한다. 이 URL의 경우 특정 비트코인 주소가 보유하고 있는 소비되지 않은 거래 출력값 전부를 돌려보내 주기 때문에 어플리케이션에서 소비를 위해 필요한 거래 입력값을 생성하도록 필요한 정보를 제공해 줄 수 있다. 우리는 응답을 받기 위해 단순 명령행인 HTTP 클라이언트 cURL을 사용한다.



(검색결과)

{

	"unspent_outputs":[

		{
			"tx_hash":"186f9f998a5...2836dd734d2804fe65fa35779",
			"tx_index":104810202,
			"tx_output_n": 0,
			"script":"76a9147f9b1a7fb68d60c536c2fd8aeaa53a8f3cc025a888ac",
			"value": 10000000,
			"value_hex": "00989680",
			"confirmations":0
		}

	]
}



예시에 나와있는 결과를 통해 앨리스의 주소인 1Cdid9KFAaatwczBwBttQcwXYCpvK8h7FK가 소유권을 가지는 출력값 중에 UTXO가 한개 있다는 사실을 알 수 있다. 이 검색 결과에는 해당 거래에 대한 참조가 포함되며, UTXO가 들어있고 금액(1000만 사토시, 0.1 BTC)이 들어있다. 이 정보를 가지고 앨리스의 지갑 어플리케이션은 해당 가치를 새로운 소유주의 주소로 전송하기 위한 거래를 진행할 수 있다.




출력값 생성하기


 거래 출력값은 해당 가치에 대한 예상 지출을 생성하는 스크립트의 형태로 만들어지며 스크립트에 대한 솔루션이 제공되는 경우에만 사용할 수 있다. 쉽게 말하면 앨리스의 거래 출력값에는 '이 출력값은 밥의 공개키에 대응하는 키를 이용해 서명을 하는 누구에게나 지불 가능하다' 라는 의미가 담겨있는 스크립트가 포함되어 있을 것이다. 


 밥의 해당 비트코인 주소에 대응하는 키를 가진 지갑을 가진 사람은 밥 뿐이기 때문에 밥의 지갑에서만 출력값을 가치로 사용할 수 있는 서명을 제공할 수 있다. 따라서 앨리스는 밥의 서명을 요구하는 출력값에 대한 '지출을 예상할' 수 있다.


이 거래에는 출력값이 하나 더 존재할 것이다. 왜냐하면 앨리스의 돈은 0.1BTC에 대한 출력값의 형태인데 커피 한잔가격은 0.015 BTC이기 때문이다. 따라서 앨리스는 0.085 BTC를 돌려받아야 한다. 앨리스의 잔액에 대한 지불은 밥에대한 지불과 동일한 거래 내에서 이루어지며 앨리스의 지갑에서 생성된다.


기본적으로 앨리스의 지갑에서는 그녀가 보유한 돈이 두가지 거래로 쪼개진다. 하나는 밥에게 송금하는 거래이고 하나는 그녀가 잔액을 수신하는 거래다.




이 거래에 명시되어 있지 않고, 입력값과 출력값 간 차이로 알 수 있게 되어 있다. 0.085를 잔액으로 받는 것 대신에 두번째 출력값으로 0.0845만 생성한다면 0.0005BTC(0.5 밀리코인)가 남게된다.


결과적으로 산출되는 입력값과 출력값 간의 차이값이 거래 수수료(Transaction fee)가 되는데, 이는 채굴자들이 해당 거래를 블록에 포함시키고 블록체인 장부에 올리는 데 대한 수수료 명목이다.




거래내역을 장부에 추가하기


 앨리스의 지갑 어플리케이션에서 생성된 거래는 258바이트 크기로 돈의 소유권을 확인하고 새로운 소유주를 배정하는 데 필요한 모든 정보를 포함하고 있다. 한 건의 거래가 어떻게 새로운 블록의 부분이 되며 그 블록이 어떻게 '채굴' 되는지에 대해 살펴볼 것이다. 그리고 계속해서 추가되는 상황에서 새로운 블록이 블록체인에 추가된 후 어떻게 신뢰 네트워크를 유지할 수 잇는지에 대해 알아볼 것이다. 



거래 전송하기


거래에 필요한 정보가 거래 자체에 모두 포함되어 있기 때문에 거래가 비트코인 네트워크로 전송되는 방법이나 장소는 중요하지 않다. 비트코인 네트워크는 P2P 네트워크로, 각각의 비트코인 고객이 여러 다른 비트코인 고객들에게 접속함으로써 네트워크에 참여하게 된다. 비트코인 네트워크이 목적은 거래내역과 블록을 참여자 전원에게 전파하는 것이다.



거래 전파하기


앨리스의 지갑 어플리케이션에서 유선, 와이파이 휴대폰 등 어떠한 종류의 인터넷이든 연결만 되어 있다면 여러 비트코인 고객들에게 새로운 거래를 전송할 수 있다. 비트코인 네트워크 노드(다른 고객들)가 이전에는 없던 유효한 거래를 전송받으면 즉시 연결되어있는 다른 노드로 해당 거래를 전달할 것이다. 이런 과정을 통해 거래는 .P2P 네트워크를 통해 급속도로 전파되고 몇 초 만에 비트코인 네트워크 내에 있는 노드 대부분에게 도달하게 된다. 



밥의 입장에서 거래 살펴보기 


비트코인 거래에 대해 가장 흔하게 하는 오해가 바로 새롭게 생성된 블록에 대해 10분을 기다리거나 위험요소를 최소화 하기 위해 필요한 6번의 승인을 위해 최대 60분을 기다려서 '승인'을 받아야 한다는 것이다. 물론 해당 거래를 전 네트워크가 수락했다는 사실을 확인하기 위해 승인 절차가 필요하기는 하지만 커피 한 잔 처럼 소액 결제에 대해서는 시간을 지연시킬 필요가 없다.



비트코인 채굴하기


이제 거래가 비트코인 네트워크상에 전파되었다. 하지만 이 거래가 검증되고 채굴(mining)이라는 과정을 거쳐 블록에 포함될 때 까지는 공유장부(블록체인)의 일부가 되지 못한다.(자세한 내용은 8장 참조)


 비트코인 신뢰 시스템은 수학적 계산에 기반을 두고있다. 각 거래들은 블록 단위로 묶여있고, 입증해야 할 수학적 계산의 규모가 엄청나지만 입증된 후에는 검증을 위해서 그다지 많은 계산을 하지 않아도 된다. 채굴 과정은 비트코인 시스템 내에서 두가지 목적을 가지고 있다.


- 채굴 과정은 돈을 새로 발행하는 중앙은행처럼 각 블록 내에서 새 비트코인을 생성한다. 한 블록당 생성되는 비트코인의 양은 고정되어있고 시간이 지나면서 줄어든다.


- 채굴 과정은 거래를 담고 있는 블록이 충분한 연산력을 사용하여 승인되었다는 것이 확인 되었을 때만 신뢰가 생긴다.


이 게임은 누군가 솔루션을 찾아낼 때마다 리셋되고 솔루션을 찾는데 걸리는 시간이 10분정도가 되도록 난이도가 자동적으로 조절된다. 


약 10분마다 거래가 담겨있는 블록에 대한 솔루션을 찾기 위해 전 세계적인 경쟁 속에서 수천명의 다른 채굴자들과 함께 채굴 작업을 하고 있다. 작업 증명이라고 불리는 이 솔루션을 찾는 작업을 위해서는 전 비트코인 네트워크에 걸쳐 1초당 수천 조 건의 해싱 작업이 필요하다. 


작업 증명 알고리즘은 설정된 유형에 일치하는 솔루션이 나올 때까지 SHA256이라는 암호화 알고리즘을 이용해 블록의 헤더와 임의의 숫자를 반복적으로 해싱한다. 솔루션을 찾아낸 첫 번째 채굴자가 이 경쟁의 승자가 되고 채굴한 블록은 블록체인으로 올라간다.


비트코인 네트워크에 합류하는 채굴자들이 늘어나면서 문제의 난이도가 빠른속도로 높아졌다. 초기에는 CPU 연산 -> GPU -> ASIC(하나의 실리콘 칩위에 동시에 가동되는, 하드웨어상에 수백 개의 채굴 알고리즘이 새겨져 있는 주문형 반도체)을 사용할 때에만 수익성이 있었다.




블록에 담겨있는 거래 채굴하기


네트워크로 전송된 거래는 전 세계적으로 분산되어 있는 장부인 블록체인에 올라가기 전에는 검증되지 않는다. 평균적으로 10분마다 채굴자들은 지난 블록까지의 거래 전부가 포함된 새 블록을 생성한다. 새로운 거래들이 사용자 지갑과 여러 어플리케이션으로부터 네트워크로 끊임없이 들어온다. 비트코인 네트워크 노드들이 이 상황을 지켜보다가 각 노드가 유지하고 있는 임시 풀(temporary pool)로 이 새로운 거래들을 추가한다. 이 임시풀에는 미검증 거래들이 들어있다. 채굴자들이 새 블록을 만들면서 이 임시 풀에서 새 블록으로 미검증 거래들을 추가한 후 새 블록의 유효성을 입증하기 위해 매우 어려운 문제(작업인증)를 풀려고 노력한다.


거래들이 새 블록에 추가될 때 거래 수수료가 가장 높은 거래부터 우선 순위로 추가되고 몇몇 거래는 다른 기준을 바탕으로 추가된다. 각 채굴자는 네트워크로부터 이전 블록을 받게되면 이전 경쟁 라운드에서 채굴에 실패했다는 사실을 알게 되고 바로 새 블록을 채굴하는 과정을 시작한다. 즉시 새로운 블록을 생성하고 이전 블록의 지문을 채운 후 새로운 블록에 대한 작업증명 계산을 시작한다.


각 채굴자는 자신의 블록 안에 특별한 거래 하나를 포함하고 있는데, 이는 자신 소유의 비트코인 주소에 새롭게 생성된 비트코인을 보상(현재는 한 블록당 25 BTC)으로 받는 거래다.




앨리스의 거래가 네트워크에서 선택되어 미검증 거래들로 이루어진 채굴 풀에 포함되었다. 징의 채굴하는 블록에 담겨서 징이 채굴에 성공하여 블록 #277316으로 발행함으로써 블록체인에 등록된다. 


몇 분 후, 새 블록인 #277317을 또 다른 채굴자가 채굴한다. 이 새 블록은 앨리스의 거래가 들어있는 이전 블록을 기반으로 하기 때문에 앨리스의 거래가 포함된 블록 위에 좀 더 많은 연산이 추가된다. 앨리스의 거래가 들어있는 블록은 해당 거래에 대해 한번의 '승인(Confirmation)'을 보유하고 있다고 간주된다. 새로운 블록이 추가되면 추가적인 승인을 받게된다. 각 블록이 거래를 담고있는 블록의 상부에 거래를 철회하기가 기하급수적으로 어려워진다. 따라서 해당 거래는 네트워크상에서 더욱더 신뢰도가 올라간다.



그림을 살펴보면 앨리스의 거래가 들어있는 블록을 볼 수 있다. 이 블록을 밑으로 277316개의 블록이 존재하며, 최초 블록 #0까지 체인으로 각자 연결되어 있다. 블록의 '높이(Height)'가 높아지면 각 블록과 체인의 계산 난이도도 전반적으로 올라간다. 앨리스의 거래가 들어있는 블록 이후에 채굴된 블록들은 더 강한 강도로 앨리스의 거래를 보증한다. 왜냐하면 체인의 길이가 길어질수록 수학적 계산의 수가 급격하게 불어나기 때문이다. 관례상 6회 이상의 승인이 이루어진 블록은 취소가 불가능하다(Six confirmation). 왜냐하면 여섯 개의 블록을 무효화해서 다시 계산하기 위해서는 엄청난 양의 계산이 필요하기 때문이다.




거래 소비하기


앨리스의 거래는 블록의 구성 요소로서 블록체인에 끼워져 있기 때문에 비트코인 분산 장부의 구성요소가 되며, 모든 비트코인 어플리케이션에서 확인할 수 있다. 풀 인덱스 클라이언트의 경우 비트코인이 블록 내에서 처음 발생하여 점차 이 거래에서 저 거래로 이동해서 최종적으로 밥의 비트코인 주소에 도달할 때까지 돈의 출처를 추적할 수 있다. 라이트웨이트 클라이언트의 경우 해당 거래가 블록체인 내에 존재하고 그 후 채굴된 블록이 여러 개 있다는 점을 승인함으로써 소위 말하는 단순지불검증(SPV)을 시행할 수 있다. 이를 통해 해당 네트워크가 해당 거래를 유효하다고 수락했음을 확증할 수 있다.


 밥은 이렇게 생성된 출력값을 참조해서 입력값을 정한 후 새로운 소유권을 배정받고 나서 본인의 소유의 거래를 생성한다. 이 과정을 거치고 나면 밥은 이제 앨리스와의 거래 및 다른 거래로부터 나온 출력값을 소비할 수 있다.



Ch1 에서는 주요 개념과 용어를 설명하고 필요한 소프트웨어를 파악하면서 간단한 거래에서 비트코인을 사용하는 방법을 소개한다.



비트코인 이전의 디지털 통화들


디지털 머니를 받는 사람들은 기본적으로 두가지 질문을 떠올릴 수 있다.


1. 이 디지털머니가 위조가 아닌지 신뢰할 수 있는가?

2. 이 돈을 내가 아닌 자신의 소유라고 주장하는 사람이 나올 가능성이 있는가?(Double Spending문제로 알려져있다.)


실제 화폐는 정교하게 제작된 용지와 인쇄 기법을 이용해서 위조 지폐 문제와 끊임없이 싸우고 있다. 또한 동일한 지폐가 동시에 다른 두 장소에서 사용될 수 없기 때문에 종이 화폐는 이중지불 문제를 쉽게 해결한다.


기존 화폐도 디지털상으로 보관되고 송금된다. 이 경우는 통화에 대해 영향력을 가지고 있는 중앙기관을 통해 모든 전자 거래를 승인함으로써 위조 지폐문제와 이중지불 문제를 처리한다.


디지털 머니의 가치에대한 정당성을 인정하는데에는 암호 기법이 그 근간을 마련해준다. 특히 암호화된 전자 서명은 사용자들로 하여금 디지털 자산 혹은 해당 자산에 대한 소유권을 제공하는 거래 시 서명을 가능하게 해준다. 적절한 아키텍처가 존대한다면 디지털 서명 역시 이중지불 문제를 해결하는데 사용될 수 있다.


비트코인은 암호 기법과 분산 시스템에 대한 수십 년간 연구의 정점을 찍는 결과물로, 독창적이고 강력한 특성을 통해 다음 네 가지 측면에서 혁신적인 화폐라 할 수 있다. 


비트코인의 구성 요소는 다음과 같다.


- 분산화된 P2P 네트워크(비트코인 프로토콜)

- 공개 거래장부(블록체인)

- 분산회된 수학적 결정론적 통화 발행(분산 채굴)

- 분산회된 거래 검증 시스템(거래 스크립트)



비트코인의 역사


비트코인은 2008년 사토시 나카모토라는 필명으로 "Bitcoin: A Peer-to-Peer Electronic Cash System"이라는 제목의 보고서가 발간되면서 세상에 등장했다. 


b-money 와 HashCash 등 이전에 발멸됐던 화폐들을 조합해서 완전히 분산화된 전자화폐 시스템을 창조했다.


비트코인 시스템은 통화 발행이나 거래에 대한 지불 및 검증을 위해 중앙 통제에 의존하지 않는다.


주요혁신 사항으로는 전 셰계적으로 매 10분마다 '투표'를 수행하기 위해, 분산 연산 시스템(즉 작업 증명 알고리즘)을 사용함으로써 분산 네트워크가 각 거래 상태에 대해 합의(Consensus)에 이를 수 있도록 했다는 점이다. 이러한 과정 덕분에 단일 통화 단위가 두번 결제되어 발생하는 이중지불 문제를 손쉽게 해결한다.


비트코인 시스템은 완전히 투명한 수학 원리에 의해 운영되기 때뮨에 사토시 나카모토를 비롯한 그 누구도 이 시스템을 통제할 수 없다. 




분산 컴퓨팅 문제에 대한 해결책


사토시 나카모토가 비트코인을 발행하면서 '비잔티움 장군 문제(Byzantine General's Problem)'로 알려져 있는, 분산 컴퓨팅 분야에서 예전부터 풀지 못했던 문제에 대한 실용적인 해결책이 마련되었다.


간단하게 설명하면 비잔티움 장군 문제는 신뢰성이 없고 임시로 구성된 네트워크상에서 정보를 교환함으로써 행동방침에 대해 동의를 구하고자 하는 과정에서 발생한다. 


사토시 나카모토의 해결책은 신뢰성이 있는 중앙 기관의 존재가 없는 상태에서 네트워크의 동의를 얻기 위해서 작업 증명 개념을 이용한다. 





비트코인의 사용과 사용자들, 그들의 이야기


Skip(실제 사용되는 사례를 예로들고 구체적인 내용은 뒤에 설명한다고 쓰여있어서 이부분은 생략)



비트코인 시작하기


비트코인 네트워크에 가입해서 비트코인을 쓰려는 사용자라면 어플리케이션을 다운로드 하거나 웹 어플리케이션을 사용해야 한다. 비트코인은 표준이기 때문에 비트코인 클라이언트 소프트웨어에 대한 여러가지 구현 버전과 참조 구현이 있다.


참조구현의 경우 사토시 클라이언트(Satoshi client)로 알려져 있으며, 사토시 나카모토가 만든 기본 구현을 근간으로 개발팀이 오픈 소스 프로젝트로 운영하고 있다.


비트코인 클라이언트의 유형으로 크게 세 가지가 있다.



풀 클라이언트(Full Client)


풀 클라이언트 혹은 '풀 노드(full node)'는 비트코인 거래 정보를 전부(모든 사용자가 현재까지 진행한 거래내역 전부) 저장하고 비트코인 사용자들의 지갑을 관리하며 비트코인 네트워크상으로 직접 거래를 만들어 낼 수 있다. 이러한 특징은 어떤 서버나 제 3자의 서비스와 관계없이 프로토콜의 모든 측면을 처리하는 독립형 이메일 서버와 유사하다.


- 사용자들을 위해 최고수준의 통제와 독립성을 제공하지만 그에 따라 사용자들은 백업과 보안에 대한 부담을 지게된다.

- 적적한 백업 없이 풀 클라이언트를 이용하게 되는 경우 컴퓨터에 문제가 생기게 되면 자금을 잃을 수 있다.



라이트웨이트 클라이언트(Lightweight client)


라이트웨이트 클라이언트는 사용자의 지갑을 저장하긴 하지만 비트코인 거래나 네트워크에 접근하기 위해서는 제 3자가 소유한 서버에 의존한다. 라이늩웨이트 클라이언트의 경우 거래내역 전부에 대한 복제본을 저장하지 않기 때문에 거래 검증을 위해서는 제 3자 서버에 의존해야 한다. 이는 네트워크와 소통하기 위해 제 3자에게 의존하고 메일함 사용을 위해 메일 서버에 접속하는 독립형 이메일 클라이언트와 유사하다.



웹 클라이언트(Web Client)


웹 클라이언트는 웹 브라우저를 통해 접속하며 제 3자가 소유한 서버상에서 사용자의 지갑을 저장한다. 이는 전적으로 제 3자가 서버에 의존하는 웹 메일과 유사하다.


설치와 사용이 가장 쉽지만 보안과 통제에 대한 문제를 사용자와 웹 서비스 소유주가 공유해야 하는 위험이 있다. 많은 사례를 통해서도 알 수 있듯이 웹 지갑 서비스가 공격을 받는 경우 사용자들은 자금 전부를 잃게 될 수도 있다.




다음 부분은 비트코인 클라이언트인 멀티비트에 대한 튜토리얼과 이 어플리케이션을 사용해서 비트코인 장만 및 송수신 방법등의 순서를 소개한다.
























+ Recent posts