---
# System prepended metadata

title: 개발 환경

---

개발 환경
===

개발 툴
---
- Hardhat
    - Truffle과 같은 기능을 제공하고, 실제 이더리움 상태 (실제 블록들 등) 환경을 fork 해서 테스트 환경을 만들 수 있음. 
    - 예를 들어, 현재 Uniswap 의 상태를 그대로 가져와서 Defi 를 테스트하고 싶다할 때, 유용하게 쓰일 수 있음. 
    - Solidity 언어 개발 시 불편한 점은 print 를 찍어볼 수 없다는 것인데 event 을 활용해서 디버깅을 하게 되는데, Hardhat 을 사용하면 javascript 처럼 console.log 로 프린트를 찍어볼 수 있는 장점이 있음. 
    - 큰 규모의 프로젝트를 할 때는 hardhat 을 사용하고 있음. (truffle 은 작은 프로젝트용이라고 보면 됨) 
- Truffle
    - test code 를 javascript 로 작성할 수 있기 때문에 복잡한 테스트는 truffle 을 사용하면 됨. 
- Remix
    - Remix 도 테스트 코드를 작성하고 테스트 할 수 있는 환경이 제공되고 있음. input 을 넣었을 때 적절히 state 변화가 발생하는지 확인할 수 있음. 
- Ganache
    - 이더리움 테스트넷이나 메인넷에 배포를 하기 전에 개인 환경에서 간단한 이더리움 로컬 프라이빗 네트워크를 구성하고 테스트를 해볼 수 있는 프로그램. GUI 와 CLI 버전 모두 사용할 수 있고, Remix 를 사용할 경우 Local Environment 로 타겟 네트워크를 설정하면 컴파일 후 배포를 할 수 있음.
- Infura
    - 스마트 컨트랙트를 배포할 때, 오픈되어 있는 특정 네트워크를 사용할 수 있음. 이렇게 하는 이유는 내가 프라이빗 노드를 구축하거나 개인 로컬 네트워크를 구축하거나 테스트넷을 싱크받아서 사용하는 것보다 Infura 같은 플랫폼을 이용하면 손쉽게 배포할 수 있음.


*여담으로 Truffle, Remix, Ganache, Infura 같은 툴을 개발하는 기업은 ConsenSys 라는 기업으로, 블록체인 관련 인프라를 구축하는 기업이라고 한다.*

개발 환경을 구축해보자
---

### Truffle 다운받기
[Truffle Official Doc](https://trufflesuite.com/docs/truffle/)
```
OS: Mac OS X (Catalina, Macbook Air 2014 Early)
```

```zsh
$ npm -v
8.3.1
$ sudo npm install -g npm
$ npm -v
8.7.0
$ npm install -g truffle

```
 
*TroubleShooting 1: 설치 중에 Unsupported architecture 라는 에러가 뜨면서 멈췄다. 이 경우에는 node 를 14버전으로, npm을 6 버전으로 downgrade 하면 해결된다고 한다. [출처](https://github.com/trufflesuite/truffle/issues/4683)*

다시 도전
```zsh
# TroubleShooting 1

$ npm install -g npm@6
$ npm audit fix # fix 2 vunerablities
$ npm install -g n # install node version manager
$ sudo n 14
$ npm uninstall -g truffle
$ npm install -g truffle
```

개발 환경 초기화하기
```zsh
$ truffle unbox metacoin # install a sample project

$ truffle init # install a bare project
```

컴파일 및 테스트 수행
```zsh
$ truffle compile
$ truffle migrate
$ truffle test
```