# RTGS 프로토타입 아키텍처 설계서 | 항목 | 내용 | |---|---| | 문서명 | 소액 RTGS(실시간총액결제) 프로토타입 아키텍처 설계서 | | 버전 | v1.0 | | 작성일 | 2026-07-10 | | 작성 | 루비(AI) · 검토 양희정 팀장(한국은행 RTGS시스템팀) | | 분류 | SW 산출물 — 아키텍처 설계 | | 대상 시스템 | `C:\ai-dev\workspace\rtgs` (로컬 포터블 프로토타입, 1센터 DC1) | | 관련 문서 | 개발일지 · 워크플로우 · 로컬 테스트 시나리오 · 복원력방안(과제⑧ v2.0) · PoC 1~3차 결과보고 | --- ## 1. 개요 ### 1.1 목적 클라우드 PoC(3회차, "접수"까지 검증)의 아키텍처를 로컬에서 **업무기능 완결(신청→접수→청산·정산→완결 ACCC)** 로 재현하고, 복원력방안(Active-Active-Active)의 미검증 급소를 검증하기 위한 프로토타입의 **소프트웨어/배포 아키텍처**를 정의한다. ### 1.2 범위 - 1센터(DC1) 로컬 구성의 논리·물리(OS-WAS-DB) 아키텍처, SW 스택, 데이터/인터페이스/보안 설계. - 다센터(DC2/DC3) A-A-A 확장 설계는 §11에 방향만 제시(구현은 고사양 PC 이관 후). ### 1.3 용어 | 약어 | 의미 | |---|---| | RTGS | Real-Time Gross Settlement(실시간총액결제) | | A-A-A | Active-Active-Active(3센터 동시 가동) | | BMI | Business Message Identifier(거래식별자 22자리) | | 저널 | 전역순번이 부여된 처리 명단(Kafka 단일 파티션) | | 정족수 | Quorum(N/2+1). 3센터=2 | | 선저널 | Write-ahead journal(잔액연산 전 순번 확정) | | WAS | Web Application Server(본 시스템은 Spring Boot 내장 Tomcat) | --- ## 2. 아키텍처 원칙 (복원력방안 반영) 1. **단일 전역 순번기**로 입구에서 전역순번 부여 → 저널 → N센터 **결정론적 재생**(동일순서·동일업무). 2. **원장 = RDB(PostgreSQL) 강한 일관성** — 잔액 확정의 권위 저장소. 3. **정족수(2/3) + 펜싱**으로 split-brain 차단(1센터=자기 과반, 구조 선반영). 4. **선(先)저널(write-ahead)** 후 잔액연산 → 노드사(死) 무손실 승계. 5. **완결 규율** — 과반 확정 후 최종(ACCC). 6. **경량 명령문 + 원전문 해시(SHA-256)** — 센터 간엔 수백B 구조체만 복제, 원전문은 별도 저장. 7. **순서=Sequencer(상태O) / 분산·관문=Gucci·GSLB(상태X)** 역할 분리. 8. **포터블 네이티브** — 모든 런타임을 `C:\ai-dev\apps` 하위에 무설치 배치(회사 PC 가상화 차단으로 Docker 불가). --- ## 3. 논리 아키텍처 > **그림 3-0. 업무 흐름도(기준)** — 3센터 A-A-A 동일 순서·동일 업무 처리 > > ![RTGS 업무 흐름도](2센터흐름도.png) ### 3.1 계층 구조 **그림 3-1. 컴포넌트·데이터 흐름 (7개 서비스)** ```mermaid flowchart TD EXT["참가기관 / k6"] --> G["Gucci 관문 :8095
인증·유량·재전송·콜백"] CON["운영·관리 콘솔
React :5174"] --> C CON --> LV["LouisVuitton :8099
시스템관리"] G --> C["Chanel :8091
접수·검증·통보"] C -->|rtgs.inbound| K K["Kafka :9092
저널/결과/통보"] --> S["Sequencer :8090
전역순번"] S -->|rtgs.journal| K K --> D["Dior :8092
접수동기화"] K --> H["Hermes :8093
정산·원장엔진"] H -->|rtgs.result| K K --> P["Prada :8094
완결"] P -->|rtgs.notify| K D --> PG[("PostgreSQL :5433
원장")] H --> PG P --> PG C --> PG G -->|콜백 송부| EXT ``` **그림 3-2. 계층 구조** ``` ┌── 표현 계층 ─────────────────────────────────────────────┐ │ 운영/관리 콘솔 (React + Vite, :5174) │ └───────────────┬──────────────────────────────────────────┘ ┌── 경계/관문 계층 ────────────▼───────────────────────────┐ │ Gucci(:8095) — 로그인·API인증·유량제어·재전송차단·결과콜백 │ └───────────────┬──────────────────────────────────────────┘ ┌── 접속/연계 계층 ────────────▼───────────────────────────┐ │ Chanel(:8091) — pacs.008 접수·XSD검증·경량화·결과통보 │ └───────────────┬──────────────────────────────────────────┘ ┌── 코어(순번/정산) 계층 ──────▼───────────────────────────┐ │ Sequencer(순번) → [저널] → Dior(접수동기화) │ │ Hermes(정산·원장엔진) │ │ Prada(완결·결과동기화) │ └───────────────┬──────────────────────────────────────────┘ ┌── 데이터/원장 계층 ──────────▼───────────────────────────┐ │ PostgreSQL(원장·강한 일관성) · Kafka(입구/저널/결과/통보) │ └───────────────┬──────────────────────────────────────────┘ ┌── 관리/관측 계층 ────────────▼───────────────────────────┐ │ LouisVuitton(:8099) 시스템관리 · ELK 로그(9200/5000/5601)│ └──────────────────────────────────────────────────────────┘ ``` ### 3.2 서비스(컴포넌트) 구성 — 7개 (명품 코드네임) | # | 서비스 | 코드네임 의미 | 유형 | 논리포트 | 책임 | |---|---|---|---|---|---| | 1 | **Sequencer** | 전역 순번기 | Headless(JVM) | 8090 | 전역순번·결정론적값 확정 → 저널 발행. **순번 영속화**(재기동 시 MAX(global_seq) 복원) | | 2 | **Chanel** | Contact Hub…Entry Liaison | **Web(Tomcat)** | 8091 | pacs.008 접수·XSD검증·경량화·원전문 저장·입구 발행 / **결과통보**(pacs.002 생성·아웃박스) | | 3 | **Dior** | Data Integration…Relay | Headless(JVM) | 8092 | 저널 소비 → 원장 PDNG 기록(접수 동기화) | | 4 | **Hermes** | …Rapid Memory Execution…Settlement | Headless(JVM) | 8093 | 저널 순차소비(cc=1)·순서교정·선저널·당좌 차/대변(강한 일관성)·ACSP | | 5 | **Prada** | Persistent Repository…Aggregation | Headless(JVM) | 8094 | 결과 소비·완결 규율(과반)·ACCC 확정·조회사본·**결과통보 발행** | | 6 | **Gucci** | Global User Communication Control Interface | **Web(Tomcat)** | 8095 | 외부 경계 관문: 로그인·JWT·API인증·유량제어·재전송차단·리버스프록시·결과 콜백송부 | | 7 | **LouisVuitton** | Leading Operations Unified Info Systems… | **Web(Tomcat)** | 8099 | 시스템관리: DB초기화·코드·사용자권한·대사 대시보드 | > **유형 구분**: Web 서비스(Chanel·Gucci·LouisVuitton)만 내장 Tomcat으로 HTTP 리슨. 코어 처리 서비스 > (Sequencer·Dior·Hermes·Prada)는 Kafka 컨슈머 JVM. **관측성(B4)** 도입으로 내장 Tomcat을 > 활성화해 예약 포트(8090/8092/8093/8094)에 `/actuator`(health·prometheus)만 노출한다(업무 HTTP 아님). --- ## 4. 물리(배포) 아키텍처 — OS · WAS · DB 스택 ★ ### 4.1 배포 토폴로지 (로컬 1센터, 단일 호스트) ``` ┌──────────────── 물리 호스트 1대 (개발 PC, Windows 11) ────────────────┐ │ 포터블 루트: C:\ai-dev\apps (런타임) · C:\ai-dev\home (데이터/상태) │ │ │ │ [WAS 계층 — JVM 프로세스] │ │ 내장 Tomcat: Chanel:8091 · Gucci:8095 · LouisVuitton:8099 │ │ Headless JVM: Sequencer · Dior · Hermes · Prada (전부 JDK 21) │ │ │ JDBC(5433) │ Kafka(9092) │ │ ▼ ▼ │ │ [DB 계층] PostgreSQL 16.4 :5433 [MQ] Apache Kafka 3.8.1(KRaft):9092 │ │ data: home\pgsql-data data: home\kafka\kraft-logs │ │ │ │ [프론트] Node.js 26 + Vite dev server :5174 (개발) │ │ [관측] Elasticsearch:9200 · Logstash:5000(TCP) · Kibana:5601 │ │ data: home\es-data │ └────────────────────────────────────────────────────────────────────────┘ ``` * 프로토타입은 **단일 호스트에 전 구성요소 공존**. 운영/BMT는 계층별 물리 분리 + 3센터 배치(§11). **그림 4-1. 배포 스택 (단일 호스트)** ```mermaid flowchart TB subgraph HOST["개발 PC · Windows 11 · C:/ai-dev"] subgraph WAS["WAS · JDK21 · Spring Boot 내장 Tomcat"] W1["Chanel :8091"] W2["Gucci :8095"] W3["LouisVuitton :8099"] end subgraph CORE["Headless JVM · Kafka 컨슈머"] c1["Sequencer"] c2["Dior"] c3["Hermes"] c4["Prada"] end DB[("PostgreSQL 16.4 :5433")] MQ["Kafka 3.8.1 KRaft :9092"] OBS[("ELK 8.15.2
9200/5000/5601")] FE["Vite :5174 · Node 26"] end FE --> W1 WAS --> DB WAS --> MQ CORE --> DB CORE --> MQ WAS -->|로그| OBS CORE -->|로그| OBS ``` ### 4.2 OS-WAS-DB 스택 매트릭스 | 구분 | 구성요소 | 제품/버전 | 포트 | 데이터 경로 | 비고 | |---|---|---|---|---|---| | **OS** | 운영체제 | Windows 11 Enterprise 10.0.26100 (x64) | — | — | CPU 가상화 차단 → Docker 미사용, 네이티브 배치 | | **런타임** | JVM | Eclipse Temurin **JDK 21.0.11 LTS** | — | `apps\jdk-21` | 빌드·실행 공통(전역 JAVA_HOME은 jdk-26 별도) | | **WAS** | 앱서버 | Spring Boot **3.3.4** 내장 **Apache Tomcat** | 8091/8095/8099 | — | Web 3종. 코어 4종은 headless JVM | | **언어/빌드** | 언어 | **Kotlin 2.0.20** / Java 21 toolchain | — | — | — | | | 빌드 | **Gradle 8.10.2** (Kotlin DSL, 멀티모듈) | — | `home\gradle` | JDK26 미지원 → JDK21 고정 | | | DB 마이그레이션 | **Flyway**(Spring Boot 관리 버전) | — | `db/migration/V*.sql` | 스키마 형상관리(LouisVuitton 실행) | | **DB(원장)** | RDBMS | **PostgreSQL 16.4** | 5433 | `home\pgsql-data` | 강한 일관성 원장. acs(5432) 회피 | | **MQ/브로커** | 이벤트 | **Apache Kafka 3.8.1** (KRaft, 무 Zookeeper) | 9092 | `home\kafka\kraft-logs` | 입구·저널·결과·통보. 저널은 단일 파티션 | | **로그** | 검색엔진 | **Elasticsearch 8.15.2** | 9200 | `home\es-data` | 인덱스 `rtgs-logs-*` | | | 수집 | **Logstash 8.15.2** | 5000(TCP) | — | json_lines → ES. encoder 7.4 | | | 시각화 | **Kibana 8.15.2** | 5601 | — | Discover "RTGS Logs" | | **메트릭** | 수집 | **Prometheus 3.13.0** | 9090 | `home\prometheus-data` | 7서비스 `/actuator/prometheus` 스크랩(5s), `infra\start-prometheus.cmd` | | | 시각화 | **Grafana 13.1.0** (OSS) | 3000 | `home\grafana-data` | Prometheus 데이터소스+RTGS Overview 대시보드 자동, `infra\start-grafana.cmd` | | **프론트** | 런타임 | **Node.js 26.3.0** | — | — | 개발 서버 | | | 프레임워크 | **React 18.3.1 + Vite 5.4.2 + TS 5.5.4** | 5174 | — | 운영/관리 콘솔 | | **부하** | 테스트 | **k6 0.56.0** | — | — | 성능/스파이크 | | **(미사용)** | 문서DB | MongoDB 7.0.14 | (27017) | — | EDR 파일락 크래시 → PostgreSQL로 대체 | ### 4.3 프로세스·환경 - 기동: `run-dc1.cmd`(인프라 + 7서비스) · `infra\start-elk-native.cmd`(ELK) · `run-frontend.cmd`(콘솔). 종료: `stop-dc1.cmd`. - 환경변수: `C:\ai-dev\scripts\env.cmd`(JDK21_HOME/GRADLE_HOME/PATH). 센터 파라미터 `CENTER_ID=DC1`, `CENTER_COUNT=1`. - 각 서비스는 `java -jar -0.1.0.jar`(Spring Boot fat jar)로 독립 실행. --- ## 5. 데이터 아키텍처 ### 5.1 저장소 역할 분리 | 저장소 | 역할 | 근거 | |---|---|---| | PostgreSQL | **권위 원장**(잔액·거래상태·선저널·조회사본·원전문·통보·사용자·콜백) | 강한 일관성(이중지급 방지) | | Kafka | 입구 완충 + **전역순서 저널 전파** + 결과/통보 | 순서 공유·비동기·완충 | | (MongoDB) | 원전문/조회사본 (클라우드/BMT) | 로컬은 EDR 이슈로 PostgreSQL 대체 | ### 5.2 PostgreSQL 테이블 (DB: `rtgs`) | 테이블 | 용도 | 소유(주 기록) | |---|---|---| | `account` | 참가기관 당좌계좌 잔액(19개 기관 시드) | Hermes | | `transfer` | 거래 원장(BMI PK, 상태·순번·금액) | Dior/Hermes/Prada | | `journal_log` | 선저널(global_seq PK) | Hermes | | `raw_message` | 원전문 pacs.008 XML + SHA-256 | Chanel | | `settlement_view` | 조회 전용 사본(완결 확정) | Prada | | `notification` | 결과통보 아웃박스(pacs.002, delivered/attempts) | Chanel(적재)/Gucci(송부확정) | | `app_user` | 사용자·권한(ADMIN/ORG_S/ORG_R) + secret | LouisVuitton/Gucci | | `institution_endpoint` | 기관 콜백 URL 레지스트리 | Gucci | * 컬럼 한글명은 `COMMENT ON COLUMN`(데이터 사전)으로 관리 → 화면 라벨의 단일 출처. * **스키마 형상관리 = Flyway**: `backend/louisvuitton/src/main/resources/db/migration/V*.sql`가 유일 출처. LouisVuitton 기동 시 자동 적용(`flyway_schema_history` 기록). 기존 DB는 baseline 처리, 신규 DB는 V1부터 생성. 변경은 새 `V+1__*.sql` 추가(수기 ALTER·기적용 마이그레이션 수정 금지). ### 5.3 Kafka 토픽 | 토픽 | 발행 → 소비 | 파티션 | 용도 | |---|---|---|---| | `rtgs.inbound` | Chanel → Sequencer | 1 | 접수 원시 요청 | | `rtgs.journal` | Sequencer → Dior·Hermes | **1(전역순서)** | 전역순번 저널 | | `rtgs.result` | Hermes → Prada | 1 | 결제 결과(ACSP/RJCT) | | `rtgs.notify` | Prada → Chanel | 1 | 완결 결과통보 트리거 | ### 5.4 상태 전이 (TxSts) `RCVD`(접수) → `ACTC`(순번) → `PDNG`(원장기록) → `ACSP`(정산반영) → `ACCC`(입금처리완료) / 실패 `RJCT`. **그림 5-1. 상태 전이도** ```mermaid stateDiagram-v2 [*] --> RCVD: 접수(Chanel) RCVD --> ACTC: 순번(Sequencer) ACTC --> PDNG: 원장기록(Dior) PDNG --> ACSP: 정산(Hermes) ACSP --> ACCC: 완결·과반(Prada) ACCC --> [*] RCVD --> RJCT: 검증실패(XSD/업무규칙) ACSP --> RJCT: 잔액부족/미등록기관 RJCT --> [*] ``` --- ## 6. 인터페이스 설계 ### 6.1 전문(ISO 20022, 공식 XSD) | 전문 | 표준/버전 | 방향 | 검증 | |---|---|---|---| | 결제의뢰 | **pacs.008.001.08** (FIToFICstmrCdtTrf) | 참가기관 → RTGS | 공식 XSD(XXE 차단, DOM 파싱) | | 결과통보 | **pacs.002.001.10** (FIToFIPmtStsRpt) | RTGS → 참가기관 | 정식 네임스페이스 생성 | | 식별자 | BMI 22자리 = 영업일(8)+기관(4)+일련(10) | — | 멱등키 | ### 6.2 주요 API | 계층 | 메서드·경로 | 인증 | 설명 | |---|---|---|---| | 관문(Gucci) | `POST /gucci/auth/login` | — | 로그인 → JWT 발급 | | | `POST /gucci/pay/customer` | Bearer+nonce | 인증 접수(→Chanel 프록시) | | | `GET /gucci/inquiry/{bmi}` · `/accounts` | Bearer | 인증 조회 | | | `GET /gucci/health/centers` · `GET/PUT /gucci/callbacks` | —/ADMIN | 헬스·콜백 레지스트리 | | 코어(Chanel) | `POST /pay/customer`, `GET /inquiry/{bmi}`, `/accounts` | (내부) | 접수·조회 | | | `GET /notifications[/{bmi}]`, `/rawmessage/{bmi}`, `/meta/labels` | (내부) | 통보·원전문·데이터사전 | | 관리(LouisVuitton) | `POST /admin/reset`, `/admin/institutions|users|status-codes|summary|ledger/*` | (관리) | 시스템관리 | --- ## 7. 처리 흐름 (요약) ``` 신청 → [Chanel] RCVD·XSD·경량화 → rtgs.inbound → [Sequencer] 전역순번·ACTC → rtgs.journal ├ [Dior] PDNG(접수동기화) └ [Hermes] 순서교정·선저널·잔액 차/대변(강한 일관성)·ACSP → rtgs.result → [Prada] 과반확정·ACCC·조회사본 → (커밋 후) rtgs.notify → [Chanel] pacs.002 생성·아웃박스 → [Gucci] 콜백 송부(재시도/ACK) ``` **그림 7-1. 거래 처리 시퀀스** ```mermaid sequenceDiagram participant ORG as 참가기관(ORG_S) participant G as Gucci participant C as Chanel participant S as Sequencer participant H as Hermes participant P as Prada ORG->>G: 로그인 → JWT ORG->>G: pacs.008 (Bearer,nonce) G->>C: 인증·검사 후 프록시 C-->>ORG: pacs.002 (RCVD) C->>S: rtgs.inbound S->>H: rtgs.journal (ACTC, Dior도 소비→PDNG) H->>H: 선저널·잔액 차/대변 (ACSP) H->>P: rtgs.result P->>P: 과반 확정 (ACCC) P->>C: rtgs.notify C->>G: 결과통보(pacs.002) G->>ORG: 콜백 송부 (ACK) ``` * 상세는 「RTGS 프로토타입 워크플로우.md」 참조. --- ## 8. 비기능 요구 설계 ### 8.1 성능 - 목표 10,000~20,000 TPS(개요). 저널 **단일 파티션**이 순서 보장의 대가로 순번기 처리량 상한이 됨 → 성능 급소로 계측(sim). - Gucci **유량제어**(기관별 50/10s 기본)로 코어·순번기 보호(백프레셔). ### 8.2 가용성 (정족수) - 3센터 정족수=2: **1센터 다운=서비스 지속 / 2센터 다운=안전 정지**(장애). 1센터 로컬은 자기=과반. - Web 서비스는 무상태(세션리스 JWT) → 수평 확장·GSLB 분산 적합. ### 8.3 복원성 (무손실) - **선저널 + Kafka 오프셋 재생**: 원장엔진(Hermes) 재기동 시 유실 없이 승계. - **순번 영속화**: 순번기 재기동 시 MAX(global_seq)에서 이어서 발번. ### 8.4 데이터 정합성 - 전역순번 직렬화 + 강한 일관성 트랜잭션 → **이중지급 0 / 총액 보존** 불변식. 원장=저널=조회사본 대사. - 멱등성: BMI 기준 `ON CONFLICT` upsert(중복 접수 무해). ### 8.5 보안 | 영역 | 설계 | |---|---| | 인증 | Gucci 로그인 → **JWT(HS256)**. 자격증명=app_user(권한 마스터), 비밀키 **BCrypt+솔트 해시** 저장(기동 시 평문 자동 승격) | | 인가 | 역할(ADMIN/ORG_S/ORG_R) + **기관 바인딩**(토큰 org == 전문 송신기관) | | 관리자 콘솔 | LouisVuitton `/admin/**` 은 **ADMIN JWT 필수**(인터셉터 검증). Gucci 발급 토큰을 동일 서명키로 검증. 초기암호 변경(must_change_password) 지원. 테스트계정 a/1 | | API 보호 | 유량제어 · **재전송 차단**(nonce+timestamp) · 감사로그(ELK) | | 전문 무결성 | 원전문 **SHA-256** 해시, XSD 검증, **XXE 차단**(DTD/외부엔티티 비허용) | | 전달 보장 | 결과 콜백 at-least-once(재시도+ACK) + 수신측 dedup 전제 | | (후속) | mTLS·비밀키 해시/회전·펜싱 토큰 | ### 8.6 관측성 - **로그**: 전 서비스 Logback(JSON, `service`/`center` 필드) → Logstash(:5000) → ES(`rtgs-logs-*`) → Kibana. - **메트릭(B4)**: 전 서비스 Micrometer → `/actuator/prometheus` 노출. 업무 메트릭 `rtgs.settlements`(정산·status), `rtgs.settle`(정산 지연 Timer), `rtgs.finality`(완결·status), `rtgs.journal.gap`(순서 gap), 접수 TPS/지연은 `http_server_requests`(Chanel /pay), Kafka consumer lag는 Micrometer 자동. **Prometheus 3.13.0(:9090)** 설치·7타깃 스크랩(5s) + **Grafana 13.1.0(:3000)** "RTGS Overview" 대시보드(접수 TPS·정산율·완결·Kafka lag·JVM) 완료. - **헬스(B5)**: 전 서비스(헤드리스 포함)가 `service_heartbeat`에 주기 하트비트 → LouisVuitton `/admin/health` 및 관리자 대시보드에서 UP/STALE 표시(DB 기반 liveness). - 감사 이벤트(AUTH/AUTHZ/RATE/REPLAY/ORGBIND/PAY/DELIVER)와 처리 로그 중앙 수집. --- ## 9. 검증 설계 (복원력 급소, sim/) | ID | 축 | 검증 | 상태 | |---|---|---|---| | S1 | 기능성 | 정합성·총액보존·계층대사 | **PASS** | | S2 | 복원성 | Hermes 강제종료·재기동 무손실 승계 | **PASS** | | S4 | 기능성 | 저널 순번 역전 주입 → 재정렬 | **PASS** | | S3/S5 | 가용성/성능 | 정족수·펜싱 / 스파이크 완충 | 다센터(§11) | --- ## 10. 형상·배포 운영 - 소스: `backend`(Gradle 멀티모듈 7+1 common) · `frontend` · `infra` · `iso20022` · `sim` · `loadtest` · `docs`. - 산출물: 서비스별 Spring Boot fat jar(`*-0.1.0.jar`). 프론트는 Vite 빌드. - 스키마: **Flyway** `db/migration/V1__baseline.sql`(+ 이후 V2…) — LouisVuitton 기동 시 자동 적용. (구 `postgres-init.sql`은 legacy) - 반영: 백엔드=재빌드+해당 서비스 재기동(무관 서비스 무중단), 프론트=Vite HMR. --- ## 11. 확장 아키텍처 (다센터 A-A-A, 향후 · 고사양 PC 이후) ``` ┌── DC1 (7서비스 + PostgreSQL rtgs_dc1) [단일 Sequencer(리더선출)]─저널(Kafka 공유)─┼── DC2 (동일 + rtgs_dc2) └── DC3 (동일 + rtgs_dc3) · 컨슈머 그룹 센터별 분리 · 센터별 DB/포트 오프셋 · 정족수 2/3 자동전환 · 펜싱 · Gucci 센터별 배치 + 앞단 GSLB(무상태 라우팅) · 3센터 데이터 동일성 대사 ``` - 순번기: active-standby 리더선출(4번째 사이트 불필요) — GSLB로 순서 결정 금지(무상태라 순서 권위 없음). - 헬스체크(Gucci G3): 관측·멤버십 입력용, 실제 페일오버는 정족수+펜싱(단순 ping 페일오버는 split-brain). --- ## 12. 제약·전제·미결 - **제약**: 단일 호스트(가상화 차단으로 Docker 불가) · 로컬 1센터 · MongoDB 미사용. - **전제**: 사전확인(잔액·계좌)은 참가기관(클라이언트) 책임, RTGS 코어는 기관 당좌계좌 간 이체만. - **미결/후속**: 다센터 S3/S5, 프론트 Gucci 경유 로그인 UI, mTLS·비밀키 해시, Logstash 힙 256m, PC 이관. --- ## 부록 A. 포트 일람 Sequencer(논리)8090 · Chanel 8091 · Dior(논리)8092 · Hermes(논리)8093 · Prada(논리)8094 · Gucci 8095 · LouisVuitton 8099 · Frontend 5174 · PostgreSQL 5433 · Kafka 9092 · ES 9200 · Logstash 5000 · Kibana 5601. (acs와 전면 분리: acs 8080/5173/5432) ## 부록 B. 디렉터리 ``` C:\ai-dev\apps\ 포터블 런타임(jdk-21, gradle, kafka, postgresql, elk, k6, nodejs) C:\ai-dev\home\ 데이터·상태(pgsql-data, kafka, es-data, gradle 캐시) C:\ai-dev\workspace\rtgs\ backend · frontend · infra · iso20022 · sim · loadtest · docs ``` *본 설계서는 개발 진행에 따라 갱신한다.*