플라네타리움 엔지니어링 스낵

블록체인? 채굴해서 코인 나오는 건 알겠는데...

알림

이번 스낵 글은 이전에 개인 뉴스레터에서 발행했던 내용을 필사하여 스낵에 올리는 포스트입니다.

들어가며

이번 뉴스레터는 “채굴해서 코인 나오는 건 이제 알겠고, 이게 변조 불가능하다고 하는데 이런 특성이랑 코인이 가치를 가지는 거랑 무슨 상관이야?” 정도로 블록체인을 아시는 분들에 대해 설명하는 내용을 담고 있습니다. 기술적 이해도가 필요한 이야기가 약간은 섞여 있고, 설명의 단순화를 위해 생략하거나 감추는 내용들이 있습니다.

TL;DR

블록체인은 “공개 탈 중앙 분산 데이터베이스” 입니다. 채굴같은 일반적인 분산 데이터베이스에는 없는 특성 같은 경우 공개 탈 중앙형 분산 데이터베이스를 만들기 위한 장치입니다.

데이터베이스

블록체인을 이야기하려면 데이터베이스라는 것을 이야기하지 않을 수가 없습니다. 데이터베이스라는 것은 무엇일까요? 본인이 RDB 등에 익숙하다면 이 단락을 넘기셔도 좋습니다. 이 밑으로는 고전적인 RDB 이야기를 조금 하려고 합니다.

하드디스크의 내부, 헤드와 디스크가 보인다.
Reference from https://unsplash.com/photos/GNyjCePVRs8

데이터베이스는 쉽게 말해서 일종의 엑셀입니다. 표가 있고. 표에 값을 저장합니다. 이를 쉽고 빠르게 저장하고 가져다 쓰기 위한 여러 장치, 그리고 그 장치를 동작시키기 위한 약간의 규칙 같은 것들이 존재하는 엑셀이죠. 하지만 엑셀과는 다른 특이한 점이 있는데, 바로 값의 변경 (추가, 수정, 삭제)이 트랜잭션(Transaction) 이라는 연산을 통해 이루어진다는 것입니다. 엑셀에 있는 파일을 여러 사람이 동시에 수정한다고 생각해 보겠습니다. 동시에 한 셀을 수정하려고 하면 어떻게 될까요? ‘나중에 엔터를 친 사람 걸 적용한다’ 라는 규칙같은 것들이 떠오른다면 똑똑하신 분일 거고, “나중” 이라는 걸 어떻게 처리할 거냐 같은 것들이 떠오른다면 개발 경력이 좀 되는 분일 것 같습니다. 이걸 트랜잭션 동시성 제어(Concurrency control)라고 합니다. 데이터베이스에 있어서 매우 중요한 부분이자 골치가 아픈 부분이라고 할 수 있습니다. 이 트랜잭션 단위의 변경이라는 특성을 통해 DB는 트랜잭션 순서와 트래픽을 잘 관리하는 것으로 동시성 제어를 할 수 있습니다.

데이터베이스와 블록체인

앞에서 데이터베이스의 데이터를 변화시키는 방법으로써 트랜잭션을 소개한 이유는 블록체인도 트랜잭션을 통해 모든 분산 노드의 데이터를 변화시키기 때문입니다. 하지만 다른 점이 있다면 보통 일반적인 데이터베이스는 권한을 가진 초월적인 존재인 오라클이 있다면 이 데이터를 마음대로 수정할 수 있고, 블록체인은 민주적인 방법으로 데이터의 수정 시도를 검증합니다. 그럴 일은 0에 수렴하겠지만 -그리고 이렇게 단순하게 진행되진 않겠지만-, 은행 전산망 담당자가 자신의 잔고 뒷자리에 0을 하나 붙여서 데이터베이스에 쓰기만 하면 손쉽게 변조가 가능합니다. 블록체인은 합의에 참여하는 사람들이 모두 자신의 컴퓨터에 데이터베이스를 만들고, 공개 네트워크에 전파 된 트랜잭션을 이용하여 이 데이터베이스에 데이터를 추가하거나 삭제하는 방법을 택함으로써, 앞에서 소개한 내용의 위/변조를 미연에 막을 수 있습니다.

블록체인

변조 불가능

공개 네트워크에 전파 된 트랜잭션을 이용하여 내 로컬 데이터베이스를 수정하는 것과 위/변조를 미연에 막을 수 있는 건 무슨 상관이죠?

