Phase 2b: 11개 모듈 전량 실동작 (333 서비스, 전서버 부팅)
- 10개 모듈 추가/확장(au py rc st lg cl mm vl mg cm), 각 30 서비스 = 330 + tmsrv - build.sh 자동발견으로 11 모듈서버 + dbio 라이브러리 23 + 배치 22 빌드 - schema.d 11파일 → 75 테이블, 모듈별 disjoint - 부팅 리소스 규명: fs.mqueue.queues_max=8192(330큐>256), NDRX_MSGSIZEMAX 16000· MSGMAX 50(큐당 5.6MB→0.8MB), msgqueue ulimit 2GB → 전 12서버 runok - 검증: xadmin psc 333 AVAIL, 매입체인 XA 커밋, prepared_xacts=0 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
parent
8219b85f14
commit
bec83c721e
73 changed files with 10705 additions and 35 deletions
119
db/schema.d/60-mg.sql
Normal file
119
db/schema.d/60-mg.sql
Normal file
|
|
@ -0,0 +1,119 @@
|
|||
-- mg 모듈 (전문게이트웨이 / message gateway) 스키마
|
||||
-- ISO8583 전문 로그/라우팅/채번/채널세션/큐/통계 테이블.
|
||||
-- Loaded into PostgreSQL on first boot (docker-entrypoint-initdb.d). Prefix 60.
|
||||
|
||||
-- ---------------------------------------------------------------------------
|
||||
-- 전문 채번 (STAN / 전문 시퀀스) - MG_STAN 이 nextval 로 채번
|
||||
-- ---------------------------------------------------------------------------
|
||||
CREATE SEQUENCE IF NOT EXISTS mg_stan_seq; -- System Trace Audit Number
|
||||
CREATE SEQUENCE IF NOT EXISTS mg_msg_seq; -- 전문 로그 PK
|
||||
CREATE SEQUENCE IF NOT EXISTS mg_route_seq; -- 라우팅 룰 PK
|
||||
CREATE SEQUENCE IF NOT EXISTS mg_queue_seq; -- 송수신 큐 PK
|
||||
|
||||
-- 이름있는 카운터 (세션 시퀀스 등 채번용 - MG_SESSION/MG_KEYEXCH)
|
||||
CREATE TABLE IF NOT EXISTS mg_seq (
|
||||
seq_name TEXT PRIMARY KEY,
|
||||
seq_val BIGINT NOT NULL DEFAULT 0,
|
||||
updated_at TIMESTAMPTZ NOT NULL DEFAULT now()
|
||||
);
|
||||
|
||||
-- ---------------------------------------------------------------------------
|
||||
-- 전문 로그 (mg_msg_log) - 수신/송신 전문의 원장
|
||||
-- ---------------------------------------------------------------------------
|
||||
CREATE TABLE IF NOT EXISTS mg_msg_log (
|
||||
msg_id BIGINT PRIMARY KEY,
|
||||
stan BIGINT NOT NULL, -- 전문 추적번호
|
||||
mti TEXT NOT NULL, -- 전문유형(0200/0210/0800...)
|
||||
channel TEXT NOT NULL, -- 채널ID
|
||||
direction TEXT NOT NULL, -- IN / OUT
|
||||
proc_code TEXT NOT NULL DEFAULT '000000', -- 처리코드
|
||||
bitmap TEXT NOT NULL DEFAULT '', -- 비트맵(hex)
|
||||
amount BIGINT NOT NULL DEFAULT 0,
|
||||
pan TEXT NOT NULL DEFAULT '', -- (마스킹된) 카드번호
|
||||
mac TEXT NOT NULL DEFAULT '', -- 메시지 인증코드
|
||||
rc TEXT NOT NULL DEFAULT '00', -- 응답코드
|
||||
raw_msg TEXT NOT NULL DEFAULT '', -- 원 전문
|
||||
status TEXT NOT NULL DEFAULT 'R', -- R=수신, S=송신, A=ACK, N=NACK, C=확인
|
||||
biz_date DATE NOT NULL,
|
||||
created_at TIMESTAMPTZ NOT NULL DEFAULT now()
|
||||
);
|
||||
CREATE INDEX IF NOT EXISTS ix_mg_msg_log_stan ON mg_msg_log (stan);
|
||||
CREATE INDEX IF NOT EXISTS ix_mg_msg_log_chan ON mg_msg_log (channel, biz_date);
|
||||
|
||||
-- ---------------------------------------------------------------------------
|
||||
-- 라우팅 룰 (mg_route) - 채널/전문유형 -> 목적지 매핑
|
||||
-- ---------------------------------------------------------------------------
|
||||
CREATE TABLE IF NOT EXISTS mg_route (
|
||||
route_id BIGINT PRIMARY KEY,
|
||||
channel TEXT NOT NULL,
|
||||
mti TEXT NOT NULL,
|
||||
dest TEXT NOT NULL, -- 목적지 서비스/노드
|
||||
priority INTEGER NOT NULL DEFAULT 100,
|
||||
active BOOLEAN NOT NULL DEFAULT true,
|
||||
biz_date DATE NOT NULL,
|
||||
created_at TIMESTAMPTZ NOT NULL DEFAULT now()
|
||||
);
|
||||
CREATE INDEX IF NOT EXISTS ix_mg_route_lookup ON mg_route (channel, mti, active);
|
||||
|
||||
-- ---------------------------------------------------------------------------
|
||||
-- 채널 (mg_channel) - 세션/사인온 상태
|
||||
-- ---------------------------------------------------------------------------
|
||||
CREATE TABLE IF NOT EXISTS mg_channel (
|
||||
channel TEXT PRIMARY KEY,
|
||||
name TEXT NOT NULL DEFAULT '',
|
||||
status TEXT NOT NULL DEFAULT 'DOWN', -- UP / DOWN / SIGNON / SIGNOFF
|
||||
session_key TEXT NOT NULL DEFAULT '',
|
||||
last_stan BIGINT NOT NULL DEFAULT 0,
|
||||
signon_at TIMESTAMPTZ,
|
||||
updated_at TIMESTAMPTZ NOT NULL DEFAULT now()
|
||||
);
|
||||
|
||||
-- ---------------------------------------------------------------------------
|
||||
-- 송수신 큐 (mg_queue) - 재전송 대상 관리
|
||||
-- ---------------------------------------------------------------------------
|
||||
CREATE TABLE IF NOT EXISTS mg_queue (
|
||||
queue_id BIGINT PRIMARY KEY,
|
||||
stan BIGINT NOT NULL,
|
||||
channel TEXT NOT NULL,
|
||||
mti TEXT NOT NULL DEFAULT '',
|
||||
payload TEXT NOT NULL DEFAULT '',
|
||||
status TEXT NOT NULL DEFAULT 'Q', -- Q=대기, S=송신, D=완료, F=실패
|
||||
retry_cnt INTEGER NOT NULL DEFAULT 0,
|
||||
biz_date DATE NOT NULL,
|
||||
created_at TIMESTAMPTZ NOT NULL DEFAULT now(),
|
||||
updated_at TIMESTAMPTZ NOT NULL DEFAULT now()
|
||||
);
|
||||
CREATE INDEX IF NOT EXISTS ix_mg_queue_status ON mg_queue (status, biz_date);
|
||||
|
||||
-- ---------------------------------------------------------------------------
|
||||
-- 채널 일별 통계 (mg_stat) - mg_stat_batch 가 채움
|
||||
-- ---------------------------------------------------------------------------
|
||||
CREATE TABLE IF NOT EXISTS mg_stat (
|
||||
channel TEXT NOT NULL,
|
||||
biz_date DATE NOT NULL,
|
||||
in_cnt BIGINT NOT NULL DEFAULT 0,
|
||||
out_cnt BIGINT NOT NULL DEFAULT 0,
|
||||
err_cnt BIGINT NOT NULL DEFAULT 0,
|
||||
amount_sum BIGINT NOT NULL DEFAULT 0,
|
||||
updated_at TIMESTAMPTZ NOT NULL DEFAULT now(),
|
||||
PRIMARY KEY (channel, biz_date)
|
||||
);
|
||||
|
||||
-- ---------------------------------------------------------------------------
|
||||
-- Seed: 채널 + 기본 라우팅 룰
|
||||
-- ---------------------------------------------------------------------------
|
||||
INSERT INTO mg_channel (channel, name, status) VALUES
|
||||
('CH01', 'VAN 게이트웨이', 'DOWN'),
|
||||
('CH02', '매입사 링크', 'DOWN'),
|
||||
('CH03', '해외 네트워크', 'DOWN')
|
||||
ON CONFLICT (channel) DO NOTHING;
|
||||
|
||||
INSERT INTO mg_route (route_id, channel, mti, dest, priority, active, biz_date) VALUES
|
||||
(nextval('mg_route_seq'), 'CH01', '0200', 'ACQUIRE', 10, true, '2026-07-19'),
|
||||
(nextval('mg_route_seq'), 'CH01', '0800', 'MG_ECHO', 20, true, '2026-07-19'),
|
||||
(nextval('mg_route_seq'), 'CH02', '0200', 'ACQ_EDC', 10, true, '2026-07-19')
|
||||
ON CONFLICT DO NOTHING;
|
||||
|
||||
INSERT INTO mg_seq (seq_name, seq_val) VALUES
|
||||
('SESSION', 0), ('KEYVER', 0)
|
||||
ON CONFLICT (seq_name) DO NOTHING;
|
||||
Loading…
Add table
Add a link
Reference in a new issue