티스토리 뷰
반응형
직접 만드는 나만의 블록체인 (9) – 블록체인 네트워크 분산 실행 (Docker 배포 및 노드 간 연결)
🌍 블록체인, 이제 "진짜 네트워크"에서 동작해야 한다
이전 글에서는 브라우저에서 DApp을 통해 블록체인과 상호작용하는 방식을 구현했습니다.
하지만 여전히 단일 노드에서만 실행되고 있었습니다.
이번 글에서는 여러 개의 노드를 실행하고 서로 연결하는 방법을 다룹니다.
이를 통해 **블록체인의 가장 중요한 특징인 분산 네트워크(P2P)**를 직접 구현하고 배포할 것입니다.
✅ 목표
- 여러 개의 블록체인 노드를 실행
- Docker & Docker Compose를 사용해 손쉽게 네트워크 구축
- 노드 간 자동 연결 및 블록 데이터 동기화
🏗 프로젝트 구조
my_blockchain/
├── blockchain.py # 블록체인 로직
├── node.py # 개별 노드 실행 코드
├── docker-compose.yml # 여러 노드를 실행하는 설정 파일
└── Dockerfile # 컨테이너 빌드 설정 파일
🔧 Step 1. 개별 노드 실행 코드 (node.py)
반응형
from flask import Flask, request, jsonify
import requests
import json
import sys
from blockchain import Blockchain, Transaction
app = Flask(__name__)
blockchain = Blockchain()
peers = set() # 연결된 다른 노드들의 주소 저장
@app.route('/chain', methods=['GET'])
def get_chain():
return jsonify([block.__dict__ for block in blockchain.chain])
@app.route('/transactions/new', methods=['POST'])
def new_transaction():
data = request.get_json()
tx = Transaction(**data)
blockchain.add_transaction(tx)
return jsonify({"success": True, "message": "트랜잭션이 추가되었습니다."}), 201
@app.route('/mine', methods=['GET'])
def mine():
blockchain.mine_pending_transactions("miner-node")
sync_chain()
return jsonify({"success": True, "message": "블록이 마이닝되었습니다."})
@app.route('/peers', methods=['POST'])
def register_peer():
data = request.get_json()
peers.add(data['peer'])
return jsonify({"success": True, "peers": list(peers)})
def sync_chain():
longest_chain = blockchain.chain
for peer in peers:
try:
response = requests.get(f"{peer}/chain")
peer_chain = response.json()
if len(peer_chain) > len(longest_chain):
longest_chain = peer_chain
except:
continue
blockchain.chain = longest_chain
✅ 기능 정리
- /chain → 현재 체인 반환
- /transactions/new → 새로운 트랜잭션 추가
- /mine → 마이닝 수행 후 다른 노드와 데이터 동기화
- /peers → 새로운 노드를 등록
🐳 Step 2. Docker 설정 (Dockerfile)
FROM python:3.12
WORKDIR /app
COPY . /app
RUN pip install flask requests
CMD ["python", "node.py"]
✅ Docker를 사용하면 블록체인 노드를 컨테이너화하여 실행할 수 있음
→ 여러 개의 노드를 동시에 실행할 때 매우 편리
⚙️ Step 3. 여러 노드 실행 설정 (docker-compose.yml)
version: '3'
services:
node1:
build: .
ports:
- "5001:5000"
environment:
- PEERS=http://node2:5000
node2:
build: .
ports:
- "5002:5000"
environment:
- PEERS=http://node1:5000
✅ Docker Compose를 사용하면 여러 개의 노드를 동시에 실행 가능
✅ 각 노드는 서로의 주소를 환경 변수로 전달받아 자동 연결됨
🚀 실행 방법
1️⃣ Docker 컨테이너 빌드
docker-compose build
2️⃣ 네트워크에서 여러 노드 실행
docker-compose up
3️⃣ 트랜잭션 전송 및 블록 생성 테스트
curl -X POST http://localhost:5001/transactions/new -H "Content-Type: application/json" -d '{"sender": "Alice", "recipient": "Bob", "amount": 10}'
curl -X GET http://localhost:5001/mine
🔁 네트워크 동기화 테스트
curl http://localhost:5002/chain
✅ 노드1에서 채굴한 블록이 노드2에도 자동 반영되는지 확인!
🧠 정리
개념 설명
Flask | 블록체인 노드를 HTTP API로 관리 |
Docker | 노드를 컨테이너로 실행하여 손쉽게 확장 |
Docker Compose | 여러 노드를 동시에 실행하고 자동 연결 |
P2P 블록체인 네트워크 | 노드 간 체인 데이터 동기화 |
📌 다음 글 예고
👉 (10) 블록체인 API 최적화 및 보안 강화 – Rate Limiting, 인증, 서명 방식 개선
- API 인증 및 서명 방식 추가
- Rate Limiting 적용 (DoS 공격 방지)
- 체인 데이터 검증 강화
'study > 블록체인' 카테고리의 다른 글
직접 만드는 나만의 블록체인 (11) – 블록체인 성능 최적화 (멀티 스레드 마이닝 & DB 연동) (0) | 2025.03.28 |
---|---|
직접 만드는 나만의 블록체인 (10) – 블록체인 API 최적화 및 보안 강화 (0) | 2025.03.27 |
직접 만드는 나만의 블록체인 (8) – 브라우저에서 동작하는 DApp 만들기 (0) | 2025.03.26 |
직접 만드는 나만의 블록체인 (7) – 스마트 계약 시뮬레이션 구현하기 (0) | 2025.03.25 |
직접 만드는 나만의 블록체인 (6) – 네트워크 구성과 블록 전파 구현하기 (0) | 2025.03.25 |
※ 이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- SEO최적화
- Prisma
- NestJS
- llm
- JAX
- 백엔드개발
- 딥러닝
- SEO 최적화
- fastapi
- 파이썬알고리즘
- Ktor
- AI챗봇
- kotlin
- nodejs
- gatsbyjs
- 웹개발
- 프론트엔드면접
- Next.js
- CI/CD
- PostgreSQL
- flax
- Python
- nextJS
- seo 최적화 10개
- 프론트엔드
- rag
- 개발블로그
- REACT
- App Router
- Docker
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
글 보관함
반응형