본문으로 건너뛰기

Hardhat을 사용하여 스마트 계약을 생성하고 배포하는 방법

업데이트 날짜:
2025년 11월 26일

읽는 데 6분

개요

Hardhat과 같은 이더리움 개발 환경을 활용하면 스마트 계약 및 이더리움 노드를 더 쉽게 다룰 수 있습니다. 이러한 환경은 스마트 계약을 원활하게 작성, 테스트 및 배포할 수 있는 일련의 도구를 제공합니다. 이 가이드에서는 Hardhat과 Quicknode를 사용하여 ‘Hello World’ 스마트 계약을 생성하고, 이를 Sepolia 테스트넷에 배포해 보겠습니다.

필수 조건


  • Quicknode 계정 ( 여기에서 무료로 생성하세요)
  • EVM 호환 지갑 (예: MetaMask)
  • Node.js 설치됨
  • 안전모 착용 (이 부분도 가이드에서 다루겠습니다)
  • CLI/터미널 창
  • 코드 또는 텍스트 편집기 (예: VSCode)
  • Sepolia 테스트넷의 ETH ( Quicknode 멀티체인 페이크를 통해 무료로 일부를 받을 수 있습니다)

하드햇이란 무엇인가요?

Hardhat은 개발자가 이더리움 애플리케이션을 컴파일, 배포, 테스트 및 디버깅할 수 있도록 지원하는 개발 환경입니다. 이 환경은 가장 간결하고 상세한 문서를 갖추고 있습니다. 또한 Hardhat은 디버깅을 위해 자바스크립트와 유사한 console.log() 기능을 제공합니다. 아울러 다양한 플러그인을 통해 기능을 더욱 확장할 수 있습니다.

Hardhat 및 기타 종속성 설치

node.js에 포함된 npm을 사용하여 Hardhat을 설치하겠습니다. 

먼저, 새 프로젝트 디렉터리를 생성하고 해당 디렉터리로 이동하세요. 여기서는 원하는 이름을 자유롭게 사용해도 됩니다:

mkdir HardhatTutorial
cd HardhatTutorial

프로젝트 디렉터리에서 터미널/cmd를 열고 다음 명령어를 입력하세요.

npm init --y
npm install --save-dev hardhat

Hardhat을 설치했으니 이제 새로운 Hardhat 프로젝트를 시작해 봅시다. 이를 위해 npx를 사용할 것입니다. npx는 Node.js 실행 파일을 처리하는 데 도움을 줍니다. 

npx hardhat init

CLI Hardhat 인터페이스가 표시됩니다. “Create an empty hardhat.config.js”를 선택한 다음 Enter 키를 누르세요.

안전모 초기화

자, 이제 Hardhat을 사용하기 위해 필요한 다른 종속성을 설치해 봅시다.

npm install --save-dev @nomiclabs/hardhat-ethers ethers @nomiclabs/hardhat-waffle ethereum-waffle chai

계약에 대한 자동화 테스트를 작성하려면 이러한 종속성이 필요합니다.

npm을 사용하여 패키지를 설치할 때 가장 흔히 발생하는 문제는 `node-gyp`의 내부 오류일 수 있습니다. 여기에서 node-gyp 설치 안내를 확인하실 수 있습니다.

참고: node-gyp 관련 문제가 발생할 경우, 사용 중인 파이썬 버전이 위 지침에 나열된 호환 가능한 버전 중 하나와 일치해야 합니다. 

또 다른 흔한 문제는 캐시가 오래되어 갱신되지 않은 경우입니다. 터미널에 아래 명령어를 입력하기만 하면 npm 캐시를 지울 수 있습니다:

npm cache clean

자, 이제 지갑용 개인 키와 가스 비용으로 사용할 테스트용 ETH, 그리고 이더리움 노드를 준비해 봅시다. 이 모든 것이 스마트 계약을 배포하는 데 필요합니다.

개인 키 생성/조회

스마트 계약 배포 비용을 지불하려면 이더리움 지갑이 필요합니다.

지갑을 생성하고 개인 키를 확인했다면, 다음 섹션에서 이를 Hardhat 구성 파일(예: hardhat.config.js)에 추가할 것입니다.

Quicknode 가이드를 참고하여 JavaScript, Ruby, Python, Go, PHP에서 개인 키와 이더리움 주소를 생성할 수 있습니다.

