Skip to content

feat: RE100 에너지 거래 플랫폼(ETP) 전체 구현#1

Open
DrJinHoChoi wants to merge 10 commits intomainfrom
master
Open

feat: RE100 에너지 거래 플랫폼(ETP) 전체 구현#1
DrJinHoChoi wants to merge 10 commits intomainfrom
master

Conversation

@DrJinHoChoi
Copy link
Copy Markdown
Owner

Summary

  • RE100 전력 중개거래 플랫폼(ETP) 풀스택 구현
  • NestJS 백엔드 + React 프론트엔드 + Hyperledger Fabric 블록체인
  • PostgreSQL + Prisma ORM + JWT 인증 + WebSocket 실시간 통신

주요 기능

  • 인증/DID: JWT 기반 인증 + 블록체인 DID 발급/검증
  • 전력 거래: 매수/매도 주문 생성, 자동 매칭, 체결 내역
  • 미터링: 발전/소비 계량 데이터 관리, 시계열 차트
  • 정산: 거래 정산 처리, 수수료 계산, 확정
  • EPC 토큰: 스테이블코인 지갑, 전송, 민팅, 트랜잭션 이력
  • 가격 오라클: EIA/ENTSO-E/KPX 3소스 가중 평균 가격
  • REC 마켓: 재생에너지 인증서 발급, 거래, 폐기
  • 관리자: 시스템 모니터링, EPC 민팅, 플랫폼 통계
  • 블록체인: Hyperledger Fabric 체인코드 6종 (DID, EPC, Trading, Metering, Settlement, REC)

프로덕션 하드닝

  • GlobalExceptionFilter + LoggingInterceptor + TransformInterceptor
  • Rate limiting (ThrottlerModule 100 req/60s)
  • Health check endpoint (/api/health)
  • React ErrorBoundary + Lazy loading 코드 스플리팅
  • Docker multi-stage build + Nginx + docker-compose

기술 스택

Layer Tech
Frontend React 18, TypeScript, Vite, TailwindCSS, Zustand, Recharts, Socket.IO
Backend NestJS, Prisma, PostgreSQL, JWT, Socket.IO, Swagger
Blockchain Hyperledger Fabric 2.5, Go Chaincode
DevOps Docker, Nginx, GitHub Actions CI

Test plan

  • Backend 14 tests pass
  • Frontend 4 tests pass
  • Full build (shared + backend + frontend)
  • Seed data populated successfully
  • API endpoints verified (auth, trading, token, oracle, health)
  • Manual UI testing on localhost:5173

🤖 Generated with Claude Code

DrJinHoChoi and others added 10 commits February 16, 2026 14:50
- Hyperledger Fabric 4개 체인코드 (DID, Trading, Settlement, Metering) Go 구현
- Fabric 네트워크 구성 (3개 조직, configtx, docker-compose, setup script)
- 백엔드 블록체인 연동 모듈 (BlockchainService, DID/Trading blockchain services)
- DID 인증 시스템 (회원가입 시 자동 DID 발급, 검증 API)
- WebSocket Gateway (실시간 거래/미터링 알림)
- 수요/공급 Aggregator 모듈 (집계, 예측, 에너지원별 현황)
- Analytics 모듈 (RE100 달성률, 탄소 감축량, 플랫폼 통계, 월별 트렌드)
- Prisma seed 데이터 (관리자, 공급자, 수요자, 주문, 미터링 샘플)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
글로벌 전력 가격 바스켓에 페깅된 EPC(Energy Price Coin) 스테이블코인과
REC 인증서 토큰화(NFT) 기능을 추가한다.

- 가격 오라클: EIA(US), ENTSO-E(EU), KPX(KR) 3개 소스에서 15분 주기 수집
  가중 평균(US 40%, EU 35%, KR 25%) 바스켓 가격 산출
- EPC 토큰: 1 EPC = 1kWh 수량 기반 페깅, 발행/소각/이체/잠금/해제
  발전량 검증 시 자동 발행, 정산 수수료 2% 소각(디플레이션)
- REC NFT: RECCertificate → RECToken 변환, 소유권 이전, RE100 소멸 처리
- Hyperledger Fabric 체인코드: epc-cc, rec-token-cc (Go)
- 기존 모듈 통합: Trading(EPC 결제), Settlement(EPC 정산), Metering(자동 발행)
- 프론트엔드: EPC 지갑, 가격 오라클 대시보드, REC 마켓플레이스 페이지

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- 프론트엔드 모든 페이지 실제 백엔드 API 연결 (Settlement, Metering, Dashboard, Trading, Admin)
- WebSocket 실시간 업데이트 통합 (useWebSocket 훅)
- EPC 결제 통화 토글 (KRW/EPC) Trading 페이지에 추가
- Dashboard에 EPC 잔액, 오라클 가격, 플랫폼 통계 카드 추가
- 백엔드 Jest 테스트 14개 (Oracle, Token, Trading 서비스)
- 프론트엔드 Vitest 테스트 4개 (tokenStore, oracleService)
- Prisma 초기 마이그레이션 생성
- GitHub Actions CI/CD 파이프라인 (.github/workflows/ci.yml)
- 서비스 레이어 추가 (settlement, metering, analytics)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
OracleService가 BlockchainService를 의존하나 OracleModule에서
BlockchainModule을 import하지 않아 런타임 DI 오류 발생 수정

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Phase 6 - 백엔드 프로덕션 하드닝:
- GlobalExceptionFilter: 구조화된 에러 응답
- LoggingInterceptor: HTTP 요청 로깅 (method, url, status, duration)
- TransformInterceptor: 통일된 응답 포맷
- HealthModule: /api/health 엔드포인트 (DB 연결, 메모리, 업타임)
- ThrottlerModule: Rate limiting (100 req/60s)
- ValidationPipe 강화 (whitelist, implicit conversion)

