정지용
기술스택 목록
블록체인

web3.js

프로젝트 1에서 사용했습니다. 각 프로젝트에서 어떤 역할로 썼는지 아래에 정리했습니다.

이 기술은 무엇인가요?

이더리움 등 EVM 호환 블록체인과 JSON-RPC로 통신하는 JavaScript 라이브러리

web3.js는 노드(Node.js)나 브라우저 환경에서 이더리움 블록체인과 상호작용할 수 있게 해주는 JavaScript 라이브러리입니다. 블록체인 노드가 제공하는 JSON-RPC API를 직접 다루지 않고도, 계정 조회, 트랜잭션 전송, 스마트 컨트랙트 호출 같은 작업을 자바스크립트 객체와 함수 호출로 처리할 수 있도록 추상화합니다. 원래 이더리움 재단이 dApp(탈중앙화 애플리케이션) 개발을 돕기 위해 만들었습니다.

이럴 때 사용합니다

  • JavaScript/Node.js 환경에서 이더리움 노드에 RPC 요청을 보내야 할 때
  • 스마트 컨트랙트를 배포하거나 함수를 호출하는 dApp 백엔드/프론트를 만들 때
  • 트랜잭션 서명, 잔액 조회 등 지갑 관련 로직을 직접 다뤄야 할 때
  • ABI 인코딩/디코딩을 학습하며 블록체인 통신 원리를 익히고 싶을 때

핵심 개념

Provider
web3.js가 실제 블록체인 노드와 통신하는 통로로, HTTP·WebSocket 등 연결 방식을 지정한다.
JSON-RPC
블록체인 노드가 외부 요청을 받아 블록·트랜잭션 정보를 조회하거나 명령을 실행하게 해주는 표준 프로토콜이다.
ABI (Application Binary Interface)
스마트 컨트랙트의 함수와 데이터 구조를 어떻게 인코딩·디코딩할지 정의한 명세로, 컨트랙트 호출 시 필요하다.
Transaction Signing
계정의 개인키로 트랜잭션 데이터를 서명해 위조 불가능하게 만든 뒤 네트워크에 전파하는 과정이다.
Smart Contract Instance
ABI와 배포 주소를 이용해 만든 객체로, 컨트랙트의 함수를 자바스크립트 메서드처럼 호출할 수 있게 해준다.
Gas
트랜잭션 실행에 드는 연산 비용 단위로, 트랜잭션 전송 시 가격과 한도를 지정해야 한다.

잔액 조회 기본 예시

특정 이더리움 주소의 잔액을 RPC로 조회해 ETH 단위로 변환해 출력한다.

JavaScript
const { Web3 } = require('web3');

// RPC 노드에 연결
const web3 = new Web3('https://mainnet.infura.io/v3/YOUR_PROJECT_ID');

async function getBalance(address) {
  const balanceWei = await web3.eth.getBalance(address);
  const balanceEth = web3.utils.fromWei(balanceWei, 'ether');
  console.log(`${address}: ${balanceEth} ETH`);
}

getBalance('0x0000000000000000000000000000000000000000');

처음 쓸 때 흔한 함정

  • 개인키를 코드나 저장소에 그대로 넣으면 안 되며 환경변수 등으로 분리해야 한다
  • Wei와 Ether 단위 변환을 빠뜨려 잔액이나 가스비를 잘못 계산하기 쉽다
  • 트랜잭션 전송 후 블록 confirm을 기다리지 않고 완료로 착각하는 경우가 많다

위 개요는 기술 학습을 돕기 위해 자동 생성된 일반 설명입니다. 정확한 사양과 최신 정보는 공식 문서를 확인하세요.

프로젝트별 활용 방식

위 개념이 실제 프로젝트에서 어떻게 쓰였는지 보여줍니다.

함께 사용한 기술

위 프로젝트들에서 같이 쓰인 다른 기술입니다.