
Hardhat와 Foundry 중 선택할 때 고려해야 할 몇 가지 사항입니다.

Dapp 개발에 적합한 도구를 선택하는 것은 생산성에 영향을 미칠 뿐만 아니라, 스마트 컨트랙트의 테스트, 배포, 유지 관리의 효율성에도 직접적인 영향을 줍니다. 이 블로그에서는 이더리움 dapp 개발자들 사이에서 널리 사용되는 두 가지 도구인 Foundry와 Hardhat을 비교하며, 설치 요구 사항, 테스트 및 배포 워크플로우, 그리고 각 도구의 기술적 특성과 한계를 중점적으로 살펴봅니다.
Hardhat은 스마트 컨트랙트 개발에 필요한 작업을 관리하고 자동화할 수 있도록 설계된 검증된 개발 환경입니다. 유연하고 적응력이 뛰어난 것으로 잘 알려져 있습니다. Hardhat은 개발용으로 설계된 로컬 이더리움 네트워크인 Hardhat Network를 제공하며, 이를 통해 테스트, 배포, 디버깅을 손쉽게 수행할 수 있습니다.
개발자는 인터랙티브 콘솔을 통해 Hardhat Network에 배포된 스마트 컨트랙트와 직접 상호작용할 수 있으며, 개발 작업에 최적화된 포괄적인 로컬 환경을 제공합니다. 또한 Hardhat은 강력한 플러그인 생태계를 지원하여 기능을 손쉽게 확장할 수 있습니다. 다만, 일부 사용자는 Hardhat의 초기 설정 및 구성이 복잡하게 느껴질 수 있습니다.
반면, Foundry는 속도와 안정성을 강조하는 비교적 새로운 개발 툴킷입니다. 강력한 테스트 프레임워크인 Forge를 기반으로 구축되어 있으며, 개발자가 스마트 컨트랙트를 효율적으로 작성, 컴파일, 테스트할 수 있도록 지원합니다. Foundry의 핵심 기능 중 하나는 빠른 테스트 능력으로, Forge 테스트 프레임워크는 테스트 실행 시간을 획기적으로 단축시켜 개발자가 더 빠르게 반복 작업을 수행할 수 있게 합니다.
또한 Foundry는 개발자가 환경 내에서 직접 문제를 진단하고 수정할 수 있는 네이티브 디버깅 도구를 포함하고 있습니다. Foundry는 이더리움 생태계의 다른 도구들과도 원활하게 통합되어 보다 간소화된 개발 프로세스를 지원합니다. 다만, 비교적 새로운 도구인 만큼 기성 도구에 비해 커뮤니티 지원이 부족할 수 있습니다.
이 섹션에서는 기본적인 랜덤 합산 스마트 컨트랙트를 예시로 사용합니다. 해당 스마트 컨트랙트는 Hardhat과 Foundry 모두 동일하게 사용되지만, 프로젝트 설정은 두 프레임워크 간에 약간 다를 수 있습니다.
Hardhat을 사용하려면 먼저 컴퓨터에 Node.js가 설치되어 있어야 합니다. 설치가 완료되면 다음 단계에 따라 새 Hardhat 프로젝트를 생성할 수 있습니다:
새 Node.js 프로젝트 초기화:
Hardhat 설치:
npm install --save-dev hardhatHardhat 프로젝트 생성:
npx hardhat프롬프트에 따라 기본 프로젝트를 생성합니다. 기본 설정을 위해 "Create an empty hardhat.config.js"를 선택하세요. 샘플 프로젝트 생성을 선택하면 필요한 모든 구성이 포함된 Hardhat 환경이 설정됩니다.
컨트랙트: RandomSum 컨트랙트를 contracts 폴더에 배치하세요.
Foundry는 Rust를 사용하므로 시스템에 Rust가 설치되어 있어야 합니다. Rust가 준비되면 다음 명령어를 실행하여 Foundry를 설치할 수 있습니다:
Foundry 설치:
새 Foundry 프로젝트 초기화:
컨트랙트: RandomSum 컨트랙트를 src 디렉토리에 배치하세요.
로컬 블록체인: 테스트나 컨트랙트 배포와 같은 작업을 수행할 때 자동으로 실행되는 Hardhat Network를 사용합니다.
배포 스크립트: scripts/deploy.js 아래에 스크립트를 생성합니다:
배포 실행: 다음 명령어를 사용하여 배포를 실행합니다:
npx hardhat run scripts/deploy.js --network localhost로컬 블록체인: Foundry는 로컬 이더리움 노드인 anvil을 사용합니다. 별도의 터미널에서 다음 명령어를 실행하여 로컬 노드를 시작하세요.
anvil배포 스크립트: forge create 명령어를 직접 사용합니다:
forge create RandomSum --private-key YOUR_PRIVATE_KEY --rpc-url 네트워크 구성: hardhat.config.js에서 원하는 네트워크를 구성하고, 네트워크 설정 섹션을 추가합니다(예: Sepolia).
배포: 네트워크 옵션을 Sepolia로 변경하여 동일한 배포 스크립트를 실행합니다.
네트워크 구성: 별도의 구성 파일이 필요하지 않으며, 명령어에서 직접 네트워크를 지정합니다.
배포: 다음 명령어를 사용합니다:
forge create RandomSum --private-key YOUR_PRIVATE_KEY --rpc-url 테스트 작성: JavaScript를 사용하여 test/randomSum.js에 테스트 파일을 생성합니다:
테스트 실행: 다음 명령어를 사용하여 실행합니다:
npx hardhat test테스트 중 문제가 발생하면 @nomicfoundation/hardhat-toolbox/network-helpers에서 loadFixture 함수를 추가하세요.
loadFixture 사용의 주요 이점은 다음과 같습니다:
스냅샷으로 되돌려 각 테스트에 대한 깨끗한 환경을 설정합니다.
각 테스트마다 컨트랙트를 재배포하는 것보다 효율적입니다.
여러 테스트에 걸쳐 설정 코드를 공유할 수 있습니다.
테스트 작성: Solidity를 사용하여 test/RandomSum.t.sol에 테스트 파일을 추가합니다:
테스트 실행: 다음 명령어를 사용합니다:
forge testHardhat과 Foundry 중 어느 것을 선택할지는 팀의 역량과 프로젝트의 구체적인 요구 사항에 따라 달라집니다. 팀이 JavaScript에 능숙하고 웹 기술과의 광범위한 통합이 필요하다면 Hardhat이 더 나은 선택일 수 있습니다. 강력한 플러그인 생태계와 유연한 환경 덕분에 높은 수준의 커스터마이징과 다양한 웹 기술과의 상호작용이 요구되는 프로젝트에 이상적입니다.
반면, 스마트 컨트랙트에만 집중하여 빠른 개발 사이클이 필요한 프로젝트라면 Foundry는 Solidity 생태계 내에서 모든 것을 처리할 수 있는 매력적이고 효율적인 옵션을 제공합니다. 빠른 속도와 Solidity에 대한 네이티브 지원은 스마트 컨트랙트 개발에 전념하는 팀의 생산성을 크게 향상시킬 수 있습니다.
궁극적으로 두 도구 모두 각자의 강점이 있으며, 올바른 선택은 프로젝트의 고유한 요구 사항과 팀의 전문성에 따라 달라집니다.
AI가 번역했습니다. 오류가 있을 수 있습니다. 항상 정보를 확인하시기 바랍니다.