이번 포스팅 내용은 Ethers 학습을 목적으로 간단히 진행한 프로젝트입니다.
2025 K-PaaS 공모전을 진행하면서 DID와 관련한 내용을 다루게 되었고 프론트 개발 과정 중에서 Ethers의 이해와 활용에 대한 이해도를 높이기 위해 진행하게 되었습니다.
DID의 직접적인 활용보다는 Ethers 사용과 학습에 중점을 두고 있습니다!
Ethers 공식 문서
https://docs.ethers.org/v6/
ethers.js 라이브러리는 Ethereum 블록체인 및 EVM(ecosystem)과 상호작용할 수 있게 해주는 완전하고 컴팩트한 라이브러리입니다. JavaScript/TypeScript에서 이더리움과 안전하게 상호작용할 수 있게 도와주는 기능을 합니다.
다시 말해, ethers.js 라이브러리는 Ethereum 블록체인 및 EVM(ecosystem)과 상호작용할 수 있게 해주는 라이브러리입니다.
때문에 DApp, 지갑, 기타 블록체인 읽기/쓰기 작업용으로 자주 쓰이고 있습니다.
이더리움은 탈중앙화된 스마트 계약 플랫폼이자 블록체인 네트워크입니다.
간단하게는 개발 시 블록체인을 활용할 수 있도록 환경 제공을 비롯한 다양한 기능을 포함하는 '플랫폼'입니다.
Ethers v6의 공식 문서의 내용에 따르면 아래의 순서에 따라 동작합니다.
이때 Ethers의 동작 과정에 사용되는 용어에 대한 설명은 다음과 같습니다.
이번 주제에서 메인으로 고려해야 할 것은 아래의 두 가지였습니다.
따라서 위 내용을 같이 고려했을 때 '지갑 연결 + 잔액 조회 + 송금 DApp'을 주제로 결정했습니다.
개발환경은 다음과 같습니다.
이번 프로젝트의 지갑으로는 메타마스크를 사용하기 때문에, 프로젝트 개발 전에 미리 설치를 해야 합니다.
메타마스크는 사용자가 블록체인 애플리케이션뿐만 아니라 디지털 신원과 디지털 자산에 안전하게 접근할 수 있도록 지원하는 자기 수탁형 암호화폐 지갑 앱입니다.
사용자는 MetaMask를 통해 Web3 상의 분산형 애플리케이션(디앱)과 상호작용하고, 암호화폐 포트폴리오를 관리하며, NFT를 민팅하는 등 다양한 기능을 이용할 수 있습니다. 또한, 안전한 로그인, 키 저장소, 토큰 지갑 등의 기능을 제공합니다.
다시 말해, 이더리움(Ethereum) 및 이더리움 기반 블록체인 네트워크(예: Polygon, BNB Smart Chain 등)에 연결된 디지털 암호화폐 지갑을 말합니다.
메타마스크는 웹 브라우저에서 설치해서 사용하거나 모바일 앱으로 사용 가능합니다.
메타마스크를 사용할 수 있는 웹 브라우저는 Chrome, Firefox, Brave, Microsoft Edge이며, 저는 크롬에서 진행했습니다.
크롬에서 메타마스크 설치를 위해서는 크롬 확장프로그램으로 설치하면 되며, 아래 링크를 통해 설치가 가능합니다.
https://chromewebstore.google.com/detail/metamask/nkbihfbeogaeaoehlefnkodbefgpgknn?utm_source=chatgpt.com
설치 후 회원가입을 하면 되는데, 과정이 간단하므로 메타마스크에서 제시하는대로만 회원가입 하면 됩니다.
‼️추후 개발 서버를 열어서 테스트 할 때, 메타마스크가 설치된 크롬에서 열어야 테스트가 정상적으로 동작합니다.‼️
프로젝트 기본 환경 설치를 우선 진행했습니다.
저는 /K-PaaS/ 폴더 아래에 이번 프로젝트의 폴더를 생성하고자 했습니다.
이를 위해 우선 /K-Paas/ 폴더를 기준으로 cmd를 열고, 아래의 명령어를 순차적으로 진행했습니다.
1) 'dapp-wallet'이라는 이름의 프로젝트 생성
# 프로젝트 생성
npx create-next-app@latest dapp-wallet --ts --eslint
2) 생성한 프로젝트 폴더로 이동
cd dapp-wallet
3) ethers 라이브러리 다운로드
# web3 라이브러리
npm i ethers
4) 환경 옵션 설정
/src/ 디렉토리 사용이번 프로젝트의 디렉토리 구조는 다음과 같습니다.
dapp-wallet/
├─ src/
│ ├─ app/
│ │ ├─ layout.tsx
│ │ └─ page.tsx
│ ├─ components/
│ │ ├─ ConnectButton.tsx
│ │ ├─ AccountPanel.tsx
│ │ └─ SendEthForm.tsx
│ ├─ lib/
│ │ └─ ethereum.ts
│ └─ styles/
│ └─ globals.css
├─ .env.local # (옵션) 별도 RPC 사용 시
├─ package.json
└─ tsconfig.json
※ 기본 동작은 MetaMask의 BrowserProvider 하나로 충분합니다. (읽기/쓰기 모두 가능)
퍼블릭 RPC를 따로 쓰고 싶다면 .env.local에 키를 넣고 JsonRpcProvider를 보조로 붙여도 됩니다.
앞서 디렉토리를 설치할 때 /src/ 디렉토리를 사용한다고 설정을 했기 때문에, tsconfig.json에 아래의 코드를 추가해야 합니다.
{
"compilerOptions": {
"baseUrl": ".",
"paths": {
"@/*": ["./src/*"]
}
}
}