비트코인은 어떻게 작동하는가? (1)
본 글은 비트코인의 작동 원리를 이해하기 쉽게 설명해놓은 해외 사이트 [Learn me a bitcoin] (https://learnmeabitcoin.com/) 의 Home 페이지 How does Bitcoin work? 를 번역한 글 입니다. 읽은 것을 개인적으로 이해하기 쉽게 정리하여 작성한 글이다보니, 어색한 부분이 있을 수도 있습니다. 원문을 읽고자 하시는 분은 위의 링크를 참조해주세요. 😀
How does Bitcoin work?
비트코인은 2009년에 만들어진 전자 결제 시스템입니다. 당신은 비트코인을 이용해 세계의 누구에게나 돈을 송금할 수 있으며, 계좌를 만들때 그 누구에게도 허락맡지 않고도 계좌를 손쉽게 만들 수 있습니다.
은행은 우리의 돈을 잘 보유하고, 송금할 수 있도록 해야합니다. 하지만 그들은 극히 일부의 예비금만 가질뿐, 많은 돈을 빌려주어 신용 거품을 만들어냅니다. -Satoshi Nakamoto-
은행의 중앙 집중화와 2007년에 일어난 금융 위기는 비트 코인의 발전에 큰 영감을 주었습니다. 비트코인은 결제 시스템이며, 중앙화된 통제 없이 작동합니다. 아무나 프로그램을 운영할 수 있고 시스템을 사용할 수 있습니다. 이것이 어떻게 작동하는지, 간단한 예제들로 살펴보겠습니다.
What is Bitcoin?
비트코인은 단지 하나의 프로그램입니다. 당신은 이것을 다운로드하여 당신의 컴퓨터에서 실행할 수 있습니다.
당신이 이 프로그램을 실행하면, 이 비트코인 프로그램을 실행하고 있는 다른 컴퓨터들과 연결되고, 이렇게 연결된 컴퓨터들은 당신과 파일을 공유하기 시작합니다. 이 파일을 바로 블록체인(blockchain) 이라고 부르며, 이것은 기본적으로 아주 큰 트랜잭션 리스트(a big list of transactions) 의미합니다. (트랜잭션이란 단어가 생소할 수도 있을텐데요. 비트코인에서의 트랜잭션은 거래 장부라고 이해하시면 됩니다.)
하나의 새로운 트랜잭션이 네트워크에 생성되면, 연결되어 있는 모든 컴퓨터들이 새로운 트랜잭션의 복사본을 가질때까지 연속적으로 전파됩니다. 약 10분 간격으로 네트워크상의 임의의 컴퓨터(노드)가 수신한 최신 트랜잭션을 블록체인에 추가하고, 업데이트된 파일을 네트워크의 다른 모든 사용자들과 공유합니다.
- 네트워크에 새로운 트랜잭션이 생성됩니다.
- 트랜잭션은 네트워크를 통해 전파됩니다.
- 하나의 노드가 가장 마지막 트랜잭션을 파일에 추가합니다.
- 파일 업데이트는 네트워크 상의 모든 사용자에게 공유됩니다.
결과적으로 비트코인 프로그램은 파일(블록)을 공유하고, 새로운 트랜잭션들로 파일을 업데이트하기 위해 서로 통신하는 대규모 컴퓨터 네트워크를 만듭니다.
비트코인은 어떠한 문제를 해결했을까?
비트코인 이전에도 트랜잭션을 네트워크를 통하여 서로 전파하는 것은 가능했습니다. 하지만, 문제는 충돌하는 트랜잭션들(conflicting transactions)이 네트워크에서 발생될 수 있다는 것이었습니다. 예를 들어, 당신이 같은 디지털 코인을 소비하는 각각의 트랜잭션을 생성하고나서, 그 2개의 트랜잭션이 네트워크에 동시에 들어왔다고 가정해봅시다. 이것을 이중 지출(double-spend)이라고 합니다.
그림에서 맨 왼쪽의 노드는 초록 트랜잭션을 받아 파일에 기록합니다.
그리고 그림에서 맨 오른쪽 노드는 빨간 트랜잭션을 받아 파일에 기록합니다.
하지만 어떤 노드는 이미 빨간 트랜잭션을 파일에 이미 먼저 기록했는데, 다른 노드로부터 초록 트랜잭션을 공유받게되어 초록 트랜잭션을 거부하게 됩니다.
이 과정을 거치고나니, 서로 충돌되는 트랜잭션들이 네트워크에 남아있는 상황이 됩니다.
그래서 당신이 만약 중앙 통제 없는 전자 결제 시스템을 만든다면, 당신은 많은 트랜잭션들 중에 어떤 것이 "첫번째로" 왔는지 알아내는데 문제를 겪게 됩니다. 그리고 컴퓨터 네트워크들이 모두 독립적으로 작동하는 경우, 이 것을 알아내는 것은 어렵습니다. 위 그림과 같이 어떤 컴퓨터는 초록 트랜잭션을 먼저 받게되고, 또 다른 어떤 컴퓨터들은 빨간 트랜잭션을 받았기 때문이죠.
어떤 것이 먼저 왔는지, 파일에 유일하게 기록되어야 하는 그 "첫번째"는 누가 결정해야할까요?
비트코인은 노드가 수신하는 모든 트랜잭션을 파일에 쓰기 전에 메모리 풀(memory pool)에 보관하도록 함으로써 이 문제를 해결합니다. 그런 다음, 10분 간격으로 네트워크 내 임의의 노드가 메모리에 있는 트랜잭션을 파일에 추가합니다.
그러면 이 업데이트된 파일이 네트워크와 공유되고, 노드들은 업데이트된 파일의 트랜잭션을 "올바른" 트랜잭션으로 간주하여 수락하고, 메모리에서 충돌하는 트랜잭션을 제거합니다. 따라서 파일에는 이중 지출 트랜잭션이 기록되지 않으며, 모든 노드가 서로 합의하여 파일을 업데이트 할 수 있습니다.
이 과정 중 노드가 파일에 트랜잭션을 추가하는 프로세스를 마이닝(채굴) 이라고 하며, 이는 네트워크상의 단일 노드로 제어할 수 없는 네트워크 전체에서의 경쟁으로 결정됩니다.
비트코인은 어떻게 작동하는가? (2)편에서 계속...