메인 콘텐츠로 건너뛰기
Change page

자바스크립트 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)
4
5// 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"))
4
5// 공급자 변경
6web3.setProvider("ws://localhost:8546")
7// 또는
8web3.setProvider(new Web3.providers.WebsocketProvider("ws://localhost:8546"))
9
10// 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)
5
6// ...또는 개인 키로 생성합니다
7walletPrivateKey = new Wallet(walletMnemonic.privateKey)
8
9walletMnemonic.address === walletPrivateKey.address
10// 참
11
12// 서명자 API에 따른 Promise로서의 주소
13walletMnemonic.getAddress()
14// { Promise: '0x71CB05EE1b1F506fF321Da3dac38f25c0c9ce6E1' }
15
16// 지갑 주소는 동기적으로도 사용할 수 있습니다
17walletMnemonic.address
18// '0x71CB05EE1b1F506fF321Da3dac38f25c0c9ce6E1'
19
20// 내부 암호화 구성 요소
21walletMnemonic.privateKey
22// '0x1da6847600b0ee25e9ad9a52abbd786dd2502fa4005dd5af9310b7cc7a3b25db'
23walletMnemonic.publicKey
24// '0x04b9e72dfd423bcf95b3801ac93f4392be5ff22143f9980eb78b3a860c4843bfd04829ae61cdba4b3b1978ac5fc64f5cc2f4350e35a108a9c9a92a81200a60cd64'
25
26// 지갑 니모닉
27walletMnemonic.mnemonic
28// {
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// }
33
34// 참고: 개인 키로 생성된 지갑은
35// 니모닉을 가지지 않습니다(파생 과정에서 이를 방지함)
36walletPrivateKey.mnemonic
37// null
38
39// 메시지 서명
40walletMnemonic.signMessage("Hello World")
41// { Promise: '0x14280e5885a19f60e536de50097e96e3738c7acae4e9e62d67272d794b8127d31c03d9cd59781d4ee31fb4e1b893bd9b020ec67dfa65cfb51e2bdadbb1de26d91c' }
42
43tx = {
44 to: "0x8ba1f109551bD432803012645Ac136ddd64DBA72",
45 value: utils.parseEther("1.0"),
46}
47
48// 트랜잭션 서명
49walletMnemonic.signTransaction(tx)
50// { Promise: '0xf865808080948ba1f109551bd432803012645ac136ddd64dba72880de0b6b3a7640000801ca0918e294306d177ab7bd664f5e141436563854ebe0a3e523b9690b4922bbb52b8a01181612cec9c431c4257a79b8c9f0c980a2c49bb5a0e6ac52949163eeb565dfc' }
51
52// connect 메서드는 공급자에 연결된
53// 지갑의 새 인스턴스를 반환합니다
54wallet = walletMnemonic.connect(provider)
55
56// 네트워크 쿼리
57wallet.getBalance()
58// { Promise: { BigNumber: "42" } }
59wallet.getTransactionCount()
60// { Promise: 0 }
61
62// 이더 전송
63wallet.sendTransaction(tx)
모두 보기

전체 문서 읽기 (opens in a new tab)

설정이 완료되면 다음을 수행할 수 있습니다.

  • 계정 생성
  • 트랜잭션 전송
  • 트랜잭션 서명
  • 그 이상 많은것들...

스마트 계약 함수와 상호작용하기

자바스크립트 클라이언트 라이브러리를 사용하면 애플리케이션에서 컴파일된 계약의 애플리케이션 바이너리 인터페이스(ABI)를 읽어 스마트 계약 함수를 호출할 수 있습니다.

ABI는 기본적으로 계약의 함수를 JSON 형식으로 설명하며, 이를 일반적인 자바스크립트 객체처럼 사용할 수 있게 해줍니다.

따라서 다음 솔리디티 계약은:

1contract Test {
2 uint a;
3 address d = 0x12345678901234567890123456789012;
4
5 constructor(uint testInt) { a = testInt;}
6
7 event Event(uint indexed b, bytes32 c);
8
9 event Event2(uint indexed b, bytes32 c);
10
11 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":false
19 },{
20 "type":"event",
21 "name":"Event2",
22 "inputs":[{"indexed":true,"name":"b","type":"uint256"},{"indexed":false,"name":"c","type":"bytes32"}],
23 "anonymous":false
24}]
모두 보기

즉, 다음을 수행할 수 있습니다.

  • 스마트 계약에 트랜잭션을 보내고 메서드를 실행합니다
  • 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" }
4
5// 종종 사용자에게 보여주기 위해 출력을 포맷해야 합니다
6// 사용자는 wei 대신 이더 단위의 값을 선호합니다
7ethers.utils.formatEther(balance)
8// '2.337132817842795605'

사용 가능한 라이브러리

Web3.js - 이더리움 자바스크립트 API.

Ethers.js - 자바스크립트 및 타입스크립트의 완전한 이더리움 지갑 구현 및 유틸리티.

The Graph - 이더리움 및 IPFS 데이터를 인덱싱하고 GraphQL을 사용하여 쿼리하기 위한 프로토콜입니다.

Alchemy SDK - 향상된 API가 포함된 Ethers.js 래퍼.

viem - 이더리움을 위한 타입스크립트 인터페이스.

Drift - 내장 캐싱, 후크, 테스트 목(mock)이 포함된 타입스크립트 메타 라이브러리.

더 읽어보기

도움이 되었던 커뮤니티 참고 자료를 알고 계신가요? 이 페이지를 편집해서 추가하세요!

이 문서가 도움이 되셨나요?