이더리움 블록체인 네트워크를 사용한 Dapp을 만든다는 것은 다른 말로 하면 솔리디티 언어로 스마트 컨트랙트를 개발하는 것과, 블록체인과 상호작용할 수 있는 클라이언트(노드)를 개발하는 것입니다. 솔리디티로 스마트 컨트랙트를 개발하는 것은 블록체인 내에서 작동하는 프로그램을 만드는 일입니다.
반면 스마트 컨트랙트를 이용하거나, 트랜잭션을 조회하고 생성하는 일은 클라이언트 단에서 실행할 수 있는데, 이 때 사용하는 모듈이 바로 Web3.js입니다. 이더리움 재단에서는 이더리움 블록체인과 상호작용할 수 있는 클라이언트를 개발할 수 있도록 web3.js를 출시했습니다. web3.js를 통해 개발자들은 이더를 전송하거나, 스마트 컨트랙트의 함수를 실행하고 배포할 수 있습니다.
이더리움 블록체인과 클라이언트 상호작용
블록체인 외부에 위치한 클라이언트가 블록체인 네트워크와 상호작용하기 위해 web3.js 모듈을 사용합니다. 그럼, web3.js는 어떻게 둘 사이를 연결할 수 있을까요?
이더리움 블록체인과 Web3.js는 JSON RPC를 통해서 통신 합니다. RPC(Remote Procedure Call) 프로토콜은 원격 제어를 위한 코딩 제어 없이도 다른 공간에서 프로시저를 실행할 수 있도록 하는 프로토콜입니다. 이더리움 블록체인은 여러개의 노드로 구성된 P2P 네트워크 이므로, Web3.js는 이 중 하나의 노드에 연결되어 JSON RPC 통신을 구축합니다.
JSON RPC가 한번에 와닿지 않을 수 있습니다. 일반적으로 서버와 클라이언트가 통신할 때 사용하는 Ajax, Axios, XMLHttpRequest를 생각하면 이해가 쉽습니다. 클라이언트는 정규화된 양식에 맞춰 Ajax 요청을 보내면 서버는 이에 해당하는 응답을 뱉어내게 됩니다. 마찬가지로 Web3.js도 정해진 양식에 맞춰 이더리움 블록체인에 있는 노드에게 일정한 요청을 보내면 노드는 요청에 상응하는 응답을 뱉어내게 됩니다.
정리하자면 web3.js는 이더리움 블록체인의 노드와 상호작용을 도와주는 라이브러리이며 HTTP, IPC, WebSocket 프로토콜을 이용해 통신합니다.
web3.js 모듈 종류
이더리움 블록체인과 통신을 해서 다양한 정보를 가져오기 위해 web3.js 내에는 다양한 모듈이 포함되어 있습니다.
- web3-eth는 이더리움 블록체인과 스마트 컨트랙트를 제어하는 모듈입니다.
- web3-shh는 브로드캐스팅을 위한 위스퍼 프로토콜을 제어하는 모듈입니다.
- we3-bzz는 탈중앙화된 파일 스토리지를 위한 스웜 프로토콜을 제어하는 모듈입니다.
- web3-utils는 Dapp 개발자들을 위한 헬퍼 함수들을 제어하는 모듈입니다.
자바스크립트를 위한 web3.js 뿐만 아니라 자바를 위한 web3j, PHP를 위한 web3.php, 파이썬을 위한 Web3.py등 다양한 모듈이 등장했고, 지금도 안정화를 거듭해나가고 있습니다.
공급자를 주입하다 EIP-1139
메타마스크는 웹에 JS 객체 형식으로 API를 제공합니다. 메타마스크와 같은 지갑 소프트웨어가 제공하는 객체를 공급자라고 합니다. 지갑 소프트웨어는 메타마스크 뿐만 아니라 다양한데, 각각의 소프트웨어들이 표준화 되지 않은 객체를 웹에 제공하면서 객체 충돌문제가 발생하기 시작합니다.
이 문제를 개선하고자 제안된 것이 EIP-1139입니다. EIP-1139에서는 이더리움 공급자 API를 표준화해서 지갑들 사이에 상호 운용이 가능하도록 합니다. 이더리움 공급자 객체는 웹 콘솔에 window.ethereum 형식으로 으로 제공되고 있습니다.
Reference
'Blockchain' 카테고리의 다른 글
[Blockchain] Web3.js 사용 방법 (0) | 2022.07.29 |
---|---|
[Blockchain] Infura 사용하는 이유 방법 (0) | 2022.07.29 |
[Blockchain] 탈중앙화 신원증명 DID 컨트랙트 개발 (0) | 2022.07.26 |
[Blockchain] 탈중앙화 신원 증명 방법 DID 이해하기 (0) | 2022.07.26 |
[Blockchain] VC VP DID 개념 및 작동 방식 (1) | 2022.07.25 |
댓글