애플리케이션-특화(Application-Specific) 블록체인의 중요성
번역날짜: 2018/07/03
코스모스는 개발자들이 확장성(scalable)과 상호운용성(interoperability)을 가진 애플리케이션-특화(application-specific) 블록체인을 쉽게 만들 수 있게 해줍니다. 그렇다면 정확히 “애플리케이션-특화” 블록체인은 무엇을 의미하는 것일까요? 나아가 사람들은 왜 자신들의 탈중앙화 애플리케이션(dapp)을 애플리케이션-특화 블록체인이 되게끔 만들어야 할까요? 많은 분들이 궁금해하는 질문들에 대한 답을 이 글에서 차근차근 살펴봅시다!
애플리케이션-특화 블록체인이란 무엇인가?
오늘날 대부분의 탈중앙화 애플리케이션(dapp)들은 이더리움(Ethereum)과 같이 이미 존재하는 블록체인 위에 만들어집니다. 이것이 dapp을 만드는 가장 쉽고 효율적인 방법이기 때문입니다.
텐더민트와 코스모스는 탈중앙화 애플리케이션(dapp)을 만드는 새로운 방법을 제안합니다. 블록체인의 세 가지 레이어(네트워킹, 컨센서스, 애플리케이션) 중 애플리케이션 레이어를 가상머신이 아닌 dapp으로써 존재할 수 있게끔 해줍니다. 즉, 과거에는 블록체인의 애플리케이션 레이어를 가상머신을 통해 한 단계 거쳐서 구현할 수 있었다면 텐더민트와 코스모스의 등장으로 직접 구현할 수 있게 된 것입니다. 이러한 특징을 가진 블록체인을 우리는 “애플리케이션-특화” 블록체인이라고 부릅니다.
※ CØSMOS Korea 보충설명: 생각해보면 이더리움(Ethereum)기반의 dapp은 모두 가상머신의 스마트계약을 통해 만들어집니다. 그 동안은 이것이 가장 쉽고 효율적인 방법이었기 때문입니다. 하지만, 코스모스-SDK의 등장으로 가상머신의 스마트계약을 통해서가 아니라 모듈화된 개발 툴을 사용하여 dapp을 직접 개발할 수 있게 된 것입니다. 참고로, 코스모스의 개발이 늦어진 주요 이유 중 하나가 고도화된 SDK(Software Development Kit) 때문입니다. 만들기는 너무 어렵지만, 한번 제대로만 만들면 기존의 dapp개발 방식을 근본적으로 바꿀 어마어마한 기능입니다.
그 동안 애플리케이션-특화 블록체인들이 파괴력이 없었던 이유는 블록체인 자체를 만드는 일이 너무 어려웠기 때문입니다. 이전까지는 사람들이 블록체인을 만들기 위해 기존에 존재하는 블록체인의 코드를 포킹(forking)했습니다. 하지만 앞으로는 아닙니다. 텐더민트와 코스모스-SDK의 등장으로 블록체인을 만드는 일은 몇 개의 모듈을 코딩하는 수준으로 쉬워졌습니다. 여기서 잠깐. 아래의 글을 더 읽기 전에 먼저 이 글을 읽기를 추천합니다. 앞의 내용에 대해 더 자세하게 설명한 글입니다.
애플리케이션-특화 블록체인에 대해 알아봤으니, 이제 왜 dapp을 가상머신(VM) 블록체인 위에서 만들 것이 아니라 애플레케이션-특화 블록체인이 되게끔 만들어야 하는지에 대해 알아봅시다.
성능(Performance)
앞서 언급한 것과 같이 블록체인은 세 가지 레이어로 나눠질 수가 있습니다. 네트워킹(networking), 컨센서스(consensus), 그리고 애플리케이션(application) 레이어입니다. 네트워킹(networking)과 컨센서스(consensus) 레이어를 책임지는 텐더민트 컨센서스 엔진은 초당 수백 건의 트랜잭션을 처리할 수 있습니다. 다시 말해, 개발자들은 블록체인의 핵심적인 세 가지 레이어 중 두 가지는 텐더민트 컨센서스 엔진에게 맡기면 됩니다. 남은 한 가지 레이어, 즉 애플리케이션(application) 레이어만 책임지고 개발하면 되는 것입니다.
탈중앙화 애플리케이션(dapp)을 이미 존재하는 블록체인 위의 애플리케이션이 아닌 독자적인 블록체인으로 만든다는 것은 당신이 오직 트랜잭션 종류와 상태 변환 기능(state transition function)들만 정하면 된다는 뜻입니다. 이것은 애플리케이션의 성능(performance)을 월등히 향상합니다.
안전성(Security)
가상머신(VM) 블록체인은 공격당할 범위가 넓습니다. 이것은 가상머신 자체가 워낙 복잡하기 때문입니다. 참고로, 가상머신의 복잡성 때문에 call stack limit (DAO버그), DelegateCall (Parity 버그#1), contract suicide (Parity 버그#2)과 같은 버그들이 발생합니다. 반면 애플리케이션-특화 블록체인은 오직 애플리케이션의 각 부분이 서로 어떻게 상호작용하는지만 관리하면 됩니다. 즉, 애플리케이션 레이어 내에서의 보안 및 안전성만 유지하면 됩니다. 애플리케이션 레이어와 가상머신의 상호작용에 대해서는 신경을 쓰지 않아도 됩니다.
코스모스-SDK는 여기에 그치지 않고 한발 더 나아갑니다. Object capabilities라는 개념을 기반으로 하는 또 다른 보안 메커니즘을 제공합니다. 하지만, 어떤 framework도 애플리케이션 내에서 일어나는 보안상 문제점들을 완벽하게 막아주지는 못합니다. 결국 애플리케이션의 보안은 개발자들에게 최종 책임이 있습니다. 다만, 애플리케이션-특화 블록체인들은 나쁜 상황이 발생할 경우를 대비하여 더 많은 복구옵션을 제공 할 수 있습니다.
자주성(Sovereignty)
애플리케이션-특화 블록체인을 퍼블릭(Proof-Of-Stake)체인 또는 프라이빗(Proof-Of-Authority)체인으로 개발할지 당신이 직접 정할 수 있습니다. 두 경우 모두 검증인(validator)들은 애플리케이션과 관련된 트랜잭션만 검증(validate)합니다. 즉, 거버넌스(거버넌스는 검증인들이 투표를 통해 결정함)는 당신의 애플리케이션으로만 한정되고 다른 애플리케이션과는 겹치지(overlap) 않습니다. 이 때문에 당신의 애플리케이션에 문제가 발생할 경우 거버넌스는 생태계의 다른 애플리케이션들은 건드리지 않고 오직 해당 애플리케이션의 문제만 해결할 것입니다.
이에 반해 가상머신(VM) 블록체인 위에서 만들어진 dapp에 문제가 생겼을 경우, 기반이 되는 블록체인의 거버넌스가 동의를 하지 않을 경우 문제를 해결할 수 없습니다. 단적인 예가 바로 Parity 다중서명(multisig) 해킹입니다. 이더리움(Ethereum) 블록체인의 가상머신(EVM)을 기반으로 만들어진 애플리케이션이 해킹을 당해서 자산이 도둑맞아도 이더리움 커뮤니티의 동의가 없을 경우 탈취당한 자산을 복구할 방법은 존재하지 않습니다.
유연성(Flexibility)
가상머신(VM) 블록체인 위에서 애플리케이션을 구현하는 개발자들은 기반이 되는 블록체인의 개발 환경(development environment)의 제약을 받습니다. 이더리움(Ethereum) 개발자의 경우 Solidity 또는 Serpent 프로그래밍 언어만을 사용해야 합니다. 또한 가상머신 자체의 한계 때문에 여러 제약을 받기도 합니다. 예를들어, 대부분의 가상머신(VM) 블록체인들은 자동 상태 변환(automatic state transition)을 허용하지 않습니다. 모든 상태 변환(state transition)은 최종 사용자(end user)가 트랜잭션을 보내는 것으로 작동(trigger)됩니다. 물론 가상머신(VM) 블록체인을 기반으로 애플리케이션을 개발하는 경우에는 이러한 특징을 감안하고 사용하는 것이기는 하나 개발자에게는 성가신 문제가 될 수 있습니다.
애플리케이션-특화 블록체인은 이에 비교해 더 많은 유연성(flexibility)을 제공합니다. 첫째, 개발자는 자신이 선호하는 프로그래밍 언어를 선택할 수 있습니다. 텐더민트 엔진 위에 ABCI-애플리케이션으로 애플리케이션-특화 블록체인을 만들 경우 이것이 가능합니다. 하지만 애플리케이션-특화 블록체인을 처음부터 개발하는 것은 어려울 수 있습니다. 이것이 바로 코스모스-SDK가 존재하는 이유입니다. 현재 코스모스-SDK는 Golang으로만 이용 가능합니다. 그러나 앞으로는 다른 언어로 된 SDK가 나올 겁니다. LotionJS와 같이 개발자가 Javascript로 텐더민트 기반의 블록체인 애플리케이션을 개발할 수 있게 해주는 framework도 존재합니다.
애플리케이션-특화 블록체인이 개발자에게 제공하는 두 번째 유연성은 자동 상태 전환(automatic state-transition)을 작동(trigger)시키는 기능입니다. ABCI에는 BeginBlock과 EndBlock이라는 두 가지 메시지가 있습니다. BeginBlock()과 EndBlock() 함수는 각각 블록의 처음과 끝에서 자동으로 실행됩니다. 개발자는 연산이 너무 많아 애플리케이션을 끝이 없는 루프에 노출시키지 않도록 주의해야 합니다. 그러나 이것만 주의하면 위의 기능은 매우 유용할 수 있습니다.
가상머신(Virtual-machine) 블록체인
우리는 지금까지 애플리케이션-특화 블록체인의 장점에 관해 설명했습니다. 그러나 오해하시면 안됩니다. 어떠한 dapp도 가상머신(VM) 블록체인 위에 만들면 안 된다는 뜻은 아닙니다. 각각의 framework는 장점과 단점을 가지고 있으며 개발자들은 가장 잘 맞는 것을 선택해서 개발해야 합니다. 아래는 dapp을 가상머신(VM) 블록체인 위에 만드는 것이 더 바람직한 경우들입니다. 참고하시기 바랍니다.
- 소형, 저용량 애플리케이션 또는 프로토타입의 경우 가상머신(VM)은 실용적이고 사용자 친화적입니다. 가상머신(VM) 개발자들이 애플리케이션을 고작 몇 분 만에 deploy할 수 있도록 해줍니다. 물론 애플리케이션이 복잡하지 않거나 단순 개념증명(Poof-of-Concept)인 경우에만 해당합니다.
- 당신의 애플리케이션에 검증인 집합(validator set)을 사용하고 싶지 않을 경우. 가상머신(VM) 블록체인은 애플리케이션 개발자를 대신하여 컨센서스를 운영해줍니다. 그러므로 당신이 네트워크를 deploy하는 것에 관심이 없다면 애플리케이션-특화 블록체인보다는 가상머신(VM) 블록체인이 더 적합합니다. 참고로, 코스모스에서는 추후 검증인 집합을 공유(share)할 수 있도록 지원할 예정입니다. 이럴 경우, 검증인과 관련된 일들은 신경 쓰지 않고 애플리케이션을 deploy시킬수 있습니다.
- 만약 최종 사용자(end-user)가 개인의 용도를 위해 애플리케이션에 맞춤 로직(custom logic)을 추가해야 할 경우
결론
애플리케이션-특화(application-specific) 블록체인은 개발의 어려움 때문에 그동안 많은 주목을 받지 못했습니다. 하지만 코스모스 덕분에 이제는 확장성(scalable)과 상호운용성(interoperability)을 가진 애플리케이션-특화 블록체인을 쉽게 만들 수 있습니다. 오늘부터 당신의 탈중앙화 애플리케이션(dapp)을 코스모스-SDK를 통해 만들어 보세요!
Sunny Aggarwal, Chjango Unchained, 그리고 Jordan Bibla에게 감사합니다.
Cøsmos Korea 🇰🇷
※이 글은 Cosmos팀의 동의 하에 번역된 글입니다.
※번역글에 대한 무단 도용 및 배포는 허락하지 않습니다. 아래는 원문링크, 저자, 그리고 작성날짜입니다.
원문링크: https://blog.cosmos.network/why-application-specific-blockchains-make-sense-32f2073bfb37
원문저자: Gautier MARIN
원문날짜: 2018/04/03