
Ethereum네트워크와 상호 작용할 수 있도록 다양한 메소드를 제공하는JavaScript 라이브러리이다.- 즉,
Ethereum의 '표준 API' 라고 보면 된다.
Ethereum 으로 dApp 을 만드는 방법은 다음과 같다.
Solidity 언어로 Smart contract 를 개발하는 것.이 중 2번 방법을 위해 사용하는 라이브러리가 Web3.js 이다.
Ethereum 네트워크는 생태계에 참여하는 자를 일컫는 노드(node) 로 구성되어 있으며 노드 들은 JSON-RPC 형태로만 소통할 수 있다.
하지만 복잡한 JSON-RPC 형식에 맞춰 개발하는 것은 개발자에게 불편한 일이다.
// ex) json-rpc의 예시
{"jsonrpc":"2.0","method":"eth_sendTransaction","params":[{"from":"0xb60e8dd61c5d32be8058bb8eb970870f07233155","to":"0xd46e8dd67c5d32be8058bb8eb970870f07244567","gas":"0x76c0","gasPrice":"0x9184e72a000","value":"0x9184e72a","data":"0xd46e8dd67c5d32be8d46e8dd67c5d32be8058bb8eb970870f072445675058bb8eb970870f072445675"}],"id":1}
따라서 Web3.js 를 통해 잘 알지 못하는 개발자들도 쉽고 편리하게 사용할 수 있게 도와주는 역할을 한다.
// ex) 위 복잡한 json-rpc 방식을 web3.js로 동일하게 구현한 예제
CryptoZombies.methods.createRandomZombie("Vitalik Nakamoto 🤔")
.send({ from: "0xb60e8dd61c5d32be8058bb8eb970870f07233155", gas: "3000000" })
메타마스크(Metamask)는 사용자의Ethereum계정과 개인키를 안전하게 관리할 수 있게 도와주는 블록체인 플랫폼 서비스 중 하나다.- 대표적으로 크롬/파이어폭스 브라우저의 확장 프로그램 및 모바일 App을 지원한다.
- 메타마스크 계정으로 web3.js를 사용하는 웹사이트와 상호 작용이 가능하다.
즉, Metamask 는 dApp 를 이용할 수 있도록 도와주는 대표적인 예이다.
그 이유는, Metamask 는 내부적으로 Infura 서버를 Web3 Provider 로 사용하기 때문이다.
Metamask 는 web3 라는 전역 JavaScript 객체 를 통해 브라우저에 Web3 Provider 를 주입한다.
Ethereum의Smart contract와 상호 작용하기 위해web3.js라이브러리에서Ethereum네트워크를 제공하는 인터페이스이다.
그림 하나로 정리할 수 있다.

위 그림에서 보다시피, Web3 Provider 는 한마디로 '어떤 노드에 연결해서 정보를 주고받을 건지' 그 대상을 지정하는 역할을 한다.
즉, 클라이언트와 Ethereum 노드 간의 인터페이스 역할 을 한다.
주로 Ethereum 블록체인과 통신하여 Smart contract 를 배포 또는 실행하고, Transaction 을 서명하고 전송하는 등의 기능을 제공한다.
클라이언트는 Ethereum 노드에 대한 요청을 전달하고, Ethereum 노드는 그 결과를 클라이언트에게 반환한다.
web3.js 를 사용하여 Smart contract 를 배포하거나, 또는 이더를 전송하는 등의 작업을 수행하려면 가장 먼저 해당 작업에 필요한 provider 설정해야 한다.
일반적으로 Ethereum 노드를 직업 운영하지 않는 경우에는 Infura 와 같은 Ethereum 인프라 제공업체를 사용하여 provider 를 설정해야 한다.
web3.js 에선 크게 두 종류의 provider 를 제공한다.
http, websocket, IPC 등 프로토콜 을 사용한 provier
브라우저 확장 프로그램에서 사용 가능한 InjectedProvider
Infura
Infura 는 'Ethereum 인프라 제공업체' 로서 Ethereum 네트워크에 접근하기 위한 일반적인 provider 를 제공한다.Ethereum 노드로 부터의 결과를 반환한다.Smart contract 배포, 트랜잭션 전송, 블록 정보 조회 등의 작업을 제공한다.Metamask
Metamask 는 Ethereum 블록체인과 상호 작용하기 위한 '브라우저 확장 프로그램' 으로서 '자체 Provider' 를 제공한다.가상지갑 기능과 dApp 실행 환경을 제공하는 것이 큰 특징이다.가상지갑 을 관리하고, dApp 에 대한 권한 및 트랜잭션 서명을 처리하는 역할을 제공한다.InjectedProvider 라는 특정 유형의 provider 를 제공하여 클라이언트와 블록체인 간의 통신을 담당한다.❗️ 결론적으로, Provider 의 대표적인 두 서비스는 실행 환경의 차이뿐 아니라 기능적인 차이도 존재한다.
web3.js와 마찬가지로Ethereum생태계와 상호 작용하기 위한JavasScript 라이브러리이다.
ether.js 와 web3.js 는 Ethereum 생태계와 상호 작용한다는 것은 동일하지만, 서로 다른 사용 목적과 구조를 지니고 있다.
Smart contract 개발 및 상호 작용에 중점을 둔다.Smart contract 의 배포 및 호출, 트랜잭션 생성 및 서명 등의 기능을 제공한다.Ethereum 지갑 관리 기능을 제공한다.ethers.js 에 비해 더 다양한 기능과 API를 제공한다.Provider 설정, 계정 관리, Smart contract 상호 작용, 블록체인 정보 조회 등의 기능들이 있다.❗️ 결론적으로, 일반적으로 ethers.js 는 Smart contract 개발에 더 중점을 둔 경우에 사용되며, web3.js는 dApp 개발이나 블록체인 네트워크와의 상호 작용이 더 필요한 경우에 사용된다.