web3.js에 대해서

citron03·2022년 4월 2일
3

블록체인

목록 보기
14/19

web3

  • web3는 각 사용자가 노드가 되어 탈중앙화된 분산네트워크를 구성하여, 네트워크에서 정보를 읽거나 쓸 뿐만 아니라, 서비스를 제공할 수도 있는 이코노미를 의미한다.
    ⛲ web1은 클라이언트(사용자)가 서버로부터 컨텐츠를 제공받기만 했던 웹을 의미한다.
    🎡 web2는 AJAX의 등장으로 클라이언트가 서버와 상호작용을 하여 서버에 데이터를 기록할 수 있는 웹을 의미한다.
  • web2에서 소수의 플랫폼 기업이 사용자의 개인정보를 제공받아 이를 통해서 광고와 같은 수익을 창출하였다.
  • 또한, web2에서는 해커들이 악의적으로 사용자들의 개인정보를 탈취하는 문제가 있다.
    ⚓ 또한, 개인 정보의 보안은 플랫폼 기업에 의존해야 한다.
  • web3는 위와 같은 문제를 해결하고자 등장하였다.
  • web3는 중앙집중적인 플랫폼 이코노미를 벗어나, 모든 참여자가 플랫폼이 될 수 있는 분산형 인터넷을 의미한다.
    ✈ web3는 이를 구현하기 위해서 블록체인 기술을 사용한다.
  • web3에서는 모든 데이터가 공유되며, 동시에 암호화 기술을 통해 개인정보의 제공없이 사용자는 신원을 식별할 수 있다.

web3의 이점

  • 네트워크에 참여하는 누구나 서비스를 사용할 권한을 가지고, 그 누구의 허가도 필요하지 않다.

🚀 그 누구도 특정 사용자가 서비스에 접근하지 못하도록 막거나 거부할 수 없다.

  • 결제는 자체 토큰을 사용한다.
    🛸 ex. 이더

  • web3 기반 dApp은 탈중앙화되어 누군가의 검열이 불가능하다.

  • web3 기반 dApp은 수 많은 노드로 구성된 분산형 네트워크이기에 특정 노드가 다운되어도 서비스가 지속적으로 유지될 수 있다.
    🛸 SPOF(single point of failure)가 없다.

web3.js

  • web3.js는 이더리움 네트워크와 상호작용할 수 있는 다양한 메서드를 제공하는 자바스크립트 라이브러리이다.
  • 이더리움을 사용해 dApp을 만드는 것은, 솔리디티 언어로 스마트 컨트랙트를 개발하거나, 블록체인과 상호작용하는 클라이언트를 개발하는 것을 의미한다.
    🍺 이중에 후자를 위해서 사용하는 라이브러리가 web3.js다.
  • web3.js는 이더리움 블록체인과 JSON RPC(Remote Procedure Call)를 이용해 소통한다.
  • 이더리움에서는 클라이언트가 JSON RPC의 형식에 맞춰서 이더리움 노드에 데이터를 요청한다.
  • web3.js와 연결된 노드를 provider라고 한다.

🍦 web3.js를 이용해 다음과 같은 작업을 할 수 있다.

  • 다른 계정으로 이더를 전송한다.
  • 스마트 컨트랙트에서 데이터를 읽고 쓴다.
  • 스마트 컨트랙트를 만든다.

🍽 web3.js는 다음과 같이 다양한 모듈을 가진다.

  • web3-eth : 이더리움 블록체인과 스마트 컨트랙트 모듈이다.
  • web3-utils : dApp 개발자를 위한 유용한 헬퍼 함수를 모아둔 모듈이다.
  • web3-bzz : 탈중앙화 파일 스토리지를 위한 스왐 프로토콜 모듈이다.
  • web3-shh : P2P 커뮤니케이션과 브로드캐스트를 위한 위스터 프로토콜 모듈이다.

window.ethereum

  • window.ethereum은 공급자(provider) 객체로, EIP-1139를 통해 메타마스크와 같은 지갑 소프트웨어는 웹페이지에 자바스크립트 객체 형태로 자신의 API를 노출한다.

  • EIP-1139는 이더리움 공급자 API를 통일하여 지갑간 상호 운영이 가능하도록 하였다.

🍸 EIP-1139에서 이더리움 공급자 객체는 브라우저 내에서 window.ethereum으로 지정되어 있고, 크롬 개발자 콘솔창에서도 window.ethereum로 공급자 객체를 확인할 수 있다.

🍇 web3.js 를 사용하기 위해서 npm install web3로 설치하고, const Web3 = require('web3');로 불러와 사용할 수 있다.

🥭 이더리움 네트워크에 JSON RPC를 사용해 이더리움 노드에 접속할 수 있는 방법은 다양하지만, Geth나 Parity를 사용하면, 이더리움 블록체인에서 블록을 동기화해야 하기 때문에 많은 데이터를 다운 받아야 하는 불편함이 있다.

🥭 이런 불편함을 해결해준 서비스로, Infura가 있다. Infura는 원격 이더리움 노드를 통해서 이더리움 네트워크에 접근할 수 있게 해준다.

🍖 Infura에서는 RPC URL과 API KEY를 제공해주고, 이를 통해서 직접 이더리움 네트워크에 접근하여 블록을 동기화하지 않아도, 네트워크에 접근할 수 있게 해준다.
🍖 https://infura.io/

Etherscan API나 Coingecko API를 사용할 수도 있다.

이더리움 네트워크와 상호작용할 수 있는 메서드를 제공하는 web3.js와 같이, 클레이튼 네트워크와 상호작용할 수 있는 다양한 메서드를 제공하는 caver.js가 있다.

🍇 caver.js에 관련된 클레이튼 문서 : https://ko.docs.klaytn.com/dapp/sdk/caver-js

참고 자료 출처 : 코드 스테이츠

profile
🙌🙌🙌🙌

1개의 댓글

comment-user-thumbnail
2022년 11월 25일

혹시 코드스테이츠 어디에서 보신거에요? 링크 부탁드려도 될까요?

답글 달기