개발 환경 설치와 점검
지금까지는 이 사이트의 브라우저 에디터에서 Solidity 코드를 작성하고 Run 을 눌러 컴파일했습니다. 편리하지만 한계가 뚜렷합니다. 브라우저 컴파일러는 코드가 문법에 맞는지까지만 확인해 줄 뿐, 컨트랙트를 배포하거나 함수를 호출해 볼 수는 없습니다.
이번 랩에서는 그 다음 단계로 넘어갑니다. 내 컴퓨터에 실제 개발 환경을 설치하고, 지금까지 브라우저가 대신 해 주던 컴파일을 직접 실행해 봅니다. 표준 도구는 Hardhat 3 입니다.
이 레슨부터는 채점이 다릅니다. 로컬 환경 작업은 브라우저가 확인할 수 없으므로, 각 단계를 직접 해 보고 "무엇이 보이면 성공인지"를 눈으로 확인한 뒤 아래 체크리스트에 표시하면 완료됩니다.
1단계 — Node.js 확인
Hardhat 은 Node.js 위에서 동작합니다. 터미널을 열고 설치 여부와 버전을 확인합니다.
node -v
npm -vv22. 이상이 나와야 합니다. 버전이 낮거나 명령을 찾을 수 없다는 오류가 나오면 nodejs.org 에서 LTS 버전을 먼저 설치하세요.
2단계 — 프로젝트 폴더 만들기
작업할 빈 폴더를 하나 만들고 그 안으로 이동합니다. 폴더 이름은 자유지만 공백과 한글은 피하는 편이 안전합니다.
mkdir solidity-lab
cd solidity-lab3단계 — Hardhat 3 프로젝트 생성
반드시 빈 폴더 안에서 아래 명령을 실행합니다. 다른 파일이 있는 폴더에서 초기화하면 설정이 꼬이거나 기존 파일과 충돌할 수 있습니다.
npx hardhat --init --template mocha-ethers--template mocha-ethers 를 붙였기 때문에 아무것도 묻지 않고 바로 설치됩니다.
Dependencies installed 와 Project initialized 가 차례로 출력되면 끝입니다. 폴더 구조는 이렇게 생깁니다.
solidity-lab/
├── contracts/ # .sol 파일을 두는 곳 (Counter.sol, Counter.t.sol)
├── test/ # 테스트 코드 (Counter.ts)
├── scripts/ # 배포·호출 스크립트 (다음 랩에서 사용)
├── ignition/ # 배포 모듈 (이 과정에서는 쓰지 않습니다)
├── hardhat.config.ts # Hardhat 설정
└── package.json--template mocha-ethers 를 빼먹지 마세요. 플래그 없이 npx hardhat --init 만 실행하면 대화형
마법사가 뜨고, 기본값으로 넘기면 viem 기반 템플릿이 설치됩니다. 이 과정은 뒤에서 ethers.js
를 쓰므로 템플릿이 다르면 다음 랩의 스크립트가 그대로 동작하지 않습니다. 이미 잘못 만들었다면
폴더를 지우고 다시 시작하는 편이 빠릅니다.
4단계 — 컴파일하기
이제 브라우저가 대신 해 주던 그 일을 내 컴퓨터에서 직접 합니다.
npx hardhat compilecontracts/ 폴더의 모든 .sol 파일을 찾아 컴파일하고, 결과물(ABI 와 바이트코드)을 artifacts/ 폴더에 저장합니다. 이 artifacts/ 가 다음 랩에서 배포에 쓰일 재료입니다.
출력은 이런 형태입니다. 파일 개수와 solc 버전은 템플릿 버전에 따라 다를 수 있습니다.
Compiled 2 Solidity files with solc 0.8.34 (evm target: osaka)컴파일러 버전은 hardhat.config.ts 의 solidity 항목에서 정합니다. 이 과정에서는 0.8.20 이상이면 충분합니다. 컨트랙트의 pragma solidity ^0.8.20; 과 설정된 버전이 맞지 않으면 컴파일이 실패하니, 오류가 나면 이 둘을 먼저 확인하세요.
이미 컴파일한 뒤 다시 실행하면 No contracts to compile 이 나오는데, 바뀐 파일이 없다는 뜻이라 정상입니다.
5단계 — 기본 테스트 실행
Hardhat 이 만들어 준 예제 테스트를 실행해 봅니다.
npx hardhat test마지막 줄에 통과 개수가 나옵니다.
5 passing (3 solidity, 2 mocha)Hardhat 3 는 두 종류의 테스트를 함께 돌립니다. contracts/Counter.t.sol 은 Solidity 로 쓴 테스트이고, test/Counter.ts 는 JavaScript(Mocha) 로 쓴 테스트입니다. 그래서 결과가 3 solidity, 2 mocha 로 나뉘어 표시됩니다.
테스트가 통과하면 컴파일러부터 테스트 러너까지 전체 도구 사슬이 정상이라는 뜻입니다.