Initialize RTGS prototype repository

3센터 A-A-A RTGS 실시간총액결제 프로토타입 최초 버전관리 시작.
- backend: Kotlin/Gradle 멀티모듈(sequencer, common, 채널/센터 모듈)
- frontend: Vite + TS
- infra: docker-compose, prometheus/grafana, ELK 네이티브 스크립트
- loadtest(k6), sim(장애/순서/정합성 시나리오), docs(PoC 보고서/복원력방안)
This commit is contained in:
rtgs
2026-07-15 15:37:32 +09:00
commit 58ca23b5d9
140 changed files with 11832 additions and 0 deletions

74
infra/docker-compose.yml Normal file
View File

@@ -0,0 +1,74 @@
name: rtgs
# 로컬 경량 스택 (1센터 DC1). acs와 포트/프로젝트명(-p rtgs 자동: name=rtgs) 분리.
# 서비스(Sequencer/Chanel/Dior/Hermes/Prada)는 호스트에서 gradlew bootRun으로 구동하며
# 아래 인프라(localhost:9092/5433/27017)에 접속한다.
services:
postgres:
image: postgres:16
container_name: rtgs-postgres
environment:
POSTGRES_DB: rtgs
POSTGRES_USER: rtgs
POSTGRES_PASSWORD: rtgs
ports:
- "5433:5432" # acs=5432 회피
volumes:
- pgdata:/var/lib/postgresql/data
- ./init/postgres-init.sql:/docker-entrypoint-initdb.d/01-init.sql:ro
healthcheck:
test: ["CMD-SHELL", "pg_isready -U rtgs -d rtgs"]
interval: 5s
timeout: 3s
retries: 20
mongo:
image: mongo:7
container_name: rtgs-mongo
ports:
- "27017:27017"
volumes:
- mongodata:/data/db
kafka:
image: apache/kafka:3.8.1
container_name: rtgs-kafka
ports:
- "9092:9092"
environment:
# --- KRaft 단일 노드(broker+controller) ---
KAFKA_NODE_ID: "1"
KAFKA_PROCESS_ROLES: "broker,controller"
KAFKA_CONTROLLER_QUORUM_VOTERS: "1@localhost:9093"
# HOST(호스트의 gradle bootRun) / DOCKER(컨테이너 내 kafka-ui) 이중 리스너
KAFKA_LISTENERS: "HOST://:9092,DOCKER://:29092,CONTROLLER://:9093"
KAFKA_ADVERTISED_LISTENERS: "HOST://localhost:9092,DOCKER://kafka:29092"
KAFKA_CONTROLLER_LISTENER_NAMES: "CONTROLLER"
KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: "CONTROLLER:PLAINTEXT,HOST:PLAINTEXT,DOCKER:PLAINTEXT"
KAFKA_INTER_BROKER_LISTENER_NAME: "DOCKER"
# --- 단일 노드 복제/ISR ---
KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: "1"
KAFKA_TRANSACTION_STATE_LOG_REPLICATION_FACTOR: "1"
KAFKA_TRANSACTION_STATE_LOG_MIN_ISR: "1"
KAFKA_GROUP_INITIAL_REBALANCE_DELAY_MS: "0"
# --- 저널 전역 순서 보장: 기본 파티션 1개(단일 파티션이라야 전역 순서 성립) ---
KAFKA_NUM_PARTITIONS: "1"
KAFKA_AUTO_CREATE_TOPICS_ENABLE: "true"
# 선택: Kafka 관리 UI (docker compose --profile ui up)
kafka-ui:
image: provectuslabs/kafka-ui:latest
container_name: rtgs-kafka-ui
profiles: ["ui"]
ports:
- "8095:8080"
environment:
KAFKA_CLUSTERS_0_NAME: rtgs
KAFKA_CLUSTERS_0_BOOTSTRAPSERVERS: kafka:29092
depends_on:
- kafka
volumes:
pgdata:
mongodata: