web3.js와 ethers.js는 둘 다 Ethereum과 상호작용할 수 있게 해주는 대표적인 JavaScript/TypeScript 라이브러리입니다.
하지만 내부 설계, API 스타일, 기능 지원, 타입 안전성 등에서 꽤 큰 차이가 있어요.

🔍 web3.js vs ethers.js v6 비교분석

항목 web3.js ethers.js v6
🧠 설계 철학 API 친숙함 & 전통적인 JS 스타일 경량화 + 함수형 + 타입 안정성
🧾 최신 버전 v1.10.x (2024 기준) ✅ v6.x (대폭 리팩토링됨)
🔧 모듈화 대부분 하나의 번들로 제공 ✅ 모듈별 tree-shaking 지원
📦 번들 크기 크고 무겁다 (~800KB) ✅ 작고 가볍다 (~100KB)
🔤 타입스크립트 지원 제한적 (@types/web3) ✅ 완전 지원, 타입 안전성 강력
📡 Provider 체계 단순한 연결 모델 ✅ 정교한 Provider 구조 (JsonRpcProvider, WebSocketProvider, etc)
🧮 단위 변환 .toWei(), .fromWei() 등 util 중심 ✅ parseEther(), formatUnits() 등 직관적 함수형 API
🛠 ABI 사용 복잡하거나 manual한 처리 필요 ✅ Contract 생성이 깔끔하고 직관적
🔐 Wallet/Signer 불편하고 외부 패키지 필요 ✅ Wallet, Signer 내장
🧩 플러그인 구조 없음 ✅ 커스터마이징 가능한 Plugin 설계 지원
🧪 테스트 환경 호환 Hardhat, Ganache 등과 호환 ✅ 완벽한 Hardhat 연동 (ethers.provider)
🗃 상태관리 (call/send) .methods.foo().call() ✅ 함수처럼 contract.foo()

🧪 코드 비교 예시

  1. 잔액 조회

🔷 web3.js

const Web3 = require("web3");
const web3 = new Web3("https://mainnet.infura.io/v3/KEY");

const balanceWei = await web3.eth.getBalance("0x...");
const balanceEth = web3.utils.fromWei(balanceWei, "ether");

🔶 ethers v6

import { ethers } from "ethers";
const provider = new ethers.JsonRpcProvider("https://mainnet.infura.io/v3/KEY");

const balance = await provider.getBalance("0x...");
console.log(ethers.formatEther(balance));

  1. Contract 호출

🔷 web3.js

const contract = new web3.eth.Contract(abi, address);
const name = await contract.methods.name().call();

🔶 ethers v6

const contract = new ethers.Contract(address, abi, provider);
const name = await contract.name();

✅ ethers는 .methods.call() 패턴 없이 자연스럽게 동작합니다.

✅ 장단점 요약

🔷 web3.js

✅ 장점
• 문서 많고 사용자가 많음
• Ethereum 초창기부터 사용된 안정된 라이브러리
• 간단한 기능은 배우기 쉽다

❌ 단점
• 타입스크립트 지원 부족
• 모듈 크고 무거움
• .methods().call() 등 불편한 호출 방식
• 비동기 체계와 예외 처리 어려움

🔶 ethers.js v6

✅ 장점
• 완전한 TypeScript 지원 (타입 추론 정확)
• 더 깔끔하고 모던한 API
• 가볍고 빠른 빌드 타임
• Hardhat과 궁합 좋음 (기본 내장)
• Wallet, Signer, Provider, Interface 등이 모두 잘 구조화됨

❌ 단점
• v6은 v5와 호환 안 되므로 일부 사용법 변경 필요
• 최신 기능 학습이 조금 필요

🧭 선택 가이드

상황 추천
TypeScript 프로젝트 ✅ ethers.js v6
Hardhat 기반 테스트 ✅ ethers.js
오래된 코드/문서 기반 유지 web3.js (v1.x)
속도/용량 최적화 필요 ✅ ethers.js
단순한 학습용/시작용 web3.js 가능하지만 오래된 구조

✅ 결론

실전 프로젝트, 특히 TypeScript 기반이라면
🔥 ethers.js v6가 사실상 표준이며 최선의 선택입니다.

+ Recent posts