MetaMask 지갑에서 개인 키를 가져오려면 다음 지침을 따르세요:


  • 브라우저에서 스타일리시한 여우 머리 모양의 MetaMask 아이콘을 클릭하세요. 아이콘이 보이지 않으면 브라우저의 ‘확장 프로그램’ 페이지를 확인해 보세요.
  • 기호를 클릭한 다음 ‘계정 정보’를 선택하세요.
  • 그런 다음 ‘개인 키 표시’를 클릭하고 안내에 따라 진행하세요.

MetaMask 개인 키

개인 키를 복사하여 저장하세요. 이후 단계에서 이 키가 필요할 것입니다.

개인 키와 같은 민감한 정보는 .env 파일에 저장한 뒤 환경 변수를 통해 설정 파일에 불러오거나, 개발 용도로만 사용할 새로운 보조 MetaMask 지갑을 생성하는 것이 좋습니다.

테스트넷 ETH 획득하기

저희는 Sepolia 테스트넷에 계약을 배포할 예정입니다. 시작하기 위해서는 지난 단계에서 살펴본 대로 MetaMask 지갑에 테스트용 ETH가 일부 있어야 합니다.

Quicknode 멀티체인 페이크트로 이동하여 지갑을 연결하거나 지갑 주소를 입력하세요. 이더리움 체인과 세폴리아 네트워크를 선택한 다음 자금을 요청해야 합니다.

참고: 이 파우셋을 이용하려면 이더리움 메인넷에 최소 0.001 ETH의 잔액이 있어야 합니다.

Quicknode 멀티체인 페이크트

Quicknode 이더리움 엔드포인트 설정하기

이더리움 세폴리아(Sepolia) 블록체인에 우리 스마트 계약을 배포하려면 이더리움 세폴리아 노드에 접속할 수 있어야 합니다. 이를 위해 Geth나 OpenEthereum(구 Parity)과 같은 거의 모든 이더리움 클라이언트를 사용할 수 있습니다. 하지만 단일 계약을 배포하는 데는 이 방법이 다소 번거로우므로, 여기에서 무료 Quicknode 계정을 생성하고 간편하게 이더리움 엔드포인트를 생성해 보겠습니다. 무료 이더리움 세폴리아 엔드포인트를 생성한 후에는, 다음 섹션에서 필요하게 될 HTTP 제공자 URL을 잘 보관해 두세요.

Quicknode Sepolia 엔드포인트 스크린샷

설정 파일 설정하기

hardhat.config.js 파일을 열고 다음 내용을 붙여넣으세요:

require("@nomiclabs/hardhat-waffle");

const endpointUrl = "ADD_YOUR_QUICKNODE_URL_HERE";
const privateKey = "ADD_YOUR_PRIVATE_KEY_HERE";

module.exports = {
solidity: "0.8.21",
networks: {
sepolia: {
url: endpointUrl,
accounts: [privateKey],
},
},
};

ADD_YOUR_PRIVATE_KEY_HERE를 이전 단계에서 얻은 개인 키로, ADD_YOUR_QUICKNODE_URL_HERE를 이전 단계에서 얻은 HTTP 노드 URL로 각각 대체한 후 파일을 저장하십시오.

위 코드에 대한 설명:

  • 1행: hardhat-waffle 패키지 가져오기.

  • 3~4행: 종단점 URL 및 개인 키 정의.

  • 6~14행: Solidity 버전을 명시하고 sepolia 네트워크를 정의합니다.

계약서 작성

이제 계약을 위해 ‘contracts’라는 새 디렉터리를 만들고, 그 안에 ‘HelloWorld.sol’이라는 새 파일을 생성하세요.

mkdir contracts && echo > contracts/HelloWorld.sol

다음 코드를 HelloWorld.sol 솔리디티 파일에 복사하여 붙여넣으세요:

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

contract HelloWorld {

string saySomething;

constructor() {
saySomething = "Hello World!";
}

function speak() public view returns(string memory) {
return saySomething;
}
}

위 코드에 대한 설명:


  • 1행: SPDX 라이선스 유형을 지정합니다. 이는 Solidity ^0.6.8 이후 추가된 내용입니다. 

