💡 Web3.js란?
이더리움을 사용한 블록체인 어플리케이셔션을 개발한다는 것은 솔리디티 언어를 사용해 스마트 컨트랙트를 개발하거나, 블록체인과 상호작용하는 클라이언트를 개발하는 것을 의미한다. Web3.js를 사용하는 것은 후자에 해당한다. Web3.js는 이더리움 블록체인과 상호 작용하는 클라이언트를 개발하는 데 사용한다. Web3.js는 다른 계정으로 이더를 전송하거나, 스마트 컨트랙트에서 데이터를 읽고 쓰거나, 스마트 컨트랙트를 만드는 등 다양한 액션을 수행할 수 있게 해주는 라이브러리의 집합이다.
✓ 클라이언트가 이더리움 블록체인과 상호작용하는 방법
클라이언트가 이더리움과 상호작용하는 방식은 다음의 그림으로 설명할 수 있다.
Web3.js는 이더리움 블록체인과 JSON RPC를 사용하여 소통한다. JSON RPC는 "Remote Procedure Call" 프로토콜의 약자이다. 이더리움은 여러 노드로 구성된 P2P 네트워크이며 블록체인에 있는 모든 데이터와 코드의 사본을 저장하고 있다. Web3.js는 네트워크에 있는 데이터를 읽거나 써야할 때 JSON RPC를 사용해 하나의 이더리움 노드에게 요청을 보낸다. JSON RPC는 우리가 웹 클라이언트에서 웹 서버에게 데이터를 요청하기 위해 XMLHttpRequest 를 사용하는 것과 똑같다. 웹에서는 클라이언트가 XMLHttpRequest라는 정해진 형식에 맞춰서 서버에 데이터를 요청한다. 마찬가지로 이더리움에서는 클라이언트가 JSON RPC라는 정해진 형식에 맞춰서 이더리움 노드에 데이터를 요청하는 것이다.
Web3.js에는 다음과 같이 다양한 모듈이 있다.
- web3-eth: 이더리움 블록체인과 스마트 컨트랙트 모듈
- web3-shh: P2P 커뮤니케이션과 브로드캐스트를 위한 위스퍼 프로토콜 모듈
- web3-bzz: 탈중앙화 파일 스토리지를 위한 스왐 프로토콜 모듈
- web3-utils: dApp 개발자를 위한 헬퍼 함수들을 모아둔 모듈
✓ window.ethereum - 공급자 객체
EIP-1139를 통해, 메타마스크와 같은 지갑 소프트웨어는 웹 페이지에 자바스크립트 객체 형태로 자신의 API를 노출한다. 이 객체를 "공급자"라고 한다. 이전에는 각 지갑 소프트웨어들이 자신의 API를 브라우저에 공급자 객체 형태로 표현하였다. 각 지갑마다 공급자 객체를 구현하는 인터페이스나 동작이 조금씩 달랐기 때문에, 브라우저에서 이 공급자 객체들이 충돌하는 문제가 있었다. EIP-1139는 이더리움 공급자 API를 통일하여 지갑 간 상호운용이 가능하도록 했다. EIP-1139에서 저장한 이더리움 공급자 객체는 브라우저 내에서 window.ethereum 으로 지정되어 있다. 크롬 개발자 콘솔 창에 window.etherum 을 입력하면 다음과 같이 공급자 객체가 출력되는 것을 확인할 수 있다.
'블록체인 > WEB3 개발' 카테고리의 다른 글
Infura - 블록 동기화 없이 원격 이더리움 노드에 접근하기 (0) | 2022.07.29 |
---|---|
Web3.js란? (0) | 2022.07.29 |
DID를 활용한 졸업증명서에 기능 추가하기 (0) | 2022.07.27 |
DID를 활용한 졸업증명서 개발하기 (0) | 2022.07.27 |
Local에서 ERC-721 개발해 Truffle 로 배포하기 (0) | 2022.07.21 |
댓글