자바스크립트 API 라이브러리
페이지 마지막 업데이트됨: 2026년 2월 25일
웹 앱이 이더리움 블록체인과 상호작용하려면(즉, 블록체인 데이터를 읽거나 네트워크에 트랜잭션을 보내려면) 이더리움 노드에 연결해야 합니다.
이를 위해 모든 이더리움 클라이언트는 JSON-RPC 사양을 구현하므로 애플리케이션이 의존할 수 있는 통일된 메서드 집합이 있습니다.
자바스크립트를 사용하여 이더리움 노드에 연결하려는 경우, 바닐라 자바스크립트를 사용할 수도 있지만, 생태계 내에 이를 훨씬 쉽게 만들어주는 여러 편의 라이브러리가 존재합니다. 개발자는 이러한 라이브러리를 사용하여 이더리움과 상호작용하는 JSON-RPC 요청(후드 아래)을 초기화하는 직관적인 단일 방법을 작성할 수 있습니다.
병합 이후, 노드를 실행하려면 실행 클라이언트와 합의 클라이언트라는 두 개의 연결된 이더리움 소프트웨어가 필요하다는 점에 유의하세요. 노드에 실행 클라이언트와 합의 클라이언트가 모두 포함되어 있는지 확인하세요. 노드가 로컬 컴퓨터에 없는 경우(예: AWS 인스턴스에서 노드가 실행되는 경우), 튜토리얼의 IP 주소를 적절하게 업데이트하세요. 자세한 내용은 노드 실행하기 페이지를 참조하세요.
필수 구성 요소
자바스크립트를 이해하는 것 외에도 이더리움 스택과 이더리움 클라이언트를 이해하는 것이 도움이 될 수 있습니다.
라이브러리를 왜 사용할까요?
이러한 라이브러리는 이더리움 노드와 직접적으로 상호작용하는 많은 복잡성을 일반화합니다. 또한 유틸리티 함수(예: ETH를 Gwei로 변환)도 제공하므로 개발자는 이더리움 클라이언트의 복잡성을 처리하는 데 시간을 덜 들이고 애플리케이션의 고유 기능에 더 집중할 수 있습니다.
라이브러리 기능
이더리움 노드에 연결
이 라이브러리는 공급자를 사용하여 JSON-RPC, INFURA, Etherscan, Alchemy 또는 MetaMask를 통해 이더리움에 연결하고 데이터를 읽을 수 있게 해줍니다.
경고: Web3.js는 2025년 3월 4일에 아카이브되었습니다. 공지 사항 읽기 (opens in a new tab). 새로운 프로젝트에는 ethers.js (opens in a new tab) 또는 viem (opens in a new tab)과 같은 대체 라이브러리를 사용하는 것을 고려해 보세요.
Ethers 예시
1// BrowserProvider는 표준 Web3 공급자를 래핑하며,2// 이는 MetaMask가 각 페이지에 window.ethereum으로 주입하는 것입니다3const provider = new ethers.BrowserProvider(window.ethereum)45// MetaMask 플러그인을 사용하면 트랜잭션에 서명하여6// 이더를 전송하고 블록체인 내 상태를 변경하기 위해 지불할 수 있습니다.7// 이를 위해 계정 서명자가 필요합니다...8const signer = provider.getSigner()Web3js 예시
1var web3 = new Web3("http://localhost:8545")2// 또는3var web3 = new Web3(new Web3.providers.HttpProvider("http://localhost:8545"))45// 공급자 변경6web3.setProvider("ws://localhost:8546")7// 또는8web3.setProvider(new Web3.providers.WebsocketProvider("ws://localhost:8546"))910// node.js에서 IPC 공급자 사용11var net = require("net")12var web3 = new Web3("/Users/myuser/Library/Ethereum/geth.ipc", net) // mac os 경로13// 또는14var web3 = new Web3(15 new Web3.providers.IpcProvider("/Users/myuser/Library/Ethereum/geth.ipc", net)16) // mac os 경로17// windows에서의 경로는 다음과 같습니다: "\\\\.\\pipe\\geth.ipc"18// linux에서의 경로는 다음과 같습니다: "/users/myuser/.ethereum/geth.ipc"모두 보기설정이 완료되면 블록체인에 다음을 쿼리할 수 있습니다.
- 블록 번호
- 가스 추정치
- 스마트 계약 이벤트
- 네트워크 ID
- 그 이상 많은것들...
지갑 기능
이 라이브러리들은 지갑을 만들고, 키를 관리하고, 트랜잭션에 서명하는 기능을 제공합니다.
다음은 Ethers의 예시입니다
1// 니모닉으로 지갑 인스턴스를 생성합니다...2mnemonic =3 "announce room limb pattern dry unit scale effort smooth jazz weasel alcohol"4walletMnemonic = Wallet.fromPhrase(mnemonic)56// ...또는 개인 키로 생성합니다7walletPrivateKey = new Wallet(walletMnemonic.privateKey)89walletMnemonic.address === walletPrivateKey.address10// 참1112// 서명자 API에 따른 Promise로서의 주소13walletMnemonic.getAddress()14// { Promise: '0x71CB05EE1b1F506fF321Da3dac38f25c0c9ce6E1' }1516// 지갑 주소는 동기적으로도 사용할 수 있습니다17walletMnemonic.address18// '0x71CB05EE1b1F506fF321Da3dac38f25c0c9ce6E1'1920// 내부 암호화 구성 요소21walletMnemonic.privateKey22// '0x1da6847600b0ee25e9ad9a52abbd786dd2502fa4005dd5af9310b7cc7a3b25db'23walletMnemonic.publicKey24// '0x04b9e72dfd423bcf95b3801ac93f4392be5ff22143f9980eb78b3a860c4843bfd04829ae61cdba4b3b1978ac5fc64f5cc2f4350e35a108a9c9a92a81200a60cd64'2526// 지갑 니모닉27walletMnemonic.mnemonic28// {29// locale: 'en',30// path: 'm/44\'/60\'/0\'/0/0',31// phrase: 'announce room limb pattern dry unit scale effort smooth jazz weasel alcohol'32// }3334// 참고: 개인 키로 생성된 지갑은35// 니모닉을 가지지 않습니다(파생 과정에서 이를 방지함)36walletPrivateKey.mnemonic37// null3839// 메시지 서명40walletMnemonic.signMessage("Hello World")41// { Promise: '0x14280e5885a19f60e536de50097e96e3738c7acae4e9e62d67272d794b8127d31c03d9cd59781d4ee31fb4e1b893bd9b020ec67dfa65cfb51e2bdadbb1de26d91c' }4243tx = {44 to: "0x8ba1f109551bD432803012645Ac136ddd64DBA72",45 value: utils.parseEther("1.0"),46}4748// 트랜잭션 서명49walletMnemonic.signTransaction(tx)50// { Promise: '0xf865808080948ba1f109551bd432803012645ac136ddd64dba72880de0b6b3a7640000801ca0918e294306d177ab7bd664f5e141436563854ebe0a3e523b9690b4922bbb52b8a01181612cec9c431c4257a79b8c9f0c980a2c49bb5a0e6ac52949163eeb565dfc' }5152// connect 메서드는 공급자에 연결된53// 지갑의 새 인스턴스를 반환합니다54wallet = walletMnemonic.connect(provider)5556// 네트워크 쿼리57wallet.getBalance()58// { Promise: { BigNumber: "42" } }59wallet.getTransactionCount()60// { Promise: 0 }6162// 이더 전송63wallet.sendTransaction(tx)모두 보기설정이 완료되면 다음을 수행할 수 있습니다.
- 계정 생성
- 트랜잭션 전송
- 트랜잭션 서명
- 그 이상 많은것들...
스마트 계약 함수와 상호작용하기
자바스크립트 클라이언트 라이브러리를 사용하면 애플리케이션에서 컴파일된 계약의 애플리케이션 바이너리 인터페이스(ABI)를 읽어 스마트 계약 함수를 호출할 수 있습니다.
ABI는 기본적으로 계약의 함수를 JSON 형식으로 설명하며, 이를 일반적인 자바스크립트 객체처럼 사용할 수 있게 해줍니다.
따라서 다음 솔리디티 계약은:
1contract Test {2 uint a;3 address d = 0x12345678901234567890123456789012;45 constructor(uint testInt) { a = testInt;}67 event Event(uint indexed b, bytes32 c);89 event Event2(uint indexed b, bytes32 c);1011 function foo(uint b, bytes32 c) returns(address) {12 Event(b, c);13 return d;14 }15}모두 보기다음과 같은 JSON이 생성됩니다.
1[{2 "type":"constructor",3 "payable":false,4 "stateMutability":"nonpayable"5 "inputs":[{"name":"testInt","type":"uint256"}],6 },{7 "type":"function",8 "name":"foo",9 "constant":false,10 "payable":false,11 "stateMutability":"nonpayable",12 "inputs":[{"name":"b","type":"uint256"}, {"name":"c","type":"bytes32"}],13 "outputs":[{"name":"","type":"address"}]14 },{15 "type":"event",16 "name":"Event",17 "inputs":[{"indexed":true,"name":"b","type":"uint256"}, {"indexed":false,"name":"c","type":"bytes32"}],18 "anonymous":false19 },{20 "type":"event",21 "name":"Event2",22 "inputs":[{"indexed":true,"name":"b","type":"uint256"},{"indexed":false,"name":"c","type":"bytes32"}],23 "anonymous":false24}]모두 보기즉, 다음을 수행할 수 있습니다.
- 스마트 계약에 트랜잭션을 보내고 메서드를 실행합니다
- EVM에서 실행될 때 메서드 실행에 소요될 가스를 추정하기 위해 호출합니다
- 계약 배포
- 기타 등등...
유틸리티 함수
유틸리티 함수는 이더리움 기반의 빌드를 좀 더 쉽게 만들어주는 편리한 단축 기능을 제공합니다.
ETH 값은 기본적으로 Wei 단위입니다. 1 ETH = 1,000,000,000,000,000,000 WEI – 이는 매우 큰 숫자를 다룬다는 의미입니다! web3.utils.toWei는 이더를 Wei로 변환해 줍니다.
그리고 ethers에서는 다음과 같습니다.
1// 계정의 잔액을 가져옵니다(주소 또는 ENS 이름으로)2balance = await provider.getBalance("ethers.eth")3// { BigNumber: "2337132817842795605" }45// 종종 사용자에게 보여주기 위해 출력을 포맷해야 합니다6// 사용자는 wei 대신 이더 단위의 값을 선호합니다7ethers.utils.formatEther(balance)8// '2.337132817842795605'사용 가능한 라이브러리
Web3.js - 이더리움 자바스크립트 API.
Ethers.js - 자바스크립트 및 타입스크립트의 완전한 이더리움 지갑 구현 및 유틸리티.
The Graph - 이더리움 및 IPFS 데이터를 인덱싱하고 GraphQL을 사용하여 쿼리하기 위한 프로토콜입니다.
- The Graph (opens in a new tab)
- 그래프 탐색기 (opens in a new tab)
- 개발문서 (opens in a new tab)
- GitHub (opens in a new tab)
- Discord (opens in a new tab)
Alchemy SDK - 향상된 API가 포함된 Ethers.js 래퍼.
viem - 이더리움을 위한 타입스크립트 인터페이스.
Drift - 내장 캐싱, 후크, 테스트 목(mock)이 포함된 타입스크립트 메타 라이브러리.
더 읽어보기
도움이 되었던 커뮤니티 참고 자료를 알고 계신가요? 이 페이지를 편집해서 추가하세요!
관련 주제
관련 튜토리얼
- JavaScript에서 이더리움 블록체인을 사용하도록 Web3js 설정하기 – 프로젝트에 web3.js를 설정하는 방법에 대한 안내입니다.
- JavaScript에서 스마트 계약 호출하기 – DAI 토큰을 사용하여 JavaScript로 계약 함수를 호출하는 방법을 알아보세요.
- web3와 Alchemy를 사용하여 트랜잭션 보내기 – 백엔드에서 트랜잭션을 보내는 단계별 안내입니다.