Phase 7 - 프론트엔드 프로덕션 하드닝:
- ErrorBoundary: React 에러 경계 컴포넌트
- LoadingSkeleton: 스켈레톤 로딩 UI (Card, Table, Lines)
- Lazy loading: 전 페이지 React.lazy + Suspense 코드 스플리팅

Phase 8 - 배포 설정:
- Seed 데이터: 관리자, 공급자 3명, 소비자 3명, 주문, 미터링, 오라클 가격
- Dockerfile.backend: Multi-stage build (node:20-alpine, non-root user)
- Dockerfile.frontend: Multi-stage build (nginx:alpine)
- docker-compose.prod.yml: PostgreSQL + Redis + Backend + Frontend
- nginx.conf: SPA fallback, API/WebSocket 프록시, gzip, 캐싱

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Phase 2 - 공통 컴포넌트 시스템:
- Toast: 알림 시스템 (success/error/warning/info, 자동 제거)
- Modal: 모달 다이얼로그 (ESC, backdrop 닫기, 크기 옵션)
- Badge: 상태 뱃지 (6가지 variant, dot 옵션)
- Button: 범용 버튼 (5가지 variant, 3가지 사이즈, 로딩)
- Card: 카드 레이아웃 (title, subtitle, action, CardGrid)
- DataTable: 데이터 테이블 (정렬, 검색, 페이지네이션)
- StatCard: 통계 카드 (그라데이션, 트렌드, 아이콘)
- EmptyState: 빈 상태 컴포넌트

Phase 2 - 레이아웃 전면 개편:
- 사이드바 네비게이션 (그룹별 메뉴: 메인/거래/자산/정보)
- SVG 아이콘 (이모지 → 커스텀 SVG)
- 브레드크럼 네비게이션
- 모바일 반응형 (햄버거 메뉴, 오버레이)
- 실시간 연결 상태 표시
- 유저 프로필 카드 (이니셜 아바타, 역할 뱃지)
- 커스텀 스크롤바, 애니메이션 (slide-up, fade-in, animate-in)

Phase 3 - 페이지 리뉴얼:
- Login: 2-panel 디자인, 브랜딩 좌측, 폼 우측, 역할 카드 선택
- Dashboard: StatCard 컴포넌트 사용, AreaChart, 도넛 PieChart,
  컬러 MiniCard, PriceCard (국기+가중치 뱃지)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
모든 페이지에 Card, Badge, Button, StatCard, Toast 컴포넌트 적용:
- Metering: gradient StatCard, 에너지원 아이콘, Toast 알림
- Settlement: 상태 Badge, 수수료 표시, 로딩 스피너
- Wallet: 잔액 구성 바, 이체 폼 토글, 거래 유형 아이콘
- PriceOracle: AreaChart 그라데이션, PriceSourceCard, 실시간 Badge
- RECMarketplace: Modal 소멸 확인, 토큰 카드 호버 효과, 에너지원 Badge
- Admin: StatusItem 상세, 사용자 구성 프로그레스 바, 체인코드 Badge 목록
- Trading: 주문 유형 카드 셀렉터, 통계 카드

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Trading: 주문 생성/취소/매칭 시 WebSocket 이벤트 발행, EPC 잠금 실패 시 보상 트랜잭션(주문 취소)
- Settlement: 정산 생성/확인 시 WebSocket 이벤트, EPC 이체 실패 시 FAILED 상태 기록
- Metering: 미터링 데이터 수신 시 WebSocket 실시간 알림 + netEnergy 계산

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- useWebSocket 훅 개선: 연결 상태 추적, 자동 재접속, useSocketEvent 편의 훅 추가
- Layout: 실시간 연결 상태 인디케이터 (연결/대기) 동적 표시
- Dashboard: trade:matched, order:updated, price:update, stats:update 이벤트 구독
- Trading: 주문 상태 변경 / 거래 체결 시 자동 새로고침 + 체결 토스트 알림
- Metering: 미터링 데이터 수신 시 자동 새로고침 + 순 에너지 알림
- Settlement: 정산 완료/실패 시 자동 새로고침 + 상태별 토스트 알림
- PriceOracle: WebSocket price:update 이벤트 연동 (polling 간격 120초로 완화)
- 테스트: Settlement, Metering, Auth 서비스 테스트 추가 (총 44 tests 전체 통과)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Backend:
- DIDAuthGuard: 거래/정산 엔드포인트에서 활성 DID 검증 (REVOKED → 차단)
- DIDSignatureService: Ed25519 트랜잭션 서명/검증, 챌린지 생성
- AuthService 확장: DID 챌린지-응답 로그인, DID 폐기 API
- AuthController: POST /did/challenge, POST /did/login, DELETE /did/revoke
- Trading/Settlement 컨트롤러에 DIDAuthGuard 적용
- Trading/Settlement 모듈에 AuthModule import 추가
- Auth 테스트 확장: 챌린지, DID 로그인, 폐기 테스트 (50 tests 전체 통과)

Frontend:
- auth.service: DID 관리 API (발급, 검증, 폐기, 챌린지, DID 로그인)
- authStore: DID 정보 포함 프로필, refreshProfile 추가
- Layout: 사이드바에 DID 상태 인디케이터 (활성/미발급)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant