v0.0
온라인 대시보드 백엔드 아키텍처 설계서
1. Executive Summary
본 문서는 D'CENT 엔터프라이즈 콜드월렛 커스터디 솔루션의 온라인 대시보드 백엔드 아키텍처를 설계한다. 대시보드는 3-Zone 보안 아키텍처에서 Zone 1(Online Zone)에 해당하며, 트랜잭션 생성, 정책 엔진, 서명 취합, 블록체인 전파, 감사 로그, 사용자 관리의 중심 허브 역할을 수행한다.
설계 방향:
- Event Sourcing + CQRS 패턴으로 감사 추적 요구사항 충족
- 모듈화 아키텍처로 배포 모델(Zero Cloud/Hybrid/SaaS) 대응
- 블록체인 노드 통합 레이어로 멀티체인 확장 지원
- Warm Tier MPC-TSS 서버 통합 지점 정의
2. 아키텍처 개요
2.1. 전체 구조 다이어그램
┌─────────────────────────────────────────────────────────────────┐
│ Online Dashboard Backend │
│ │
│ ┌──────────┐ ┌──────────────────────────────────────────┐ │
│ │ │ │ Service Layer │ │
│ │ API │ │ │ │
│ │ Gateway │─────▶│ ┌──────────┐ ┌──────────┐ │ │
│ │ │ │ │ TX │ │ Approval │ │ │
│ │ ● Auth │ │ │ Manager │ │ Manager │ │ │
│ │ ● Rate │ │ └──────────┘ └──────────┘ │ │
│ │ ● RBAC │ │ ┌──────────┐ ┌──────────┐ │ │
│ │ ● Log │ │ │ Policy │ │ Wallet │ │ │
│ │ │ │ │ Engine │ │ Manager │ │ │
│ └──────────┘ │ └──────────┘ └──────────┘ │ │
│ │ ┌──────────┐ ┌──────────┐ │ │
│ │ │ Whitelist│ │ User │ │ │
│ │ │ Manager │ │ Manager │ │ │
│ │ └──────────┘ └──────────┘ │ │
│ │ ┌──────────┐ ┌──────────┐ │ │
│ │ │ Audit │ │ Notif. │ │ │
│ │ │ Logger │ │ Service │ │ │
│ │ └──────────┘ └──────────┘ │ │
│ └──────────────────────────────────────────┘ │
│ │
│ ┌──────────────────────────────────────────────────────────────┐│
│ │ Data Layer ││
│ │ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ ││
│ │ │ Event │ │ Read │ │ Redis │ │ Blob │ ││
│ │ │ Store │ │ DB │ │ Cache │ │ Storage │ ││
│ │ │ │ │ │ │ │ │ │ ││
│ │ │ TX 이벤트│ │ 쿼리 뷰 │ │ 세션 │ │ 감사 로그│ ││
│ │ │ 정책 이벤│ │ 잔액 뷰 │ │ 정책 캐시│ │ 백업 │ ││
│ │ │ 역할 이벤│ │ 승인 뷰 │ │ 토큰 캐시│ │ │ ││
│ │ └──────────┘ └──────────┘ └──────────┘ └──────────┘ ││
│ └──────────────────────────────────────────────────────────────┘│
│ │
│ ┌──────────────────────────────────────────────────────────────┐│
│ │ Integration Layer ││
│ │ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ ││
│ │ │ Blockchain │ │ MPC-TSS │ │ QR/USB-C │ ││
│ │ │ Connector │ │ Connector │ │ Codec │ ││
│ │ │ │ │ │ │ │ ││
│ │ │ ● BTC Node │ │ ● 셰어 서버 │ │ ● UR 인코딩 │ ││
│ │ │ ● ETH Node │ │ ● DKG 관리 │ │ ● CBOR │ ││
│ │ │ ● EVM L2 │ │ ● 서명 세션 │ │ ● QR 생성 │ ││
│ │ │ ● Mempool │ │ ● 키 리프레시│ │ │ ││
│ │ └──────────────┘ └──────────────┘ └──────────────┘ ││
│ └──────────────────────────────────────────────────────────────┘│
└─────────────────────────────────────────────────────────────────┘
2.2. 배포 모델별 구성 차이
모듈
Model A (Zero Cloud)
Model B (Hybrid)
Model C (SaaS)
API Gateway
기업 서버
클라우드 ALB/NLB
D'CENT 인프라
Service Layer
기업 서버
클라우드 컨테이너
D'CENT 관리
Event Store
온프레미스 PostgreSQL
클라우드 RDS
격리 스키마
Read DB
온프레미스 PostgreSQL
클라우드 RDS
격리 스키마
Redis
온프레미스
클라우드 ElastiCache
공유 (격리 키스페이스)
Blockchain Nodes
셀프호스팅
하이브리드
D'CENT 공유
MPC-TSS
기업 분산 서버
기업 온프레미스
기업 분산 서버
3. API 설계
3.1. API 엔드포인트 목록
Transactions
Method
Path
설명
권한
POST
/api/v1/transactions
TX 생성
Initiator
GET
/api/v1/transactions
TX 목록 조회
All
GET
/api/v1/transactions/:id
TX 상세 조회
All
POST
/api/v1/transactions/:id/approve
TX 승인
Approver
POST
/api/v1/transactions/:id/reject
TX 거부
Approver
POST
/api/v1/transactions/:id/sign
부분 서명 제출
Approver
GET
/api/v1/transactions/:id/qr
서명 요청 QR 생성
Approver
POST
/api/v1/transactions/:id/broadcast
TX 전파
System/Initiator
GET
/api/v1/transactions/:id/status
TX 상태 조회
All
Wallets
Method
Path
설명
권한
GET
/api/v1/wallets
월렛 목록
All
GET
/api/v1/wallets/:id
월렛 상세 + 잔액
All
GET
/api/v1/wallets/:id/utxos
UTXO 목록 (BTC)
Admin
GET
/api/v1/wallets/:id/addresses
주소 목록
Admin
POST
/api/v1/wallets/:id/rebalance
리밸런싱 요청
Admin
Policies
Method
Path
설명
권한
GET
/api/v1/policies
정책 목록
Admin
POST
/api/v1/policies
정책 생성
Admin (쿼럼)
PUT
/api/v1/policies/:id
정책 수정
Admin (쿼럼)
POST
/api/v1/policies/hw-sync
HW 정책 동기화 QR 생성
Admin
GET
/api/v1/policies/simulation
정책 변경 시뮬레이션
Admin
Whitelist
Method
Path
설명
권한
GET
/api/v1/whitelist
화이트리스트 조회
All
POST
/api/v1/whitelist
주소 추가
Admin (쿼럼)
DELETE
/api/v1/whitelist/:address
주소 삭제
Admin (쿼럼)
GET
/api/v1/whitelist/merkle
Merkle Root + Tree 조회
Admin
Audit
Method
Path
설명
권한
GET
/api/v1/audit/events
감사 이벤트 조회
Admin/Viewer
GET
/api/v1/audit/reports
컴플라이언스 보고서 생성
Admin
GET
/api/v1/audit/chain-integrity
해시 체이닝 무결성 검증
Admin
Users
Method
Path
설명
권한
GET
/api/v1/users
사용자 목록
Admin
POST
/api/v1/users
사용자 생성
Super Admin
PUT
/api/v1/users/:id/role
역할 변경
Admin (쿼럼)
POST
/api/v1/users/:id/devices
디바이스 등록
Admin
DELETE
/api/v1/users/:id/devices/:did
디바이스 해제
Admin
3.2. 인증/인가
인증 흐름:
1. 로그인: 이메일/비밀번호 → 1차 인증
2. MFA: TOTP (Google Authenticator 등) → 2차 인증
3. 하드웨어 키: FIDO2/WebAuthn (선택적 3차 인증)
4. JWT 토큰 발행 (Access: 15분, Refresh: 7일)
RBAC 미들웨어:
Request → JWT 검증 → 역할 추출 → 권한 확인 → 허용/거부
세션 관리:
- Redis에 세션 저장 (고가용)
- Admin 세션: 최대 4시간 (AC-AC-06)
- 비활동 30분 시 세션 만료
- 동시 세션: 역할별 제한 (Admin: 1, Approver: 3)
3.3. API 버저닝
경로 기반 버저닝: /api/v1/, /api/v2/
- v1: 현재 안정 버전
- v2: 차기 버전 (추가 시)
- 이전 버전: 최소 12개월 지원 후 deprecation
- 응답 헤더: X-API-Version, X-API-Deprecated-At
4. 이벤트 스토어 아키텍처
4.1. Event Sourcing 적용 범위
Aggregate
이벤트 유형
설명
Transaction
tx.created, tx.approved, tx.rejected, tx.signed, tx.broadcast, tx.confirmed, tx.failed, tx.expired
TX 전체 라이프사이클
Policy
policy.created, policy.updated, policy.deleted, policy.overridden, policy.hw_synced
정책 변경 이력
Whitelist
whitelist.added, whitelist.removed, whitelist.merkle_updated
화이트리스트 변경
User
user.created, user.role_changed, user.device_added, user.deactivated
사용자 관리
Signer
signer.added, signer.removed, signer.threshold_changed, signer.backup_activated
서명자 관리
4.2. 이벤트 구조
Event {
event_id: UUID // 이벤트 고유 ID
aggregate_id: UUID // Aggregate 식별자 (TX ID, 정책 ID 등)
aggregate_type: string // "Transaction", "Policy", ...
event_type: string // "tx.created", "policy.updated", ...
version: uint // Aggregate 내 이벤트 순서
payload: JSON // 이벤트 데이터
metadata: {
actor_id: UUID // 행위자 ID
actor_role: string // 행위자 역할
ip_address: string // 접근 IP
user_agent: string
session_id: UUID
}
timestamp: ISO8601 // 이벤트 발생 시각
prev_hash: bytes(32) // 이전 이벤트 SHA-256 해시 (체이닝)
event_hash: bytes(32) // 현재 이벤트 해시 (무결성)
}
4.3. SHA-256 해시 체이닝 (AC-AU-01)
이벤트 해시 체이닝:
event_hash_N = SHA-256(
event_id_N ||
aggregate_id_N ||
event_type_N ||
payload_N ||
timestamp_N ||
event_hash_(N-1) // 이전 이벤트 해시
)
무결성 검증:
1. 최초 이벤트부터 순차적으로 해시 재계산
2. 저장된 해시와 비교
3. 불일치 시 → 변조 감지 알림
4.4. CQRS 패턴
Command Side (쓰기):
API Request → Command Handler → Event 생성 → Event Store 저장
│
▼
Event Publisher
│
Query Side (읽기): │
API Request → Query Handler → Read DB 조회 │
▲ │
│ │
Projection Handler ◀──┘
(Event → Read Model 변환)
Read Model 예시:
- transaction_view: TX 상태, 승인 현황, 서명 현황
- balance_view: 월렛별/체인별 잔액 (실시간 업데이트)
- approval_view: 대기 중 승인 목록 (승인자별)
- audit_view: 감사 이벤트 검색/필터 뷰
4.5. 이벤트 보존 정책
항목
정책
보존 기간
최소 5년 (AC-AU-03, ISMS-P 6.2, 특금법)
삭제
불가 (append-only)
아카이빙
1년 초과 이벤트 → Cold Storage 이동 (S3/NAS)
백업
일일 풀 백업 + 시간별 증분 백업
무결성
월 1회 해시 체이닝 전체 검증
5. 블록체인 노드 통합
5.1. 노드 풀 관리
ChainNodePool {
nodes: [{
chain: string
url: string
type: "primary" | "fallback"
health: "healthy" | "degraded" | "down"
latency_ms: uint
last_checked: timestamp
}]
// 헬스체크 (30초 간격)
healthCheck(): void
// 노드 선택 (Primary → Fallback 자동 전환)
getNode(chain: string): NodeConnection
// Failover
onNodeDown(node): void // 자동으로 다음 노드로 전환
}
체인별 최소 노드 구성:
체인
Primary
Fallback
합계
프로토콜
Bitcoin
1
2
3
JSON-RPC (bitcoind)
Ethereum
1
2
3
JSON-RPC (geth/erigon)
EVM L2 (각)
1
1
2
JSON-RPC
5.2. 셀프호스팅 vs 외부 서비스
항목
셀프호스팅
외부 (Alchemy/Infura)
데이터 주권
완전
제한 (3자 의존)
가용성
자체 관리
SLA 보장 (99.9%)
비용
서버 비용 (고정)
API 호출 비용 (변동)
적합 모델
Model A (Zero Cloud)
Model B/C
권장
Model A 필수
Model B/C 허용
5.3. UTXO 관리 (Bitcoin)
UTXOManager {
// UTXO 세트 추적
syncUTXOs(wallet: Wallet): void
getUTXOSet(wallet: Wallet): [UTXO]
// Coin Selection
selectCoins(amount: BigInt, strategy: UTXOStrategy): [UTXO]
// UTXO 락 (다중 TX 동시 생성 시 이중 사용 방지)
lockUTXOs(utxos: [UTXO], txId: UUID, ttl: uint): void
unlockUTXOs(txId: UUID): void
}
5.4. 잔액 동기화
실시간 잔액 업데이트:
1. 블록 모니터링: 새 블록 → 관련 주소 확인 → 잔액 업데이트
2. 멤풀 모니터링: 미확인 TX 감지 → pending 잔액 반영
3. 폴링 주기: BTC 60초 / EVM 15초 (블록 시간 기반)
4. WebSocket: 가용 시 실시간 구독 (eth_subscribe)
6. Warm Tier MPC-TSS 통합
6.1. MPC-TSS 백엔드 통합 지점
MPCTSSConnector {
// 키 생성 (DKG)
initDKG(t: uint, n: uint, participants: [ServerId]): DKGSession
completeDKG(session: DKGSession): PublicKey
// 서명 세션
initSign(message: bytes, signers: [ServerId]): SignSession
collectPartialSigs(session: SignSession): Signature
// 키 리프레시
initKeyRefresh(participants: [ServerId]): RefreshSession
completeRefresh(session: RefreshSession): void
// 셰어 서버 관리
getServerStatus(serverId: ServerId): ServerStatus
addServer(config: ServerConfig): void
removeServer(serverId: ServerId, newT: uint): void
}
6.2. Warm Tier 자동 리밸런싱 엔진
RebalanceEngine {
// 잔액 모니터링
checkBalance(tier: "warm"): BalanceStatus
// 리밸런싱 판단
evaluateRebalance(): RebalanceAction?
// Warm < 하한선(3%) → 충전 요청 (Cold → Warm, 에어갭 필요)
// Warm > 상한선(15%) → 자동 환수 (Warm → Cold, MPC-TSS 서명)
// 자동 환수 실행
executeAutoSweep(amount: BigInt): TxHash
// 충전 요청 생성
createRefillRequest(amount: BigInt): Transaction
// Cold Tier 출금이므로 에어갭 다중 서명 필요
// Kill Switch
emergencySweep(): void
// Warm 전체 잔액 → 사전 지정 Cold 주소
// 모든 Warm 서명 즉시 중단
}
7. 비기능 요구사항
7.1. 가용성
항목
요구사항
가용성 목표
99.9% (연간 다운타임 < 8.76시간)
구성
Active-Standby (Model A) / Active-Active (Model B/C)
DB Failover
PostgreSQL Streaming Replication + 자동 Failover
API 무중단
Rolling Deploy (Blue-Green 또는 Canary)
7.2. 확장성
항목
방향
API 서버
Stateless → 수평 확장 (로드밸런서 뒤)
Event Store
PostgreSQL 파티셔닝 (월별)
Read DB
Read Replica 추가로 쿼리 부하 분산
블록체인 노드
체인별 독립 노드 풀
7.3. 백업/복구
항목
전략
DB 백업
일일 풀 백업 (PostgreSQL pg_dump) + WAL 아카이빙
Event Store 복구
WAL 리플레이로 특정 시점 복구 (PITR)
설정 백업
정책/화이트리스트 설정 일일 스냅샷
복구 목표
RPO < 1시간, RTO < 4시간
8. 기술 스택 권장사항
특정 기술을 강제하지 않되, 엔터프라이즈 보안 요구사항에 적합한 방향을 제시한다.
영역
권장
근거
데이터베이스
PostgreSQL 15+
ACID 보장, 감사 로그 무결성, JSONB (이벤트 페이로드), 파티셔닝
캐시
Redis 7+
세션 관리, 정책 캐시, UTXO 락 (TTL 지원)
이벤트 스토어
PostgreSQL + Outbox 패턴
EventStoreDB 대안 가능. PostgreSQL 단일 DB로 운영 단순화
API 런타임
Go / Rust / Node.js(TypeScript)
Go: 성능+동시성. Rust: 최고 보안. Node: 빠른 개발
메시지 큐
Redis Streams / RabbitMQ
이벤트 발행, 알림, 비동기 처리
모니터링
Prometheus + Grafana
메트릭 수집, 대시보드, 알림
로깅
구조화 로그 (JSON) + ELK/Loki
감사 로그 검색, 보안 이벤트 분석
컨테이너
Docker + Kubernetes (Model B/C)
배포 자동화, 스케일링
본 문서는 Phase 5 System Architecture Design의 일부로, Phase 3 정책 엔진(policy-engine.md), 감사 추적(audit-trail.md), RBAC(rbac-role-model.md)의 1차 계층 구현 아키텍처를 설계한다.
Phase 4 on-premise-zero-cloud.md의 3가지 배포 모델에 대응하는 모듈화 구조를 정의한다.
Phase 4 mpc-tss-warm-wallet.md의 Warm Tier 통합 지점을 백엔드 수준에서 명세한다.
관련 문서