# 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>