# Overview 블록체인 개발자의 종류 --- - 블록체인 메인넷 개발자 (블록체인 백엔드): 블록체인 메인넷 자체를 개발하는 개발자. 합의 알고리즘을 구현하고, Solidity로 개발된 smart contract가 동작할 수 있는 환경을 개발한다. 오픈소스 프로젝트를 리뷰하거나 컨트리뷰션하는 방법으로 참여할 수 있지만, 사실 직접 개발하는 것은 어려움이 있다. 이더리움을 예로 들면, 이더리움이라는 거대한 생태계를 변화시키는 것은 굉장히 까다로운 일이기 때문에 Foundation의 합의를 기반으로 업데이트가 이뤄진다. 이는 EIP (Ethereum Improvement Proposal)인데, 이 업데이트가 반영되는 것은 거의 1년에 한 번 있는 일이기 때문에 그 커다란 변화에 참여하는 것은 쉽지 않다. 대신, 메인넷보다는 기존에 있는 블록체인 기반으로 하는 것이 생태계에 편입되는 것이 더 빠를 수 있다. 예를 들어, 폴리곤은 이더리움을 fork 해서 개발한 Layer2 블록체인이다. (어떤 사람들은 수많은 블록체인들이 기존에 있는 프로젝트를 ctrl+c, ctrl+v를 한다고도 말한다) 이와 같이 메인넷이 아닌 다른 방법으로 블록체인 백엔드 개발에 참여할 수 있다. - 블록체인 스마트 컨트랙트 개발자 (블록체인 프론트엔드): 외부의 블록체인을 기반으로 한 Dapp 등을 개발할 때 블록체인 상에 정책에 대한 로직을 작성하는, 즉 smart contract 코드를 개발하는 사람이 필요하다. 구글이 안드로이드를 개발하면, 그 위에 안드로이드 기반의 어플리케이션을 개발하는 것처럼, 블록체인 네트워크가 구성되면, 그 위에서 앱을 개발할 수 있다. 예를 들어, 이더리움 또는 클레이튼 블록체인 위에서 smart contract 를 개발한다고 하면, Solidity 라는 언어로 개발하면 된다. Dapp으로 메타콩즈를 개발했다고 할 때, 2마리의 콩즈가 240 MKC 를 사용하면 하나의 베이비 콩즈가 생긴다, 하루가 지나면 4개의 MKC가 생성된다와 같은 로직들을 구현하는 일을 한다고 볼 수 있다. 이 레이어에서 원하는 로직을 작성하는 것이 앞으로 많이 필요할 수 있다. 지금은 간단한 로직들을 구성하지만 결국 이 smart contract 의 로직이 일반 소프트웨어들처럼 복잡해질 수 있다. 현재 제일 먼저 개발에 입문하기 쉬운 것은 클론코딩이므로, 성공한 Dapp 프로젝트가 있으면 따라서 개발해보는 것이 실력 향상에 도움이 될 수 있다. - Smart contract 개발은 상당히 조심스러워야 한다. 단순히 소프트웨어가 구동되고 안되고, 약간의 버그가 있는 것을 떠나서 경제와 법률 등 민감한 부분을 로직으로 구현하게 된다면 상당히 많은 부분들을 고려해야 된다. 뿐만 아니라 한번 블록체인 상에 올라간 smart contract 는 바꿀 수 없다. 또한 모든 contract 는 오픈되어있기 때문에 취약점에 대한 대비가 되어있어야 한다. [자세히](https://docs.soliditylang.org/en/latest/security-considerations.html#security-considerations) - Smart contract 에서는 gas optimization 이 중요하다. 최적화된 코드로 최소의 가스 사용량을 쓰는 것이 좋다. - IDE 는 주로 Remix 를 쓰는 것 같다. 설치없이 브라우저에서 온라인으로 사용. [자세히](https://remix.ethereum.org/#optimize=false&runs=200&evmVersion=null&version=soljson-v0.8.7+commit.e28d00a7.js) - Truffle 은 Smart Contract 를 작성하는 틀을 제공하는 프레임워크라고 볼 수 있다. 백엔드 개발을 할 때, Django 를 사용하는 것과 같다. - Openzepplin 도 Truffle 과 마찬가지로 프레임워크인데 기능이 더 많다고 한다. - Ganache 는 Smart Contract 를 개발하기 위한 Private (Virtual) Network임. - 서버 개발자: 외부에서 Smart contract를 호출하여 블록체인을 사용할 수 있는 ‘Blockchain as a Service’를 위한 개발을 하는 사람들. 예를 들어, 클레이튼의 경우 KAS (Klaytn As a Service) 라는 서비스를 제공하고 있고, 클레이튼의 내부 동작을 모른 상태에서도 일정 API call 횟수 미만만큼 (또는 비용을 지불함으로써) REST API 를 호출하여 블록체인 기반의 APP 을 개발할 수 있다. - 웹/앱 프론트엔드 개발자: 블록체인 위에서 NFT 를 발행하거나 할 때, 민팅하는 사이트를 오픈해야한다. 그리고 기본적으로 새로운 서비스를 사람들에게 공개하기 위해서 웹사이트 또는 앱을 개발하는 개발자는 필요하다. Phase 1. Tutorial --- ``` 1. Local Network 환경 구축 및 기타 개발 환경 설정 2. Python 라이브러리인 web.py 를 사용해서 네트워크 (클라이언트) 에 대한 간단한 작업 수행해보기 3. Remix 를 통해서 Local Network 환경에 예제 Smart Contract 배포하기 4. 내가 직접 Smart Contract 개발해서 배포하기 5. web.py 에서 Local Network 환경에 배포된 나의 Smart Contract 사용해보기 ``` Phase 2. Private Network with CLI --- ``` 1. Geth 를 활용한 여러 노드들 (ex. 여러 PC, AWS instance 등) 기반의 Private Network 환경 구축 2. Private Network 에서 Phase1 에서 진행했던 내용들 반복하기 3. Remix 없이 Solc 와 web3.py 를 기반으로 Solidity 파일을 컴파일하고 배포하기 4. Python 기반으로 CLI 기반의 간단한 지갑 개발하여 테스트 해보기 (나만의 Metamask 만들기) 5. CLI 기반으로 connect wallet, transfer 등을 실제 시나리오처럼 사용 후 네트워크에서 어떤 일이 벌어지는지 확인. (보안 이슈 학습하기) ``` Phase 3. Public Network with GUI --- ``` 1. Clone coding 할 타겟 설정 2. Private Network 기반환경에서 Smart Contract Clone Coding 수행하기 3. NFT 민팅사이트 Clone Coding 으로 개발 및 테스트 후 Public Network에 배포하기 4. NFT 민팅 후 Smart Contract 가 정상적으로 수행이 되는지 확인 5. 민팅한 NFT 에어드랍하기 ``` --- Etc. --- ``` 1. 온체인 데이터 분석 2. 오픈소스 분석 (Geth 등) ``` <style> html, body, .ui-content { background-color: #333; color: #ddd; } .markdown-body h1, .markdown-body h2, .markdown-body h3, .markdown-body h4, .markdown-body h5, .markdown-body h6 { color: #ddd; } .markdown-body h1, .markdown-body h2 { border-bottom-color: #ffffff69; } .markdown-body h1 .octicon-link, .markdown-body h2 .octicon-link, .markdown-body h3 .octicon-link, .markdown-body h4 .octicon-link, .markdown-body h5 .octicon-link, .markdown-body h6 .octicon-link { color: #fff; } .markdown-body img { background-color: transparent; } .ui-toc-dropdown .nav>.active:focus>a, .ui-toc-dropdown .nav>.active:hover>a, .ui-toc-dropdown .nav>.active>a { color: white; border-left: 2px solid white; } .expand-toggle:hover, .expand-toggle:focus, .back-to-top:hover, .back-to-top:focus, .go-to-bottom:hover, .go-to-bottom:focus { color: white; } .ui-toc-dropdown { background-color: #333; } .ui-toc-label.btn { background-color: #191919; color: white; } .ui-toc-dropdown .nav>li>a:focus, .ui-toc-dropdown .nav>li>a:hover { color: white; border-left: 1px solid white; } .markdown-body blockquote { color: #bcbcbc; } .markdown-body table tr { background-color: #5f5f5f; } .markdown-body table tr:nth-child(2n) { background-color: #4f4f4f; } .markdown-body code, .markdown-body tt { color: #eee; background-color: rgba(230, 230, 230, 0.36); } a, .open-files-container li.selected a { color: #5EB7E0; } </style>