스마트 계약의 소스 코드가 공개될 때마다, 이러한 라이선스는 저작권 문제를 해결하거나 예방하는 데 도움이 될 수 있습니다. 라이선스 유형을 명시하고 싶지 않다면, ‘UNLICENSED’라는 특수 라이선스를 사용하거나 해당 주석 전체를 생략할 수 있습니다(이 경우 오류는 발생하지 않으며, 단지 경고만 표시됩니다).

  • 2행: Solidity 버전 선언.

  • 4행: “”라는 이름의 계약을 시작합니다. HelloWorld.

  • 6행: 변수 생성 saySomething 문자열 유형의.

  • 8~10행: 생성자를 호출하고 “Hello World!”라는 문자열을 saySomething 변수.

  • 12~14행: 다음과 같은 함수 생성 말하다 public 타입으로, 이 메서드는 에 저장된 문자열을 반환합니다. saySomething 변수.

파일을 저장한 후, 다음 Hardhat 명령어를 사용하여 계약을 컴파일하세요.

npx hardhat compile

계약이 성공적으로 컴파일되면 다음과 같은 결과가 출력됩니다:

컴파일 결과

Hello World 스마트 계약 배포하기

이제 계약을 배포하기 위해, ‘scripts’라는 새 디렉터리에 deploy.js 파일을 만들어 봅시다.

mkdir scripts && echo > scripts/deploy.js

다음 내용을 deploy.js 파일에 복사하여 붙여넣으세요:

async function main() {

const [deployer] = await ethers.getSigners();

console.log(
"Deploying contracts with the account:",
deployer.address
);

const HelloWorld = await ethers.getContractFactory("HelloWorld");
const contract = await HelloWorld.deploy();

console.log("Contract deployed at:", contract.address);

const saySomething = await contract.speak();

console.log("saySomething value:", saySomething);
}

main()
.then(() => process.exit(0))
.catch(error => {
console.error(error);
process.exit(1);
});

위의 코드에 대한 설명.

  • 1행: 다음과 같은 이름의 비동기 함수를 시작합니다. 메인.

  • 3행: 트랜잭션에 서명할 이더리움 주소를 가져와 배포자 주소에 저장합니다. 

  • 5~8행: 이더리움 주소와 문자열을 콘솔에 출력합니다.

  • 10행: ethers.js 메서드 호출 ContractFactory. 이렇게 하면 HelloWorld.sol 파일을 읽고, 우리가 사용할 수 있는 인스턴스를 반환합니다 ContractFactory 메서드 활성화.

  • 11행: deploy 호출 ContractFactory 계약을 배포하려면. 

  • 13행: 배포된 계약의 주소를 콘솔에 출력합니다.

  • 15행: 함수 호출 말하다 배포된 계약의.

  • 17행: 함수의 반환값 출력 말하다 콘솔로.

  • 20행: 함수 호출 메인.

  • 21~24행: 오류 여부를 확인하고, 오류가 있으면 출력한 뒤 프로세스를 종료합니다.

파일을 저장한 후 다음 명령을 실행하여 계약을 배포하십시오.

npx hardhat run scripts/deploy.js --network sepolia

계약의 배포가 성공적으로 완료되면, 배포된 계약의 주소와 speak 함수의 반환값인 saySomething의 값이 포함된 출력 결과를 확인할 수 있습니다.

배포 결과

Sepolia Etherscan의 검색창에 배포된 계약서의 주소를 복사하여 붙여넣으면 배포 여부를 확인할 수 있습니다. 그러면 배포된 계약서에 대한 정보가 표시됩니다.

Etherscan 결과

결론

자, 이제 다 배웠습니다! 이제 Hardhat을 사용하여 스마트 계약을 생성, 컴파일 및 배포하는 기본 사항을 마스터하셨습니다. 하지만 이게 전부가 아닙니다. Hardhat은 코드를 테스트하고 디버깅할 수 있는 도구도 제공합니다. 더 자세히 알아보시려면 Hardhat의 공식 문서를 확인해 보세요.

이더리움에 관한 더 많은 기사와 가이드를 받아보시려면 뉴스레터를 구독해 주세요. 궁금한 점이 있으시면 Discord의 전용 채널을 이용하시거나 아래 양식을 통해 의견을 보내 주시기 바랍니다. Twitter와 Telegram 공지 채널을 팔로우하여 최신 소식을 놓치지 마세요.

여러분의 피드백을 ❤️ 환영합니다!

의견이나 다루었으면 하는 새로운 주제가 있다면 알려주세요. 여러분의 의견을 기다리고 있습니다.

이 가이드를 공유하세요