스마트 컨트랙트와 상호작용하기
작성자: Alchemy Team
이 튜토리얼 (스마트 컨트랙트와 상호작용하기)을 시작하기 전에, 1부 — Hello World Smart Contract (스마트 컨트랙트를 만들고 배포하기)를 완료해야 합니다. 3부에서는 Etherscan에 컨트랙트를 제출하는 방법을 다뤄서 누구든 이 컨트랙트와 상호작용하는 방법을 알 수 있도록 할 것입니다!
2부: 스마트 컨트랙트와 상호작용하기
ropsten 네트워크에 스마트 컨트랙트를 성공적으로 배포했으니, 이제 web3 실력을 시험해보고 컨트랙트와 상호작용해봅시다!
1단계: interact.js 파일 만들기
이 파일에 상호작용 스크립트를 작성할 것입니다. 1부에서 설치한 Ethers.js 라이브러리를 사용합니다.
hardhat 튜토리얼의 경우 scripts/ 폴더 안에, Truffle 튜토리얼의 경우 홈 디렉터리에 interacts.js이라는 새 파일을 만들고 다음 코드를 추가하세요:
2단계: .env 파일 업데이트
새로운 환경 변수를 사용할 것이므로, .env 파일에 이를 정의하고 dotenv 모듈이 이 변수들을 로드하도록 해야 합니다.
Alchemy API\_KEY와 스마트 컨트랙트가 배포된 CONTRACT\_ADDRESS에 대한 정의를 추가해야 합니다.
.env 파일은 대략 다음과 같은 형태가 되어야 합니다:
3단계: 컨트랙트 ABI 가져오기
컨트랙트 ABI (Application Binary Interface)는 스마트 컨트랙트와 상호작용하기 위한 인터페이스입니다. Contract ABI에 대해 더 알고 싶다면 eth_getLogs 상세 가이드를 참고하세요. Hardhat (그리고 Truffle)은 자동으로 ABI를 생성하여 HelloWorld.json 파일에 저장합니다.
이를 사용하려면 contract-interact.js 파일에 다음 코드를 추가해서 내용을 파싱해야 합니다:
ABI를 확인하고 싶다면 콘솔에 출력할 수 있습니다:
interact.js을 실행하여 ABI가 콘솔에 출력되는 것을 확인하려면, 터미널로 가서 다음을 실행하세요
Hardhat:
Truffle:
4단계: 컨트랙트 인스턴스 만들기
컨트랙트와 상호작용하려면 코드 안에 해당 컨트랙트의 인스턴스를 만들어야 합니다. Ethers.js로 이를 수행하려면 세 가지 개념을 다뤄야 합니다:
- Provider - 블록체인에 대한 읽기 및 쓰기 접근 권한을 제공하는 노드 프로바이더입니다.
- Signer - 트랜잭션에 서명할 수 있는 Ethereum 계정을 나타냅니다.
- Contract - 온체인에 배포된 특정 컨트랙트를 나타내는 Ethers.js 객체입니다.
이전 단계에서 가져온 컨트랙트 ABI를 사용하여 컨트랙트 인스턴스를 만들어봅시다:
Providers, Signers, Contracts에 대해서는 Alchemy의 Ethers.js 설명 문서에서 더 자세히 알아볼 수 있습니다.
5단계: init 메시지 읽기
theinitMessage = "Hello world!"로 컨트랙트를 배포했던 것을 기억하시나요? 이제 스마트 컨트랙트에 저장된 그 메시지를 읽어서 콘솔에 출력해봅시다.
JavaScript에서는 네트워크와 상호작용하기 위해 비동기 함수를 사용합니다.
아래 코드를 사용해 스마트 컨트랙트의 message 함수를 호출하고 init 메시지를 읽어봅시다:
터미널에서 npx hardhat run scripts/interact.js을 사용해 파일을 실행하면 다음과 같은 응답을 볼 수 있습니다:
축하합니다! 방금 Ethereum 블록체인에서 스마트 컨트랙트 데이터를 성공적으로 읽어냈습니다, 잘 하셨습니다!
6단계: 메시지 업데이트하기
이제 메시지를 읽는 것뿐만 아니라, update 함수를 사용해 스마트 컨트랙트에 저장된 메시지를 업데이트할 수도 있습니다! 꽤 멋지죠?
이를 위해 인스턴스화된 Contract 객체에서 update 함수를 직접 호출하면 됩니다:
반환된 트랜잭션 객체에서 .wait\(\)를 호출하는 것에 주목하세요. 이는 스크립트가 다음 단계로 넘어가기 전에 트랜잭션이 블록체인에 채굴될 때까지 기다리도록 해줍니다. 이 줄을 생략하면 스크립트가 컨트랙트에서 업데이트된 message 값을 보지 못할 수 있습니다.
7단계: 새 메시지 읽기
5단계를 반복해서 업데이트된 message 값을 읽을 수 있을 것입니다. 잠시 시간을 내어 새 값을 출력하는 데 필요한 변경 사항을 직접 만들어보세요!
힌트가 필요하다면, 이 시점에서 interact.js 파일은 다음과 같은 모습이어야 합니다:
이제 스크립트를 실행하면 이전 메시지, 업데이트 상태, 그리고 새 메시지가 터미널에 출력되는 것을 볼 수 있습니다!
npx hardhat run scripts/interact.js --network ropsten
이 스크립트를 실행하는 동안, Updating the message... 단계가 새 메시지가 설정되기까지 다소 시간이 걸리는 것을 눈치채셨을 수도 있습니다. 이는 채굴 과정 때문입니다! 트랜잭션이 채굴되는 동안 어떻게 추적할 수 있는지 궁금하다면, Alchemy 멤풀에서 트랜잭션 상태(대기 중, 채굴 완료, 또는 네트워크에서 드롭되었는지)를 확인해보세요. 만약 트랜잭션이 드롭되었다면, Ropsten Etherscan에서 트랜잭션 해시를 검색해보는 것도 도움이 됩니다.
이게 전부입니다! 이제 Ethereum 스마트 컨트랙트를 배포하고 상호작용까지 해보셨습니다. 누구나 컨트랙트와 상호작용하는 방법을 알 수 있도록 Etherscan에 컨트랙트를 게시하고 싶다면, 3부 스마트 컨트랙트를 etherscan에 제출하기를 확인해보세요! 🎉
이 튜토리얼을 완료하셨다면, Twitter에서 @Alchemy를 태그하여 경험이나 피드백을 알려주세요!
Alchemy 뉴스레터
출시 소식을 가장 먼저 받아보세요
뉴스레터 구독하기
Alchemy의 최신 제품 업데이트와 리소스 받기
이메일 주소를 입력하면 마케팅 커뮤니케이션 및 제품 업데이트 수신에 동의하게 됩니다. Alchemy는 저희 개인정보 처리방침에 따라 수집한 정보를 처리합니다. 언제든지 구독을 취소할 수 있습니다.
관련 아티클

Claude Code를 온체인 리서치 에이전트로 전환하기
Alchemy CLI로 Claude Code를 온체인 리서치 에이전트로 전환하세요. 적절한 질문을 통해 토큰 출시, 배포자 지갑, 관리자 키를 추적할 수 있습니다.

Cortex 라우터: 모든 요청에 가장 빠른 정상 노드를 선택하는 방법
요청을 가까운 리전으로 보내는 것은 기본 요건일 뿐입니다. 그 다음, 즉 어떤 노드가 응답할지 선택하는 과정에서 Cortex가 작동합니다.

AI 에이전트를 위한 최고의 블록체인 인프라 (2026)
2026년 AI 에이전트를 위한 최고의 블록체인 인프라 비교: 에이전트 프레임워크, 에이전트에 최적화된 RPC 및 데이터 제공자, 그리고 이들을 연결하는 표준.