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:
forge-bot 2026-07-19 09:58:39 +00:00
parent 8219b85f14
commit bec83c721e
73 changed files with 10705 additions and 35 deletions

77
db/schema.d/35-st.sql Normal file
View file

@ -0,0 +1,77 @@
-- st 모듈 (정산/수수료) 상세 테이블. Prefix 35 (30-rc 다음).
-- ECPG 서버/배치가 참조하는 정산 상세/수수료율/조정/지급/가맹점집계 테이블 + 시퀀스.
-- ---------------------------------------------------------------------------
-- 정산 상세 (st_settle_dtl) - 수수료 종류별 정산 라인
-- ---------------------------------------------------------------------------
CREATE SEQUENCE IF NOT EXISTS st_dtl_seq;
CREATE TABLE IF NOT EXISTS st_settle_dtl (
dtl_id BIGINT PRIMARY KEY,
settlement_id BIGINT NOT NULL DEFAULT 0,
purchase_id BIGINT NOT NULL DEFAULT 0,
merchant_id TEXT NOT NULL DEFAULT '',
fee_type TEXT NOT NULL, -- MDR/VAN/RELAY/WHT/VAT/ADJ/DELAYINT/CAP/RATE
amount BIGINT NOT NULL DEFAULT 0,
biz_date DATE NOT NULL,
created_at TIMESTAMPTZ NOT NULL DEFAULT now()
);
-- ---------------------------------------------------------------------------
-- 수수료 요율표 (st_fee_rate) - 구간별 요율 (basis points)
-- ---------------------------------------------------------------------------
CREATE TABLE IF NOT EXISTS st_fee_rate (
fee_type TEXT NOT NULL,
band_min BIGINT NOT NULL DEFAULT 0, -- 이 금액 이상에 적용
rate_bps BIGINT NOT NULL DEFAULT 0,
PRIMARY KEY (fee_type, band_min)
);
-- ---------------------------------------------------------------------------
-- 정산 조정 (st_adjust) - 가감/상계/취소 조정
-- ---------------------------------------------------------------------------
CREATE SEQUENCE IF NOT EXISTS st_adj_seq;
CREATE TABLE IF NOT EXISTS st_adjust (
adj_id BIGINT PRIMARY KEY,
settlement_id BIGINT NOT NULL DEFAULT 0,
purchase_id BIGINT NOT NULL DEFAULT 0,
delta BIGINT NOT NULL DEFAULT 0,
reason TEXT NOT NULL DEFAULT '',
biz_date DATE NOT NULL,
created_at TIMESTAMPTZ NOT NULL DEFAULT now()
);
-- ---------------------------------------------------------------------------
-- 지급 (st_payment) - 가맹점 지급 예정/보류/완료
-- ---------------------------------------------------------------------------
CREATE SEQUENCE IF NOT EXISTS st_pay_seq;
CREATE TABLE IF NOT EXISTS st_payment (
pay_id BIGINT PRIMARY KEY,
merchant_id TEXT NOT NULL,
net_amount BIGINT NOT NULL DEFAULT 0,
pay_date DATE NOT NULL,
status TEXT NOT NULL DEFAULT 'SCHEDULED', -- SCHEDULED/HELD/PAID/CANCELLED
biz_date DATE NOT NULL,
created_at TIMESTAMPTZ NOT NULL DEFAULT now()
);
-- ---------------------------------------------------------------------------
-- 가맹점 정산 집계 (st_merch_settle) - 배치/ST_BYMERCH가 upsert
-- ---------------------------------------------------------------------------
CREATE TABLE IF NOT EXISTS st_merch_settle (
merchant_id TEXT NOT NULL,
biz_date DATE NOT NULL,
txn_count BIGINT NOT NULL DEFAULT 0,
gross_amount BIGINT NOT NULL DEFAULT 0,
fee_amount BIGINT NOT NULL DEFAULT 0,
net_amount BIGINT NOT NULL DEFAULT 0,
updated_at TIMESTAMPTZ NOT NULL DEFAULT now(),
PRIMARY KEY (merchant_id, biz_date)
);
-- 수수료 구간 요율 시드 (ST_BANDRATE / ST_RATEAPPLY 가 조회)
INSERT INTO st_fee_rate (fee_type, band_min, rate_bps) VALUES
('MDR', 0, 25),
('MDR', 10000000, 20),
('VAN', 0, 10),
('RELAY', 0, 5)
ON CONFLICT (fee_type, band_min) DO NOTHING;