https://cexplorer.io/article/what-makes-development-on-blockchain-different
블록체인을 구축하려면 기존 프로그래밍에서의 패러다임 전환이 필요하며 블록체인의 분산 모델에 대한 철저한 이해가 필요합니다. 스마트 계약 개발자는 분산형 애플리케이션(DApp) 개발을 위해 특정 기능 세트를 사용할 수 있습니다. 그들은 첫 번째 시도에서 안전한 DApp을 구축해야 합니다. 이번 글에서는 일반 애플리케이션 개발과 블록체인 애플리케이션 개발의 차이점에 대해 설명하겠습니다. Aiken으로 작성된 스크립트와 Solidity로 작성된 SC를 살펴보겠습니다.
블록체인 기반 구축은 어떻게 다른가요?
일반적인 프로그래밍 언어와 블록체인 언어의 주요 차이점은 사용 사례와 설계 원칙입니다. 일반적인 프로그래밍 언어는 범용이며 광범위한 응용 프로그램을 개발하는 데 사용할 수 있습니다. 반면, 블록체인 언어는 분산형 애플리케이션(DApp) 및 스마트 계약(SC) 개발을 지원하기 위한 특정 기능으로 설계되는 경우가 많습니다.
전통적인 프로그래밍 언어를 사용하는 개발자는 거의 모든 것을 작성할 수 있는 수많은 라이브러리를 보유하고 있습니다. 글로벌 개발자 커뮤니티에서 수년에 걸쳐 개발된 이러한 라이브러리는 파일 I/O 처리부터 복잡한 기계 학습 알고리즘에 이르기까지 광범위한 기능을 위해 미리 작성된 코드를 제공합니다. 이 방대한 라이브러리 생태계를 통해 개발자는 바퀴를 다시 만들 필요 없이 빠르고 효율적으로 애플리케이션을 구축할 수 있습니다.
그러나 블록체인 개발의 경우 상황은 상당히 다릅니다. Ethereum용 Solidity 또는 Cardano용 Plutus와 같은 블록체인 프로그래밍 언어는 강력하지만 사용 가능한 라이브러리의 폭과 깊이가 동일하지 않습니다. 이는 부분적으로 블록체인 기술의 상대적인 최신성과 스마트 계약 작성에 대한 특정 요구 사항 때문입니다.
블록체인 프로그래밍 언어는 암호화 및 자금 조작에 특히 중점을 두고 설계되었습니다. 또한 새로운 유형의 토큰을 생성하여 토큰에 대한 제어, 전송 조건 등을 정의할 수 있습니다.
SC를 작성하는 개발자는 해당 계약에 인코딩된 논리와 규칙을 제어할 수 있습니다. 그러나 블록체인 네트워크 자체의 특정 측면을 제어할 수는 없습니다.
예를 들어, 개발자는 트랜잭션이 처리되어 블록체인에 추가되는 속도인 네트워크 처리량을 제어할 수 없습니다. 이는 네트워크 프로토콜, 노드 수, 사용된 합의 알고리즘 등 다양한 요소에 의해 결정됩니다.
마찬가지로 개발자는 블록 생산자가 블록을 조작할 가능성을 통제하거나 방지할 수 없습니다. 블록 생산의 무결성은 블록체인의 기본 합의 알고리즘과 네트워크 규칙에 의해 유지됩니다.
개발자는 SC의 동작을 지시할 수 있지만 실행은 블록체인 네트워크에 따라 달라집니다(제한될 수 있음).
이러한 우려의 분리는 블록체인 기술의 분산형 특성의 근본적인 측면입니다. 이는 단일 당사자가 블록체인 네트워크의 모든 측면을 완전히 제어할 수 없도록 보장하여 보안과 신뢰성을 향상시킵니다. 이는 블록체인에서 원하는 기능이지만 일부 개발자는 외부 요인에 다소 제한적이거나 의존적이라고 느낄 수 있습니다.
블록체인 개발에서 코드는 분산형 네트워크에서 실행되며 블록체인 프로토콜의 제약 조건을 준수해야 합니다. 예를 들어, SC의 모든 작업에는 일정량의 '가스’가 필요하며 개발자는 가능한 한 가스 효율적으로 계약서를 작성해야 합니다. 이는 종종 스마트 계약이 코딩 스타일에서 더 낮은 수준이고 명시적이라는 것을 의미합니다.
게다가 스마트 계약이 블록체인에 배포되면 변경할 수 없습니다. 이러한 불변성은 블록체인 기술의 기본 기능이지만 개발자가 처음부터 올바른 코드를 얻어야 함을 의미하기도 합니다.
나중에 패치할 수 없기 때문에 오류나 보안 취약점이 있을 여지가 없습니다. 따라서 스마트 계약 개발 프로세스에는 엄격한 테스트와 감사가 포함되는 경우가 많습니다. 이로 인해 DApp 개발이 더 길어지고 비용이 더 많이 듭니다.
새로운 개발자가 블록체인 프로그래밍의 모든 함정을 이해하는 것은 어려운 일이지만 분산형 모델은 또 다른 함정을 제시할 수 있습니다.
일반 애플리케이션을 개발하려면 단일 엔터티가 데이터와 기능을 제어할 수 있는 중앙 집중식 시스템을 만드는 것이 종종 포함됩니다. 이는 분산형 모델에서 작동하는 블록체인 애플리케이션과 극명한 대조를 이룹니다. 이 모델에서는 단일 개체가 전체 네트워크를 제어할 수 없습니다. 대신 제어는 노드 네트워크에 분산됩니다.
SC는 블록체인 애플리케이션의 기본 부분입니다. 이는 계약 조건이 코드에 직접 작성된 자체 실행 계약입니다. 중개자 없이 미리 정해진 규칙에 따라 자동으로 거래를 실행합니다. 이러한 자동화는 사람의 실수와 사기의 위험을 줄여줍니다.
오류의 여지가 없으므로 SC는 주어진 조건에서 기대되는 작업을 정확하게 수행해야 합니다. 어떠한 제3자도 SC 실행에 영향을 미치거나 SC를 중단할 수 없어야 합니다. 코드는 법이다. SC 실행이 실패하고 예상치 못한 오류가 발생하는 경우 일반적으로 손실된 자금을 저장할 방법이 없습니다.
DApp 개발의 또 다른 특징은 개발자가 Ethereum과 같은 하나의 환경을 잘 알고 있다면 Cardano에서 개발할 준비가 전혀 되어 있지 않을 수도 있다는 것입니다. SC 플랫폼은 근본적으로 서로 다를 수 있습니다.
개발자가 새로운 플랫폼으로 마이그레이션하는 것은 어렵습니다.
개발자는 SC 플랫폼 간의 중요한 차이점을 알고 있어야 합니다. 이러한 차이점은 애플리케이션의 디자인, 기능 및 보안에 큰 영향을 미칠 수 있기 때문입니다. 예를 들어 상태와 동시성의 차이점을 살펴보겠습니다.
두 가지 주요 SC 플랫폼인 Ethereum과 Cardano는 특히 상태 조작 및 동시성 측면에서 이러한 차이점이 어떻게 나타날 수 있는지에 대한 훌륭한 예를 제공합니다.
Ethereum은 계정 기반 모델로 운영됩니다. 이 모델에서 전체 네트워크는 생성되는 모든 블록으로 업데이트되는 전역 상태를 공유합니다. 이 전역 상태에는 계정 잔액과 스마트 계약 상태가 포함됩니다.
이더리움 모델을 사용하면 여러 사용자가 단일 블록 내에서 단일 스마트 계약과 상호 작용할 수 있습니다. 그러나 이러한 공유 변경 가능 상태는 특히 동시성과 관련하여 복잡성과 잠재적인 취약성을 초래할 수 있습니다. 이 맥락에서 동시성은 여러 트랜잭션이 동시에 실행될 수 있는 능력을 의미합니다. 올바르게 처리하지 않으면 경쟁 조건 및 기타 보안 취약점이 발생할 수 있습니다.
반면에 Cardano는 EUTxO(Extended Unspent Transaction Output) 모델을 사용합니다. 이 모델에서는 자금 송수신이 잔액으로 저장되지 않고 지갑 주소와 연결된 미사용 거래 금액(UTxO)으로 저장됩니다. 이러한 UTxO는 각각 한 번만 사용할 수 있습니다.
각 트랜잭션 출력은 한 번만 사용할 수 있고, 한 번 사용되면 다른 트랜잭션에서 사용할 수 없으므로 이 모델은 본질적으로 동시성을 처리합니다. 그러나 이는 개발자가 스마트 계약을 설계하고 상태를 처리하는 방법에 대해 다르게 생각해야 함을 의미하기도 합니다.
개발자가 스마트 계약에서 버그와 취약점을 방지하려면 이러한 차이점을 이해하는 것이 중요합니다. 예를 들어, 재진입은 공격자가 첫 번째 함수 호출이 완료되기 전에 반복적으로 함수를 호출할 수 있는 Ethereum SC의 일반적인 취약점입니다. EUTxO 모델로 인해 Cardano에서는 이 문제가 덜 중요합니다.
Ethereum과 Cardano는 모두 분산형 애플리케이션 개발을 위한 강력한 플랫폼을 제공하지만 각각 상태 및 동시성을 처리하는 고유한 접근 방식을 가지고 있습니다. 개발자는 이러한 플랫폼에서 안전하고 효율적인 애플리케이션을 효과적으로 구축하기 위해 이러한 차이점과 스마트 계약 개발에 미치는 영향을 이해해야 합니다.
Solidity를 잘 이해하는 개발자는 쉽게 Cardano로 전환할 수 없습니다. 새로운 프로그래밍 언어(Plutus, Aiken 등)를 배워야 하는 것 외에도 주어진 블록체인의 특정 특성을 처리해야 합니다. 예를 들어 Solana로 마이그레이션할 때도 마찬가지입니다.
하나의 블록체인 플랫폼에서 다른 블록체인 플랫폼으로 전환하려면 새로운 프로그래밍 언어를 배우는 것 이상이 필요합니다. 각 플랫폼에는 고유한 아키텍처, 합의 메커니즘, 거래 모델, 계정 모델 및 스마트 계약 기능이 있습니다.
예를 들어, 개발자가 인터넷, 데이터베이스, 클라우드 서비스, 파일 시스템 등과 같은 개념에 대한 작업 경험이 이미 있다면 Java에서 C#으로의 전환이 더 쉬울 수 있습니다.
에이켄
Aiken은 Cardano용 스크립트(스마트 계약) 작성에 사용되는 기능적 프로그래밍 언어입니다.
그림에서 매우 간단한 유효성 검사기 스크립트를 볼 수 있습니다. 스크립트는 지출 조건이 충족되는지 확인합니다.
지출자는 서명과 ‘Hello, World!’ 문자열을 제공해야 합니다. 그렇다면 스크립트의 반환 값은 True입니다. 이렇게 하면 자금을 사용할 수 있습니다.
개발자가 사용할 수 있는 기능을 확인해 보세요. 무엇보다도 개발자는 바이트 배열을 사용하여 서로 비교하고, 여러 해시 함수(blake2b_256, sha2_256 및 sha3_256)를 사용하고, 시간 간격을 사용하여 작업하고, 기본 산술 함수를 수행하고, 문자열을 사용하여 작업할 수 있습니다.
블록체인과 더 관련된 기능의 경우 개발자는 주소, 인증서 및 거래 작업을 수행할 수 있습니다. 또한 ADA 코인 및 토큰 등의 가치로 작업할 수 있습니다.
Cardano용 DApp을 사용하려면 온체인 및 오프체인 부분을 구축해야 합니다. Aiken은 온체인 부분에만 사용됩니다. 개발자는 적합한 프로그래밍 언어를 사용하여 오프체인 부품을 구축할 수 있습니다.
Cardano에서 Aiken 또는 Plutus로 작성된 스마트 계약은 본질적으로 거래의 유효성을 결정하는 검증 스크립트이기 때문에 크기가 더 작은 경우가 많습니다. 이는 UTXO 모델에서 작동하며, 각 거래 출력에는 이를 사용하려는 모든 거래를 검증하기 위한 작은 논리(계약)가 포함됩니다.
반면, Solidity로 작성된 Ethereum의 스마트 계약은 블록체인에 존재하는 상태 저장 애플리케이션이며 일반적으로 더 높은 수준의 복잡성을 가지고 있습니다. 이는 계약이 블록체인에 저장된 지속적인 상태와 이 상태를 변경할 수 있는 기능을 갖는 계정 기반 모델에서 작동합니다.
아래 그림에서는 디지털 토큰의 소유권을 관리하고 토큰 보유자 간에 해당 토큰을 전송할 수 있는 계약의 예를 볼 수 있습니다.
계약의 처음 4줄은 블록체인에 저장된 상태를 나타냅니다.
계약의 처음 4줄은 블록체인에 저장된 상태를 나타냅니다.
전통적인 객체 지향 프로그래밍 언어로 작성된 소규모 기업용 애플리케이션에는 수천 줄의 코드가 있을 수 있지만 기업용 애플리케이션에는 쉽게 수만에서 수십만 줄의 소스 코드가 있을 수 있습니다. 예를 들어, Boeing 787의 항공전자공학 및 온라인 지원 시스템 뒤에는 650만 개의 라인이 있습니다.
코드 라인 측면에서 DApp은 일반 앱에 비해 작습니다. 간단한 DApp에는 각각 수십 줄에서 수백 줄의 코드로 구성된 몇 가지 스마트 계약이 포함될 수 있습니다. 분산형 거래소나 대출 플랫폼과 같은 보다 복잡한 DApp은 수천 줄의 코드가 포함된 여러 스마트 계약으로 구성될 수 있습니다.
결론
DApp 구축은 매년 점점 더 많은 개발자를 끌어들이는 수익성이 높은 새로운 분야입니다. 그들은 분산화의 모든 함정과 블록체인 개발의 특수성을 극복해야 함에도 불구하고 점점 더 효율적이고 사용자 친화적인 DApp을 제공할 수 있습니다. 예를 들어 휴대폰용 게임 및 애플리케이션 개발은 경쟁이 치열하고 포화 상태입니다. 블록체인 산업에서는 팀이 자리를 잡고 해당 분야에서 지배적인 플레이어가 되는 것이 훨씬 더 쉬울 수 있습니다. 그것은 유혹적입니다.