본문 바로가기
Blockchain

[Blockchain] DApp 개발을 위한 구성 요소

by clolee 2025. 4. 17.

 

✅ DApp 개발을 위한 구성 요소

📌 1. Ethereum Node (RPC)

✅ 정의

블록체인과 상호작용하기 위한 진입점. 스마트컨트랙트 호출, 트랜잭션 전송 등 모든 통신은 Ethereum Node를 통해 이루어짐.

✅ 형태

  • 자체 노드 실행: Geth, Nethermind 등 (실제 Ethereum 프로토콜 전체를 동작시킴)
  • RPC 서비스: Infura, Alchemy, QuickNode (개발자용 API 제공, 노드 운영 부담 없음)

✅ 역할

  • JSON-RPC 인터페이스를 통해 외부 시스템과 통신
  • Web3/Ethers → JSON-RPC → 노드 → EVM

📌 2. EVM (Ethereum Virtual Machine)

✅ 정의

Ethereum의 스마트컨트랙트를 실행하는 가상 머신. 전 세계 모든 노드는 같은 EVM 코드를 실행하여 상태를 합의함.

✅ 작동 원리

  • Solidity 코드는 컴파일되어 EVM 바이트코드로 변환됨
  • EVM은 각 명령어(SLOAD, SSTORE, ADD, CALL)의 가스 비용을 계산하며 실행

✅ 특징

  • 결정적(Deterministic): 입력과 블록 상태가 같으면 결과도 항상 동일
  • Isolation(Sandboxed): 외부 시스템과 분리 → 보안성 높음
  • 가스(Gas): 연산 비용을 수치화하여 네트워크 자원 낭비 방지

📌 3. Solidity

✅ 정의

EVM에서 실행할 수 있는 스마트컨트랙트를 작성하는 주요 프로그래밍 언어

✅ 언어 특징

  • 정적 타입 언어 (타입 명시 필수)
  • JavaScript, C 계열 문법 기반
  • contract, function, modifier, event, mapping, struct 등 EVM 친화적 키워드 지원

✅ 메모리 구조

  • storage: 블록체인에 영구 저장됨 (가스 많이 듦)
  • memory: 함수 내 일시적 데이터 저장소 (값 타입 전달용)
  • calldata: 외부 호출 시 읽기 전용 인자 저장 (cheap)

📌 4. Smart Contract

✅ 정의

블록체인에서 실행되며, 자동화된 로직을 코드화한 계약. 수정 불가능하며 영구 기록됨.

✅ 특성

  • 누구나 읽을 수 있고 실행 가능 (오픈 소스 + 불변성)
  • 조건 충족 시 자동 실행 (require, if, revert)
  • 사용자, DApp, 또는 다른 스마트컨트랙트에 의해 호출 가능

✅ 실전 예시

  • 예치금 관리 (deposit, withdraw)
  • 권한 기반 승인 (onlyOwner, modifier)
  • NFT 발행 (ERC721, mint)

📌 5. Ganache (로컬 테스트 블록체인)

✅ 정의

개발자가 로컬에서 빠르게 스마트컨트랙트를 배포/테스트할 수 있도록 해주는 개인용 블록체인

✅ 특징

  • 트랜잭션 자동 채굴, 무료 가스
  • 모든 계정에 이더 지급
  • 블록 시간, 가스 한도, chainId 설정 가능

✅ 실무 활용

  • 개발 중 반복 배포/테스트
  • 디버깅 및 로그 추적
  • Truffle 또는 Hardhat과 연동해 자동화 테스트

📌 6. Truffle / Hardhat

항목 Truffle Hardhat
정의 전통적인 Ethereum 개발 프레임워크 현대적이고 확장 가능한 개발 프레임워크
배포 스크립트 ✔️ migrations 사용 ✔️ scripts/deploy.js로 자유 구성
테스트 Mocha + Chai Mocha + EVM tracing 지원
디버깅 기본 수준 🧠 고급 디버거, 스택트레이스 제공
특징 안정성 + GUI(Ganache) 지원 빠른 컴파일, 유연성, 플러그인 생태계

📌 7. Remix IDE

✅ 정의

브라우저 기반 Solidity IDE. 컴파일, 배포, 실행, 디버깅을 웹 상에서 한 번에 처리 가능

✅ 구성

  • Solidity Editor: 코드 작성
  • Deploy & Run: 컴파일 → 네트워크 선택 → 배포/호출
  • Debugger: 트랜잭션 스텝별 실행 추적
  • File Explorer: 가상 파일시스템

✅ 실무 팁

  • 초급자 입문용으로 최적
  • 테스트넷 및 WalletConnect 연동 가능
  • production 배포는 Truffle/Hardhat 권장

📌 8. MetaMask

✅ 정의

브라우저 확장형 지갑 + Ethereum provider 역할

✅ 기능

  • 개인키 관리 및 서명
  • 네트워크 전환 (Mainnet / Testnet / Custom RPC)
  • 트랜잭션 전송 및 확인
  • DApp에서 window.ethereum 객체로 접근 가능

📌 9. Web3.js / Ethers.js

항목 Web3.js Ethers.js
정의 JS 기반 Ethereum 인터랙션 라이브러리 경량화, TypeScript 친화
계약 호출 contract.methods.func().call() contract.func()
트랜잭션 전송 .send() .sendTransaction()
네트워크 감지 web3.eth.net provider.getNetwork()
실무 적합성 유지보수 감소, 약간 구식 빠른 속도, 현대적 코드 스타일, 더 선호됨

📌 10. DApp (Decentralized Application)

✅ 정의

사용자 인터페이스(웹, 앱)는 일반 앱과 같지만, 중앙 서버 대신 스마트컨트랙트가 핵심 로직을 담당하는 탈중앙 앱

✅ 핵심 구조

[React/Vue Frontend]
      ↕ (Web3/Ethers.js)
[Smart Contract (Solidity)]
      ↕ (JSON-RPC)
[Ethereum Node (Infura, Geth)]

✅ 실무 흐름 예시

  1. 사용자 → MetaMask 통해 트랜잭션 서명
  2. Web3.js가 RPC로 트랜잭션 전송
  3. EVM에서 스마트컨트랙트 실행
  4. 상태 업데이트 후 블록체인에 기록
  5. 이벤트 발생 → 프론트에 반영

📌 테스트넷 비교 (보너스)

네트워크 설명 특징
Sepolia 메인 테스트넷 가볍고 빠름. EVM 완전 동일
Goerli 과거 인기 점차 사용 중단 중
Holesky Staking 중심 테스트넷 Sepolia와 역할 분리. 검증자 테스트에 특화됨

✅ 전체 흐름 요약 순서

[1] Ethereum Node (Infura, Geth 등)
   ↓
[2] EVM (명령 실행 환경)
   ↓
[3] Solidity (코드 작성)
   ↓
[4] Smart Contract (계약 로직)
   ↓
[5] Ganache (로컬 테스트)
   ↓
[6] Truffle / Hardhat (개발 자동화)
   ↓
[7] Remix (웹 IDE 실습)
   ↓
[8] MetaMask (지갑 + 서명)
   ↓
[9] Web3.js / Ethers.js (브라우저 ↔ RPC)
   ↓
[10] DApp (전체 사용자 인터페이스)

댓글