은행 전산망 담당자의 이야기로 돌아갑시다. 전산망 담당자 A씨가 이 데이터를 수정할 수 있었던 것은 권한만 존재한다면 쓰는 건 어떤 식으로 수정하더라도 상관이 없기 때문입니다. 잔고 저장 테이블을 수정할 수 있는 코드를 A씨가 몰래 삽입하여 배포한 뒤 이 코드를 실행시키는 방법도 있을 수 있고, 직접 DB에 접근할 수 있었다면 이야기는 더욱 쉬워질 것입니다. 하지만 이 데이터를 수정할 수 있는 방법은 코드를 수정하여 해당 코드를 실행시키는 트랜잭션을 발생시키는 법 단 하나고, 이 코드를 여러 검증인이 검증하여 위/변조하려는 시도를 했을 때 해당 시도를 무시할 수 있다면 어떨까요? 블록체인의 특성이 그렇습니다. 검증에 참여하는 사용자들은 여러 트랜잭션이 위/변조되었는지 검증하고, 검증이 끝난 트랜잭션들을 잘 모아서 다른 검증인들에게 전파합니다. 다른 검증인들은 해당 트랜잭션들이 올바른지 검증한 후 실행시켜 자신의 로컬 데이터베이스를 변화시킵니다.

블록과 블록체인

이 과정에서 코드를 수정하여 트랜잭션을 변조한 뒤 발생시킨다 하더라도, 이런 검증인들에 의하여 받아들여지지 않고 사라집니다. 이 트랜잭션의 묶음을 우리는 “블록” 이라고 부릅니다. 이렇게 트랜잭션이 계속 발생한다면 블록도 계속 만들어 질 것이고, 해당 블록들이 이전 블록의 정보를 담은 상태로 계속 이어진다면 마치 체인과 같은 형태가 될 것입니다. 이걸 우리는 “블록체인” 이라고 부릅니다.

링크드리스트 그림.
LinkedList (https://www.geeksforgeeks.org/data-structures/linked-list/)

검증인

똑똑하신 여러분들은 위화감을 느낄 겁니다

“그럼 누가 검증하고 검증인은 어떻게 믿어?”

검증인을 믿기도 어려울 뿐더러, 검증인이 왜 그걸 해야하는지도 의문이 들 겁니다. 누구도 자신의 검증하기 위한 자원을(시간, 전기, 실리콘 성능) 마구 제공하고 싶어하지 않을 거기 때문이죠. 네트워크를 유지하는 데 필요한 검증을 제공해 준 사람들에게 보상을 어떤 방법으로도 해 주어야 합니다. 이 때 등장하는 개념이 “코인” 입니다.

코인

검증에 올바르게 참여 해 준 보상으로, 네트워크는 이 검증인에게 “코인” 을 줍니다. 이 코인에 가치를 만들어서 네트워크에 참여하게 만드는 것은 역설적이게도 이 네트워크에 참여한 사람들입니다. 이런 블록체인의 특성을 이용하여 게임을 만든다던가, 송금 애플리케이션을 만든다던가, 부동산 증서 거래 애플리케이션을 만드는 방식으로 네트워크에 참여하는 사람들이 있고, 이 사람들의 애플리케이션을 이용하기 위해 코인은 가치를 가지며, 이 코인이 가치를 가지기에 검증인은 검증을 하는 동인이 생기게 됩니다. 즉, 진정한 블록체인의 가치와 그에 따라오는 코인의 가치는 커뮤니티가 만들어 나가는 네트워크에 있다고 저는 생각합니다.

마치며

최대한 풀어 쓰기 위해 복잡한 내용은 많이 덜어내고 최대한 간결하게 설명하려고 노력해 봤는 데 어떨지 모르겠군요. 잘 읽혔으면 좋겠습니다. 다음 호가 나올 진 모르겠지만 나온다면 조금 더 재미있는 내용으로 찾아뵈려 합니다. 감사합니다.

플라네타리움은 게임에 특화된 오픈 소스 P2P 라이브러리 Libplanet과, 그 위에서 중앙 서버 없는 온라인 게임 〈나인 크로니클〉을 만들고 있습니다. 저희와 흥미로운 기술적 도전을 함께 하실 분들을 모시고 있습니다. 지금 인재 영입 페이지를 확인해주세요!