Ganache + Solidity + ERC20을 활용한 Ethereum SmartContract 배포 및 Android 통신 (1)
블록체인을 공부하면서 직접 테스트넷에 SamrtContract를 배포해 보고 싶어서 그동안 해왔던 내용들을 포스팅합니다.
사용된 것들
1. Ganache(GUI)
2. Solidity Compiler
3. web3j
4. SublimeText 와 같은 에디터 (VisualStudio Code도 좋다.)
5. Android Studio
6. Docker
Smart Contract?
본인은 스마트 컨트랙트를 이해하는 부분에서 굉장히 많은 시간을 사용했다. 스마트 컨트랙트를 테스트넷에 배포해서.. 블록체인 노드들에게 수수료가 어쩌고 어쩌고... 머리통 깨질 뻔 했다. 그런데 마침 회사에서 같이 일하시는 책임님께서 아주 좋은 비유와 함께 잘 설명해 주신 내용이 있어 이 내용을 기반으로 설명해 드리고자 한다.
일단 Smart Contract의 개념이다.
"스마트 계약 또는 스마트 컨트랙트란 블록체인 기반으로 금융거래, 부동산 계약, 공증 등 다양한 형태의 계약을 체결하고 이행하는 것을 말한다. 블록체인 2.0이라고도 한다." - 위키백과
Smart Contract는 다양한 형태로 제작, 배포될 수 있다는 점을 꼭 알아두자.
일단 Smart Contract와 이에 따른 구조를 이해하기 위해 어떤 서비스를 AWS에 배포하기 위한 과정에 비유하여 설명해 드리도록 하겠다.
기존에 우리가 사용했던 네트워크 노드와 블록체인에서 사용되는 네트워크 노드는 어떠한 차이점이 있는지 하나씩 설명해 보자면,
우리가 기존에 웹서비스를 제공했던 방식을 먼저 생각해 보자. Python이나 Nodejs나 Go lang등으로 제작된 서버(API와 같은 것들..)를 AWS에 올려놓고 사용한다고 가정한다. 우리는 AWS를 사용하기 위해 AWS를 운영하는 Amazon에 비용을 지불한다. 또한 모든 쿼리나 로그 등등의 것들은 AWS의 서버를 통해 이루어지고 저장되고 관리된다. 또한 우리는 AWS를 이용했기에 매달 비용을 지불하게 되는데(이용금액), 이러한 비용을 우리가 서비스 한 사용자들에게 수수료의 형태나 판매하여 받은 금액으로 계산을 하게 된다. (=유지비용)
그러나 Ethereum Network는 살짝 다르다. 비교를 해 보자면, AWS와 같은 Service Provider는 BlockChain의 Node들이다. 다른말로 Miner.. 우리가 아는 채굴자다. 그리고 기존의 웹서비스에서의 제작된 서버(서비스)가 Smart Contract가 되겠다.
우리는 다른 사람들이 우리가 만든 Smart Contract를 이용하게 하기 위해서는 BlockChain Node에다가 이 Smart Contract를 배포(Deploy)해야 한다. 이 과정은 기존 과정(AWS)에서 따지자면.. AWS 서버에 우리가 만든 서비스를 올리는 것이 되겠다. 비슷한 점은, AWS에 올리기 위해서는 AWS에서 제공하는 서버를 구매해야 하는 점과, Smart Contract를 BlockChain Node에다가 배포하기 위해서는 일정 금액의 Ethereum을 지불해야 한다. 아무튼, 사용자들에게 가기 까지 비용을 지불해야 하는 점은 동일하다.
조금 차이가 있다면 지금부터 설명해 드리는 내용이다. 필자가 볼드체한 내용들을 자세히 보자. AWS는 서버를 유지하기 위해 AWS에다가 제작자(배포자)가 일정 금액의 유지비를 낸다. 그러나 Ethereum에서는 이 비용을 사용자들이 충당한다. 비슷하면서도 다른 개념인데, 일종의 서버를 이용한 비용을 누구한테 내느냐.. 이것의 문제일 것이다. AWS는 사용자 - 개발자 - AWS의 순으로 지불되지만, Ethereum은 사용자 - BlockChain Node 순으로, BC Node들에게 지불이 된다. 그래서 gas라는 일정량의 수수료를 지불하게 되는 것이다. 정리를 좀 하자면, SmartContract를 배포할 때 BlockChain Node에게 일정 금액의 Ethereum을 지불하고, 이 배포된 SmartContract를 사용자들이 사용하기 위해서는 Ethereum을 수수료로써 BlockChain Node들에게 지불하게 된다. 위에서 BlockChain Node들은 채굴자(Miner)라고 했는데, 이 채굴자는, 이용자들이 SmartContract를 사용할 때 발생하는 Transaction이 정말 맞는 것인지 검증하는 과정을 거치게 된다. 검증 과정을 마치면 일종의 수고비로 Ethereum이 주어진다. 이 Ethereum이 사용자들이 지불한 수수료들로 지급된다고 생각하면 편하다. 한마디로.. 배포할 때 Ethereum을 지불하면 AWS와 같이 유지보수 비용은 들지 않는다고 생각할 수 있겠다. 애초에 서비스 제공범위가 다르긴 하지만.. 아무튼 이러이러한 구조를 가지고 있구나~ 라고만 알아두자.
그러니까.. 우리는 Ethereum 네트워크 상에 있는 SmartContract를 이용하기 위해서는 일정량의 수수료를 지불해야 하기 때문에 Ethereum을 가지고 있어야 한다.
구분 | AWS | ETHEREUM |
서비스(서버) | EC2.. S3 등등.. | Smart Contract |
최초 배포 | AWS에 직접 결제해서 지불(서버를 구매한다) | 배포자가 Ethereum을 BC Node에게 지불 |
유지보수?..(=이용금액) | 개발자가 AWS에 결제한다. | 이용자들이 BC Node 에게 지불(수수료) |
사용자들의 이용 방법 |
앱이나 웹을 통한 이용 | Smart Contract 주소로 요청 |
이용기록 (로그) |
서버 자체에 기록, 관리 (=중앙화) | BC Node에 참여한 사람들 전부. (분산 됨) (=탈중앙화) |
이렇게 둘의 비교아닌 비교로 인해 이더리움 네트워크과 Smart Contract에 대해서 어느정도 알게 되었다면 앞으로 진행할 부분에 대해서는 걱정 없어도 될 것이다.
이제 Ganache로 BC Node를 구성하고, Truffle + Solidity로 Smart Contract를 제작할 것이며, Web3j를 활용해 Ethereum Netrowk(테스트넷)와 통신을 할 것이다.
'BlockChain' 카테고리의 다른 글
댓글
이 글 공유하기
다른 글
-
Ganache + Solidity + ERC20을 활용한 Ethereum SmartContract 배포 및 Android 통신 (4)
Ganache + Solidity + ERC20을 활용한 Ethereum SmartContract 배포 및 Android 통신 (4)
2020.02.06 -
Ganache + Solidity + ERC20을 활용한 Ethereum SmartContract 배포 및 Android 통신 (3)
Ganache + Solidity + ERC20을 활용한 Ethereum SmartContract 배포 및 Android 통신 (3)
2020.02.05 -
Ganache + Solidity + ERC20을 활용한 Ethereum SmartContract 배포 및 Android 통신 (2)
Ganache + Solidity + ERC20을 활용한 Ethereum SmartContract 배포 및 Android 통신 (2)
2020.02.04