블록체인 기초
Web3 개발의 복잡성에 대해 더 깊이 파고들기 전에, 그것이 무엇이며 왜 존재하는지 살펴보겠습니다. 우선 숫자 3은 무엇을 의미하나요? 일반적으로 World Wide Web 또는 인터넷은 수년에 걸쳐 발전해 왔으며 대략 3개의 "세대"로 나눌 수 있습니다.
- Web 1.0 - 1세대, 대략 1991년부터 2004년까지를 의미합니다. 당시 인터넷은 느리고 비용이 많이 들었으며 정적 웹 페이지가 대부분이었습니다. 대부분의 사람들은 사이트를 만들고 호스팅하는 소수의 콘텐츠 제작자로 구성된 콘텐츠 소비자였습니다. JavaScript는 초기 단계였고 미디어는 거의 볼 수 없었으며(속도와 비용으로 인해), 소셜 미디어는 아직 발명되지 않았습니다. 인터넷은 고도로 분권화되었고 누구에게나 개방되었습니다. 모두가 자신의 서버를 운영하거나 수많은 호스팅 제공업체 중 하나를 사용했습니다. 개방형 프로토콜과 표준은 HTTP, HTML, FTP, SMTP 등 모든 것들에 사용되었습니다.
- Web 2.0 - 2004년경부터 현재까지의 현재 세대. 2000년대 초반에 대대적인 패러다임의 변화가 일어나기 시작했습니다. 인터넷은 더 빠르고 저렴해졌으며 느리지만 꾸준히 일반 사람들의 삶에 퍼졌습니다. 그리고 사람들이 흘러들어오자 기업도 뒤를 따랐습니다. 결제, 쇼핑, 배달과 같은 점점 더 많은 서비스가 웹을 통해 제공되었습니다. 페이지는 미디어를 통해 보다 활발히 상호 작용하고 풍부해졌지만, 가장 중요한 것은 사용자가 콘텐츠를 소비하는 것에서 능동적으로 콘텐츠를 만드는 주체로 전환했다는 것입니다. 소셜 미디어가 붐을 이루고 스마트폰이 발명되었으며, 웹이 폭발적으로 성장하기 시작했습니다. 현재 인터넷은 현대 생활의 거의 모든 측면에 영향을 미치고 있지만 그 유용성에는 어두운 면도 있습니다. 성장함에 따라 점점 더 중앙 집중화되었다는 것입니다. 이러한 중앙 집중화는 많은 이점을 가져왔지만 많은 문제도 동반하였습니다. 디지털 소유권은 그 중 하나입니다. 디지털 자산이 유비쿼터스화되면서 사용자가 실제로 자산을 소유하지 않는다는 것이 명백해졌습니다. 대신 소유권은 중앙 집중식 회사에 남아 있습니다. Google은 언제든지 Gmail의 이메일에 대한 액세스를 차단할 수 있고(예시), 게임 회사는 게임 서버를 종료하고 한 번 구매한 게임을 영원히 파괴할 수 있습니다. 또 다른 주요 문제는 사생활 침해입니다. 사용자가 자신의 개인 데이터로 서비스 비용을 "결제"하는 새로운 비즈니스 모델이 등장했습니다. 소셜 플랫폼은 우리가 보고 싶은 정보를 제공할 수 있도록 개인 정보를 공유하도록 요청합니다. 일단 그들이 우리의 관심을 끌면, 그들은 그것을 살 사람에게 정보를 판매합니다. 이는 금전적 이익을 위해 사회에 해를 끼치는 행위라고 할 수 있습니다.
- Web 3.0 - 다음 세대의 인터넷입니다. 아직 초기 단계에 있으며 어떻게 발전할지 아무도 모르지만 몇 가지 주요 측면은 이미 요약되어 있습니다.
- 탈중앙화 및 개인 정보 보호에 중점을 둡니다. 디지털 소유권을 회사에서 사용자로 전환합니다.
- 무신뢰 / 무허가 환경입니다.
- 토크노믹스와 거버넌스를 통해 커뮤니티에 의해 이끌어집니다.
이 가이드에서는 이러한 Web3 원칙 중 일부를 실제로 설명하고, 디지털 자산이 분산되어 사용자가 소유할 수 있는 애플리케이션을 구축하는 방법을 보여줍니다.
웹 분산화의 블록 빌딩
이미 간단히 논의한 것처럼 현재 웹은 고도로 중앙 집중화되어 있으며 대부분 클라우드(AWS, Azure, GCP 등) 중 하나에서 호스팅되는 중앙 집중식 서버에서 클라이언트-서버 아키텍처를 사용하여 구축됩니다. 한 보고서에 따르면 모바일 트래픽의 90%가 클라우드로 이동합니다. 즉, 인터넷의 상당 부분이 기본적으로 소수의 회사에 의해 제어된다는 의미입니다. 이러한 권력 집중화에는 여러 가지 단점이 있으며, "탈중앙화가 중요한 이유"에 대한 이 기사는 이러한 문제 중 일부를 잘 설명합니다.
최초의 탈중앙화 혁명은 그 유명한(혹은 악명 높은...) BitTorrent 프로토콜의 도래와 함께 파일 공유 섹터에서 일어났습니다. 이는 p2p 프로토콜이기 때문에 진정으로 분산되어 있으며, 중앙 권한 없이 데이터를 분산 저장할 수 있습니다. 이 프로토콜의 이면에 있는 아이디어는 IPFS 및 FileCoin과 같은 최신 분산 파일 저장소에서 사용되어 왔으며, 나중에 이에 대해 자세히 살펴보겠습니다.
다음 혁명은 금융 세계에서 일어났습니다. 오랫동안 돈을 이체하려면 이러한 이체를 모니터링, 승인 및 실행하는 중앙 기관(은행)이 필요했습니다. 이것은 최초의 암호화폐인 비트코인이 등장하면서 바뀌었습니다. 이미 언급한 BitTorrent 프로토콜도 p2p 통신을 사용하지만, 파일 대신 블록체인으로 저장되는 트랜잭션 렛저를 운영합니다. 저장된 렛저가 변경되지 않도록 하는 동시에 이 데이터의 저장을 장려하려면, 블록체인 구조가 필요합니다. BitTorrent와 달리 Bitcoin 네트워크 참가자는 "채굴"이라는 프로세스를 사용하여 서비스에 대한 보상을 받습니다. 이를 통해, 중앙 권한이 필요하지 않은 고유한 속성을 가진 새로운 형태의 디지털 통화(또는 암호 화폐)의 토대를 만들었습니다. 대신에, 사용자가 이를 스스로 유지 및 운영합니다. 그리고 이전의 탈중앙화 시스템인 BitTorrent와 마찬가지로, 유지 및 운영에 있어 중앙화된 권한이 존재하지 않습니다.
Bitcoin의 성공에 따라 다른 암호 화폐가 나타나기 시작했습니다. 가장 중요한 것은 Ethereum으로, 블록체인의 개념을 한 단계 더 발전시켜 트랜잭션 렛저뿐만 아니라 모든 종류의 데이터, 그리고 가장 중요한 코드(데이터의 또 다른 형식)를 저장하도록 조정했습니다. 기본적으로 이를 탈중앙화 데이터베이스 트랜잭션 로그로 사용할 수 있습니다. 그리고 탈중앙화 데이터베이스에 데이터와 코드가 있는 경우, 탈중앙화 애플리케이션을 구축하는 데 부족한 유일한 것은 이 코드를 실행할 수 있는 능력입니다. Ethereum 은 이를 스마트 컨트랙트를 통해 갖추었습니다. 이제 블록체인, 스마트 컨트랙트 세계에 대해 더 깊이 알아보고 이를 통해 탈중앙화 애플리케이션을 구축할 수 있는 방법을 살펴보겠습니다.
블록체인 기초
블록체인과 스마트 컨트랙트가 무엇인지에 대한 간략한 개요부터 시작하겠습니다.
기존 Web 2.0 애플리케이션에서 어플리케이션 백엔드를 구축하려면 데이터를 저장할 데이터베이스와 코드를 실행할 서버라는 두 가지가 필요합니다. Web 3.0도 마찬가지지만 데이터베이스 대신 블록체인이 있고, 서버 대신 스마트 컨트랙트가 있습니다.
블록체인 자체는 트랜잭션의 연결된 목록(체인)일 뿐입니다. 성능 최적화를 위해, 개별 트랜잭션 하나하나를 모두 연결하는 대신 블록으로 그룹화해서 연결합니다. 연결할 때는 해시를 사용하게 됩니다. 즉, 각 블록에는 이전 블록의 암호화 해시가 포함됩니다. 이러한 구조는 우리에게 중요한 속성을 부여합니다. 체인 내부의 개별 트랜잭션을 수정하게 되면 블록의 해시가 변경되고, 이후의 모든 트랜잭션이 무효화되기 때문에 트랜잭션은 변경할 수 없습니다. 즉, 모든 사람이 체인 내 트랜잭션(및 전체 체인)의 무결성을 신속하게 확인할 수 있기 때문에, 이 사실은 블록체인을 탈중앙화된 방식으로 데이터를 저장하기에 이상적인 구조로 만듭니다.
체인에는 새로운 트랜잭션만 추가될 수 있기 때문에, 블록체인은 탈중앙화 트랜잭션 로그 역할을 합니다. 트랜잭션 로그가 있으면, 기본적으로 데이터베이스가 생긴 것이라고 할 수 있습니다. 또 다른 좋은 모델은, 블록체인을 각 트랜잭션이 각각의 이벤트를 나타내는 탈중앙화 이벤트 소싱 패턴으로 생각하는 것입니다.
블록체인을 관리하는 단일 서버가 없다는 특성으로 인해, 블록체인에서는 합의 메커니즘을 사용하여 새 블록을 추가하고 시스템 간에 데이터를 동기화하며 네트워크 참여를 장려합니다. 몇 가지 합의 메커니즘이 존재하는데, 이에 대해서는 나중에 자세히 설명하겠습니다.
블록체인의 모든 트랜잭션은 공개적으로 볼 수 있으므로, 민감한 데이터는 미리 암호화해야 한다는 점을 기억하는 것이 중요합니다.
하지만 트랜잭션을 블록체인에 어떻게 입력하나요? 그것이 블록체인 노드의 목적입니다. 누구나 자신의 노드를 설정하고 p2p 블록체인 네트워크에 연결하여 새 트랜잭션을 게시할 수 있습니다. 또한 노드는 현재 블록체인 데이터에 대한 액세스를 제공합니다.
블록체인 트랜잭션 자체는 다른 유형일 수 있습니다. 지원되는 유형들은 각 블록체인 네트워크에 따라 다릅니다. 최초의 블록체인 네트워크인 Bitcoin은 금융 렛저만 저장했으며, 트랜잭션은 매우 간단했습니다. 대부분 계정 간 자금 이체였습니다. 이는 탈중앙화 금융(Bitcoin은 여전히 가장 인기 있는 암호화폐임)에 매우 적합하지만 범용 탈중앙화 어플리케이션(또는 줄여서 dApp)을 구축하려면 더 나은 것이 필요합니다. 여기서 스마트 컨트랙트가 등장합니다.
Web 2.0 개발자가 스마트 컨트랙트에 대해 생각하는 쉬운 방법은, 컨트랙트를 전통적인 클라우드 대신 블록체인 노드에서 실행되는 서버리스 기능이라고 생각하는 것입니다. 그러나 다음과 같은 몇 가지 중요한 특징이 추가됩니다.
- 이는 현재 상태(블록체인에 저장됨)와 호출자가 제공한 인자를 받아들이고 수정된 상태를 반환하는 순수 함수입니다: F(state, args) -> state . 실질적으로 이는 외부(블록체인 외부)에 대한 호출을 수행할 수 없음을 의미합니다. 즉 API 또는 DB 서버 호출은 허용되지 않습니다. 그 이유는 탈중앙화입니다. 네트워크의 다른 노드가 이를 실행하고 동일한 결과를 얻을 수 있어야 하기 때문입니다.
- 완전히 오픈 소스입니다. 모든 사람이 코드를 보고 수행 중인 작업을 확인할 수 있습니다.
- 변경할 수 없습니다. 일단 배포되면 코드는 체인에 영원히 남아 있으며 변경할 수 없습니다. 업그레이드 메커니즘이 존재하지만, 체인에 따라 다릅니다.
이러한 속성들을 실제 법적 계약에 비유할 수 있습니다. 법적인 계약은 일반적으로 변경할 수 없고 예측 가능하며 참가자가 공개적으로 열람할 수 있습니다. 스마트 컨트랙트는 기본적으로 그러한 계약이지만, 인간이 수행하는 작업 대신 코드로 표시됩니다.
그러나 우리가 할 수 있는 모든 것이 트랜잭션을 생성하는 것이라면, 컨트랙트를 어떻게 배포하고 실행하나요? 필요한 것은 두 가지 유형 의 트랜잭션입니다.
- 스마트 컨트랙트 코드를 배포하면 다른 데이터와 함께 블록체인에 유지됩니다.
- 주어진 인자로 스마트 컨트랙트를 호출합니다. 결과로 수정된 상태가 반환됩니다.
호출 트랜잭션이 노드에 도착하면 블록체인에서 컨트랙트의 코드와 상태를 읽고 실행한 다음 수정된 상태를 체인에 다시 넣습니다(트랜잭션으로).
지금까지 우리는 dApp의 백엔드 레이어가 어떻게 생겼는지 살펴보았습니다. 클라이언트 측은 어떨까요? API를 사용하여 통신하기 때문에 Web 2.0에서 사용하는 모든 종류의 클라이언트(웹, 모바일, 데스크톱 및 기타 서버)를 사용할 수 있습니다. 그러나 중요한 차이점은 사용자에게 있습니다.
전통적인 Web 2.0 어플리케이션에서 각 서버는 사용자의 ID를 소유하고, 서비스를 사용할 수 있는 사람과 사용할 수 없는 사람을 완전히 제어합니다. 그러나 블록체인에는 그러한 제한이 없으며 누구나 상호작용할 수 있습니다( 프라이빗 블록체인이 있지만 범위에서 제외하겠습니다).
그러나 표준 로그인/등록 프로세스가 없다면, 어떻게 인증을 수행하나요? 여기서 공개 키 암호화를 사용하게 됩니다. 공개 키가 사용자 이름 역할을 하고 개인 키가 느슨한 암호와 같은 역할을 하는 방식입니다. 주요 차이점은 서버가 자격 증명을 확인하고 특정 형태의 액세스 토큰을 부여하는 로그인 절차 대신, 사용자가 개인 키로 트랜잭션에 서명한다는 것입니다. 이것은 사용 가능한 기존 Web 2 ID(사용자 이름, 이메일 또는 ID 등)가 없음을 의미합니다. KYC가 필요한 어플리케이션을 구축하는 경우 이를 고려해야 합니다 .
인증을 위해 개인/공개 키 쌍을 사용하는 또 다른 중요한 의미는 사용자 이름/암호 쌍처럼 쉽게 기억할 수 없다는 것입니다. 이를 위해 지갑이라는 특수 애플리케이션이 사용됩니다. 지갑에서는 사용자의 키 쌍을 저장하고 트랜잭션에 서명하거나 다른 애플리케이션에 제공하는 행위들을 할 수 있습니다.
아직 고려하지 않은 한 가지 측면은 인프라 비용입니다. WEB 2.0에서 사용자는 제공된 서비스에 대해 비용을 지불하고(직접 금전으로 또는 간접적으로 데이터로 또는 둘 다) 서비스 제공자는 인프라 비용을 지불합니다.
Web 3.0 모델에서, 사용자는 서비스 제공자를 거치지 않고 인프라 제공자(블록체인에서 실행되는 노드)에게 직접 비용을 지불합니다.
이는 큰 의미가 있습니다:
- 서비스 공급자는 블록체인에 배포되어 제거할 수 없기 때문에 서비스를 종료하거나 사용을 제한할 수 없습니다. 이는 애플리케이션이 영원히(또는 적어도 블록체인 네트워크가 살아있는 동안) 유지된다는 것을 의미합니다.
- 사용자가 서비스 공급자에게 직접 지불하지 않기 때문에, 이러한 서비스에는 새로운 수익 창출 모델을 사용해야 합 니다. 예를 들어 특정 작업을 수행하기 위해 수수료를 스마트 컨트랙트에 코딩할 수 있습니다.
- 사용자가 인프라에 대한 비용을 지불해야 하므로, 공짜는 없습니다(이는 일반적으로 Web 2.0에도 해당되지만, 일반 사용자에게는 명확하지 않은 경우가 많습니다). 서비스 제공업체는 온보딩을 간소화하기 위해 일부 비용을 충당하거나 크레딧을 제공할 수 있지만, 궁극적으로 사용자는 비용을 지불해야 합니다.
그러나 사용자는 어떻게 지불하나요? 블록체인이기 때문에 신용 카드로 직접 지불할 수 없습니다. 이런 식으로 중앙 기관에 연결되는 것은, 실제로 분산되지 않은 방식입니다. 해결책은 탈중앙화 통화인 암호화폐를 사용하는 것입니다. 각 블록체인에는 내부 결제에 사용되는 자체 통화가 있습니다.
사용자가 스마트 컨트랙트를 호출하여 블록체인에서 작업을 수행하고자 할 때마다, 항상 인프라 비용을 지불하고 선택적으로 서비스 제공자에게 서비스 비용을 지불해야 합니다.
종종 "가스"라고 하는 이 인프라 비용은 일반적으로 두 부분으로 구성됩니다.
- 계산 비용 - 블록체인에 트랜잭션을 추가하는 데 필요한 계산 능력에 대한 비용입니다.
- 스토리지 비용 - 각 트랜잭션에 필요한 추가 스토리지 요구 사항을 처리합니다.
그러나 사용자가 맨 처음에 암호 화폐 토큰을 얻을 수 있는 방법에 대한 질문은 여전히 남아 있습니다. 한 가지 옵션은 기존 화폐 또는 다른 암호화폐를 사용하여 이미 소유하고 있는 다른 사용자로부터 구매하는 것입니다. 예를 들어, Binance와 같은 기능을 제공하는 거래소가 있습니다. 그러나 이것은 이미 유통 중인 기존 토큰 공급이 있는 경우에만 작동합니다.
이 공급을 생성하고 성장시키기 위해 블록체인 합의 메커니즘이 사용됩니다. 앞에서 블록체인 네트워크 참여를 유도하는 데 사용된다고 언급했는데 정확히 어떻게 발생할까요? 트랜잭션을 처리하는 각 노드는 작업에 대한 보상을 받습니다.
reward = infrastructureCostReward + coinbaseReward
여기서:
infrastructureCostReward
- 사용자가 트랜잭션에 대해 지불한 인프라 비용의 몫coinbaseReward
- 보상 처리 노드를 위해 특별히 생성된 새로운 암호화폐 토큰
즉, 트랜잭션이 처리될 때마다 소량의 암호화폐가 생성되므로, 유통되는 암호화폐의 양이 시간이 지남에 따라 증가합니다(물론 ICO를 사용하여 네트워크를 부트스트랩하려면 일정량의 토큰을 생성해야 합니다 ).
현재 두 가지 합의 메커니즘이 일반적으로 사용됩니다.
- Proof-of-work - original consensus mechanism, which is currently used by Bitcoin and was used by Ethereum. 이는 비효율성으로 인해 많은 비판을 받고 있습니다. 여기서 새로운 트랜잭션을 처리하려면 "채굴"이 필요하며 이는 고도로 계산 집약적인 프로세스입니다. 이로 인해 그래픽 카드는 멸종 위기종이 되었습니다. 또 다른 단점으로, 트랜잭션 비용이 매우 높고 처리 속도도 매우 느립니다.
- 지분 증명 - 상당한 처리 능력(및 그래픽 카드)이 필요하지 않은 새로운 합의 메커니즘입니다. 트랜잭션 처리는 일반적으로 "검증"이라고 합니다. NEAR와 같은 최신 체인에서 사용합니다. 여기서 트랜잭션은 일반적으로 훨씬 저렴하고 처리 속도가 더 빠릅니다. Ethereum switched to Proof-of-stake (PoS) mechanism in September 2022.
이 시점에서 우리는 dApp 구축에 가장 적합한 블록체인을 선택하는 다음 장으로 진행할 수 있는 충분한 지식을 가지고 있어야 합니다.
올바른 블록체인 선택
세상에는 많은 블록체인이 있으며 귀하의 필요에 가장 적합한 것을 선택하기 어려울 수 있습니다. 먼저 체인의 가장 중요한 특성을 정의해야 합니다.
- 합의 알고리즘 - 지금까지 작업 증명은 너무 비효율적이며 대규모 애플리케이션에 적합하지 않은 것으로 판명되었습니다. 현재로서는 지분 증명이 훨씬 더 나은 선택인 것 같습니다. 다른 대안이 존재하긴 하지만, 실제로 잘 시도되지 않습니다.
- 트랜잭션/스토리지 비용 - 저렴한 비용은 사용자에게 직접적인 혜택을 줍니다(사용자가 비용을 지불해야 함을 기억하세요).
- 트랜잭션 속도 - 더 빠른 트랜잭션 처리 시간은 더 나은 사용자 경험을 의미합니다.
- 확장성 - 네트워크가 많은 수의 트랜잭션을 지원하도록 설계되었는지 여부입니다. 그렇지 않으면 트랜잭션 속도/비용이 시간이 지남에 따라 통제할 수 없을 정도로 커질 수 있습니다.
- 개발 경험 - 가장 중요한 것은 스마트 컨트랙트를 작성하는 데 사용할 언어입니다. Ethereum은 컨트랙트를 위한 프로그래밍 언어로 Solidity를 대중화했습니다. NEAR와 같은 여러 최신 체인은 보다 성숙한 범용 프로그래밍 언어인 Rust를 선택했습니다.
역사적으로 스마트 컨트랙트를 도입한 최초의 블록체인은 이더리움이었습니다. 그러나 사용자 수가 증가함에 따라 트랜잭션 속도와 비용이 급증했고 수요를 감당할 수 없다는 것이 명백해졌습니다. So, a number of scaling solutions appeared - layer 2 chains, sidechains, and plasma chains. 그러나 그들은 모두 각자만의 단점이 존재합니다. 이더리움은 핵심 문제를 수정하고 네트워크를 재설계하려고 시도하고 있습니다. 이는 지분 증명 합의로 전환하는 것과 같이 꽤 오랫동안 진행되고 있지만, 모든 문제가 해결될지는 매우 불분명합니다.
한편, 차세대 블록체인들이 등장하기 시작했습니다. They learned from the Ethereum mistakes, and designed them from ground-up to be fast, cheap and scalable. 올바른 것을 선택하는 것은 결코 쉬운 일이 아니지만, 다음과 같은 특징 때문에 NEAR 블록체인이 이상적인 솔루션이라는 것을 알 수 있습니다.
- 트랜잭션은 저렴하고 매우 빠릅니다.
- 처음부터 매우 확장 가능하도록 설계되었습니다. 이것은 우리가 트랜잭션 비용과 속도가 미래에도 안정적으로 유지될 것이라고 계산할 수 있음을 의미합니다.
- 지분 증명 합의 메커니즘을 사용하므로, "채굴"이 필요하지 않습니다.
- Rust가 기본 프로그래밍 언어로 사용됩니다. 이는 인기 있는 언어(그리고 가장 사랑받는 언어 중 하나)이기 때문에 시장에서 개발자를 찾고 배우는 것이 훨씬 쉽습니다.
이후 모든 섹션에서는 NEAR를 기본 블록체인으로 사용하므로, 웹 3.0 마이그레이션의 복잡함에 뛰어들기 전에 먼저 자세히 살펴봐야 합니다.