9f883274d0
카드 매입 승인 경로 Spring Boot 3 전환 (ACX-E2E-1785394564819)
Verify / source-contract (push) Has been cancelled
2026-07-30 09:33:51 +00:00
8393aac0dd
카드 매입 승인 경로 Spring Boot 3 전환 (ACX-E2E-1785394564819)
Verify / source-contract (push) Waiting to run
2026-07-30 09:33:49 +00:00
2cec4b0a16
카드 매입 승인 경로 Spring Boot 3 전환 (ACX-E2E-1785394564819)
Verify / source-contract (push) Has been cancelled
2026-07-30 09:33:48 +00:00
ad8fb595d0
카드 매입 승인 경로 Spring Boot 3 전환 (ACX-E2E-1785394564819)
Verify / source-contract (push) Waiting to run
2026-07-30 09:33:47 +00:00
6221af0ab6
카드 매입 승인 경로 Spring Boot 3 전환 (ACX-E2E-1785394564819)
Verify / source-contract (push) Waiting to run
2026-07-30 09:33:45 +00:00
f8b4402cc7
카드 매입 승인 경로 Spring Boot 3 전환 (ACX-E2E-1785394564819)
Verify / source-contract (push) Waiting to run
2026-07-30 09:33:44 +00:00
4d18481507
카드 매입 승인 경로 Spring Boot 3 전환 (ACX-E2E-1785394564819)
Verify / source-contract (push) Has been cancelled
2026-07-30 09:33:43 +00:00
7d1e9e5a5b
ci: allow manual PR verification
Verify / source-contract (push) Successful in 11s
2026-07-30 08:48:25 +00:00
94a894dc93
ci: add Forgejo verification workflow
Verify / source-contract (push) Successful in 12s
2026-07-30 08:30:24 +00:00
hyeongwoo
e834692abb
문서: README 전면 개편 + 상세 ARCHITECTURE.md 신규 (산출물)
...
- README.md: 전체 현황 반영 개편 — 실측 지표(4,661파일·33만LOC·1,478svc·506배치·
101테이블·1,173만행·패리티≈89%), 스택·Oracle계보, 빠른시작(빌드/거래/ISO왕복/
클리어링파일), 포털 7화면(#해시), 저장소 구조, 문서 인덱스, 핵심 설계제약.
- docs/ARCHITECTURE.md: 상세 아키텍처 — 런타임 토폴로지(모듈서버 패턴·tmsrv/XA),
11 도메인 분해표, 6단 XA 체인·브랜치 격리 규율, 데이터모델(정합성 불변식),
외부연동 ISO8583 전문처리 다이어그램, 빌드시스템, Oracle 계보 3단, 관측·검증.
- 구 architecture.md → ARCHITECTURE.md 로 대체(원문 architecture.legacy.md 보존).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-23 15:06:00 +09:00
hyeongwoo
12812a6c33
Wave L: 외부 연동·전문처리 (ISO8583 와이어·소켓 왕복·클리어링 파일, 패리티→~89%)
...
외부 카드망 연동(전문처리)을 실제 프로토콜로 구현 — 마이그레이션 최난이도 계층
(소켓·바이너리 전문·프레이밍·상태처리)이 실제로 동작.
■ ISO 8583 와이어 코덱 (common/acq_iso8583.c)
- 1차 비트맵(64bit) + DE 인코딩/파싱(PAN LLVAR·금액·STAN·RRN·응답코드·MID/TID 등).
- iso_build/iso_parse 왕복 무손실 검증(비트맵 7220000000C08000 정확).
■ 외부 카드망 시뮬레이터 (clients/acq_extsw.c, :9500)
- TCP 서버: 길이접두 프레이밍 + ISO 전문. 0200 수신→승인판정→0210 응답 조립
(DE38 승인번호·DE39 응답코드). 금액임계/STAN으로 일부 거절(05).
■ 전문 왕복 드라이버 (clients/acq_netdrv.c)
- 실매입건→0200 조립→소켓 전송→0210 수신·파싱→mg_netlog 적재(RTT·응답코드).
- 실측: 200건 왕복 승인198/거절2/오류0, 0200→0210, 평균 RTT 0.3ms.
■ 클리어링 파일 교환 (clients/acq_clrfile.c)
- cl_presentment→고정폭 정산파일(/app/out/CLR_BC_YYYYMMDD.dat) HD/DT/TR+체크섬 생성,
cl_clearing_file 등록. 실제 SFTP 배치 파일교환 대역. 샘플 파일 커밋.
■ 스키마·부팅·화면
- 74-netio.sql: mg_netlog(왕복로그)·cl_clearing_file(파일 레지스트리).
- entrypoint.sh: acq_extsw 부팅 자동기동(:9500).
- build.sh: 클라이언트에 libacqcommon.a(ISO 코덱) 링크.
- 시스템현황에 "외부망 전문 왕복"·"클리어링 파일 교환" 패널.
패리티 재채점 ≈89/100. 남은 ~11%는 상용회선·HSM·다중센터 DR 등 배포 인프라.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-23 14:59:36 +09:00
hyeongwoo
bba433308a
Wave K: 잔여 패리티 갭 완결 (패리티 80%→~87%)
...
패리티 분석의 남은 갭(온보딩·KYC·3자대사·ISO전문·계정체계·비기능)을 마무리.
■ 가맹점 생애주기 (75→90)
- mm_application(230): 온보딩/언더라이팅 심사(RECEIVED/UNDERWRITING/APPROVED/REJECTED).
- mm_kyc(1,150): KYC/AML 5종(IDENTITY/SANCTION/PEP/AML/CREDIT).
- 서비스 MM_ONBOARD(상태기계+MID발급, 부적법전이 거부)·MM_KYC_CHECK.
■ 원장·회계·대사 (80→90)
- lg_account(10): 계정과목 — suspense(미결)/clearing(정산대기) 분리.
- rc_3way(16,185): 3자대사 카드망↔내부원장↔은행입금. 서비스 RC_3WAY.
■ 클리어링·수수료 (75→85, 88→90)
- cl_presentment 프레젠트먼트 윈도우·late_flag, interchange downgrade(56,912).
- ISO8583 취소전문 0420, MONTHLY_DISCOUNT 펀딩모델 활성화(94,376).
■ 비기능 (50→58)
- docs/OPS_RUNBOOK.md: HA/DR·PCI·데이터보존·규제 설계 명시(코드불가 영역 정직 구분).
■ 화면·검증
- 시스템현황에 온보딩·KYC·3자대사 패널.
- 통합빌드 error 0, 5,915 서비스, 3본 실호출 검증(상태기계 부적법전이 거부), 6단체인 COMMIT OK, 미결2PC 0.
- 패리티 재채점 ≈87/100.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-23 14:30:49 +09:00
hyeongwoo
d292772b1f
Wave J: 카드보안·자금·규제 고도화 (패리티 70%→80%)
...
패리티 분석의 최우선 갭(카드보안·자금연동·운영·규제)을 데이터모델+시드+
런타임서비스+화면으로 체계적 보강. 전부 실측·런타임 검증.
■ J-1 카드보안 (승인 60→82)
- card_vault(6,680): PCI 토큰볼트 — PAN 원문 미저장, 마스킹+SHA256 해시.
- au_3ds(1,235): 3DS/SCA — ECI·CAVV·책임전환(ISSUER 1,143).
- au_verify(8,191): AVS/CVV + 리스크판정(APPROVE/REVIEW/DECLINE).
- 서비스 TOKENIZE/AUTH_3DS/AUTH_VERIFY (au).
■ J-2 자금이동 (정산 75→85)
- st_funding_instr(355k): 펌뱅킹 펀딩지시/반환(CONFIRMED/RETURNED).
- ac_dcc(426): DCC 다통화 승인시 환율고정(USD/JPY/EUR/CNY + 마크업 3%).
- 서비스 ST_FUNDINSTR/AC_DCC.
■ J-3 수수료·분쟁 (수수료 80→88, 분쟁 70→82)
- st_cb_fee(175): 채그백 건당수수료(단계별 차등).
- ac_retrieval(127) + 분쟁 SLA타이머·fraud_flag. 서비스 ACQ_RETRIEVAL.
■ J-4 리포팅·규제 (리포팅 70→85)
- rp_merchant_stmt(12.8k): 가맹점 월명세서.
- rp_regulatory(134): 여신전문금융업법 정산주기 준수·거래량 보고.
■ J-5 화면·검증
- 포털 "카드보안·규제"(SY0004, #sec): 토큰볼트·3DS·AVS/CVV·DCC·펀딩·규제.
- 통합빌드 error 0, 5,907 서비스 AVAIL, 6본 신규서비스 실호출 검증(미결2PC 0).
- PARITY_ANALYSIS 재채점: 가중 ≈80/100.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-23 13:00:07 +09:00
hyeongwoo
782b802156
패리티 분석: 실제 매입시스템 대비 도메인별 비교 (가중 ~70%)
...
검증 리서치(OCC/Fed/Berlin Group/BC Card) 기준 루브릭 × DB 실측 대조.
- 강점(동등): 복식부기 원장 균형(DR=CR=41.5억), 수수료3층(interchange 86%),
클리어링≠정산 분리, 분쟁 상태기계, 다년 135만 매입.
- 갭: PCI 토큰볼트/3DS/AVS·CVV(카드보안 0), 은행rails 실연동, HA/DR·PCI범위.
- 도메인 9개 가중점수: 승인60·클리어링75·정산75·수수료80·분쟁70·원장80·비기능35.
- 목적 관점: "매입시스템" ~70%, "마이그레이션 대상 실전성" ~85%.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-23 12:32:51 +09:00
hyeongwoo
ab7983318d
Wave I: 대량·다양 데이터 (다년치 135만 매입 → 총 1,130만 행)
...
기존 3개월치(~20만행)를 5.5년치 대량 히스토리로 확대. 성장추세·계절성·
가맹점 생애주기 반영. ID 오프셋 대역(1천만+)으로 기존/라이브 채번과 비충돌,
전부 idempotent 가드.
- 98-bulk-seed.sql: 가맹점 40→200(MCC·요율·개점일·CLOSED/HOLD 다양) +
매입 135만건(2021-01~2026-04, 성장추세 연 0.5→1.4배·12월 계절피크·주중주말·
다양 채널/발급사/카드종류/금액구간). 27초.
- 99-bulk-derive.sql: 승인 135만·원장 2.6M(RECON+SETTLE)·정산 1.29M·
가맹점집계 358k. 시퀀스 정렬. 31초.
- 99b-bulk-econ.sql: 정산경제 파생 — 수수료3층분해 1.29M·프레젠트먼트 1.29M·
ISO8583 클리어링 1.29M·순액정산(발급사×일) 16k·펀딩 355k.
- 99c-bulk-index.sql: 운영 인덱스 14개(biz_date/merchant/status 등) + ANALYZE.
검증 (실측)
- 총 1,130만 행, DB 1.8GB. 연도별 성장 2021년 14.5만→2025년 35.3만건.
- 3층 항등식 1,293,145/1,293,145, 펀딩 항등식 355,284/355,284 (100% 성립).
- 대시보드/정산경제 화면 정상: 활성가맹점 191, 총매입 3,997억, 입금률 95.7%.
- 집계쿼리 0.5초(인덱스). 최근 3개월 라이브 데이터 무손상.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-23 12:24:42 +09:00
hyeongwoo
e1729d6edc
Wave H: Oracle 계보(As-Is) 심기 + 시스템 조망 재편(운영 콘솔)
...
■ Oracle 계보 — "원본은 Oracle 19c + Pro*C 였다"
현행 코드(ECPG/PostgreSQL)가 Oracle 시스템의 1차 이관본임을 콘크리트하게 보존.
- legacy-oracle/proc/*.pc (7본): ACQUIRE/AUTH_APPROVE/ST_MDR/SETTLE/RECONCILE/
CL_DAILY/PAY_FILEGEN. 순수 Oracle Pro*C 방언 — sqlca/oraca, VARCHAR,
WHENEVER SQLERROR GOTO, NVL/DECODE/SYSDATE/DUAL/ROWNUM/(+)/CONNECT BY/
.NEXTVAL/TO_DATE, PL/SQL 패키지 호출, COMMIT WORK. 컴파일 대상 아님(As-Is 원본).
- legacy-oracle/plsql/*.sql (2본): PKG_SETTLE(정산), PKG_LEDGER(복식부기 기표).
VARCHAR2/%TYPE/%ROWTYPE/CURSOR/EXCEPTION/RAISE_APPLICATION_ERROR.
- docs/ORACLE_PROVENANCE.md: As-Is(Oracle)→현행(ECPG)→To-Be(Spring Boot) 3단 계보
+ Oracle→PostgreSQL 방언 이관 매핑 15종 + "왜 DB는 PostgreSQL인가".
- gen_metrics.py: legacy-oracle 실측(원본 9파일 1,827LOC, 방언 12종 히트) →
마이그레이션 난이도 화면에 "④ Oracle 계보" 패널 추가.
■ 시스템 조망 재편 — 실제 매입시스템 운영 콘솔
"마이그레이션 난이도"(Forge 관점 메타)를 시스템 조망에서 분리하고, 시스템 자체의
상태·아키텍처를 보여주는 운영 화면 신설.
- 신규 "시스템 현황"(#sys): 헬스 KPI(서버11/서비스1466/미결2PC/당일매입/채널UP/
큐적체/오류) + 아키텍처 토폴로지(채널·카드망→전문GW→승인·매입→정산·지급→
원장·마감·대사·검증→마스터·공통 계층도) + 채널상태 + 큐적체 + 처리량·오류율
+ 정산사이클(마감·순액정산·클리어링·프레젠트먼트). 전부 실측 조회.
- nav 재편: [시스템 조망]=시스템현황·아키텍처토폴로지·정산경제,
[전환 분석(Forge)]=마이그레이션난이도.
- 토폴로지 모듈박스 렌더 버그(return ASI) 수정.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-23 12:10:37 +09:00
hyeongwoo
2ac4c3c920
Wave G2: 경제모델 2·3순위 갭 (MCC interchange 등급·ISO8583 클리어링·이중/단일)
...
갭분석 2·3순위 보강. 전부 실측 검증.
① interchange qualification 심화 (MCC 업종별 등급)
- mm_merch_mcc: 40개 가맹점 → 실제 4자리 ISO MCC (커피 5814, 마트 5411,
면세점 5309, 병원 8062, 주유소 5541, 여행사 4722, 숙박 7011 ...)
- mm_mcc: 26개 MCC + risk tier(1 저율/2 표준/3 고율)
- st_interchange_rate 에 MCC×카드종류 요율 override → fee_component 재계산
- 실측: tier1(병원0.69%/약국0.72%/주유0.75%) < tier2(요식~1.15%) < tier3(여행~1.62%)
— 실제 매입사 interchange 차등 그대로. 3층 항등 7560/7560, 펀딩 2925/2925 유지.
② ISO 8583 클리어링 메시지 클래스 (승인전문과 분리된 클리어링 단계)
- mg_clearing: PRESENTMENT(1240)/CHARGEBACK(1442)/REPRESENT/RECONCILE(1500)/
FEE_COLLECT(1740). 실측 8,658건.
- MG_CLEARING_INQ 서비스(mg, 120줄): 클래스/영업일/pid 필터 집계 조회.
실호출 검증(DUAL 6,386 / SINGLE 2,272, 대표 MTI 1240).
③ 이중/단일 메시지 구분
- msg_type: 신용=DUAL(5,288) / 체크=SINGLE(2,272). 실제 dual/single-message 프로토콜.
포털 "정산 경제"(#econ)에 MCC 등급표 + ISO8583 클리어링 메시지표 추가.
통합 빌드 error 0, 도메인 5,883 서비스 AVAIL, 6단 체인 유지.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-22 15:18:40 +09:00
hyeongwoo
438ae8992d
Wave G: 실제 매입사 경제모델 고도화 (딥리서치 갭분석 기반)
...
딥리서치(95 에이전트, OCC/Fed/Berlin Group 등 1차 출처, 검증된 9 finding)로
실제 카드 매입사 아키텍처를 조사(docs/GAP_ANALYSIS.md)하고, 최우선 갭 3개를
스키마+시드+런타임서비스+화면으로 메웠다.
메운 갭 (실제 매입사 핵심 메커니즘)
1. 수수료 3층 분해: 기존 flat MDR → interchange(발급사)+scheme fee(카드망)+
markup(매입사 수익). 실측 결과 interchange=MDR의 86% (리서치 "70~90%"와 일치).
2. 클리어링 ≠ 정산 분리: 승인·정산과 별도인 프레젠트먼트(클리어링) 단계 추가.
3. 발급사↔매입사 순액정산: BIN/ICA 기준 다자 순액(한국 BC카드 컨소시엄형).
4. 펀딩 항등식: 총매출−환불−채그백−수수료−리저브=입금 (2,924건 전부 항등 성립).
5. 채그백/분쟁 라이프사이클: FIRST_CB→REPRESENT→PRE_ARB→ARBITRATION 상태기계.
스키마 (db/schema.d/70-econ.sql, 96-econ-seed.sql)
- 신규 9테이블: st_interchange_rate, st_scheme_fee, st_fee_component, cl_presentment,
st_member_bank, st_net_settlement, st_reserve, st_merchant_funding, ac_dispute.
- 기존 정산건 소급 분해(요율표 카드종류×채널 차등) + 순액정산 배치 + 펀딩 계산.
- 시드 계산검증: 3층 항등식·펀딩 항등식 100% 성립(내가 채그백 일수중복 버그 1건 수정).
런타임 서비스 (전부 게이트웨이로 실호출 검증)
- st: ST_FEEDECOMP(ic+sf+markup=mdr), ST_NETSETTLE(BIN별 순액), ST_FUNDING(항등식)
- ac: ACQ_DISPUTE_OPEN, ACQ_DISPUTE_ADVANCE(상태기계-부적법 전이 거부),
ACQ_PRESENT(클리어링). 각 120줄+, ECPG/XA 격리 규율 준수.
화면 (포털 AR0003 "정산 경제", #econ)
- 수수료 3층 색상바 + 펀딩 항등식 워터폴 + 발급사별 순액정산 + 분쟁 라이프사이클
+ 클리어링. 전부 실측 데이터 조회.
검증
- 통합 빌드 error 0, 도메인 재기동 5,879 서비스 AVAIL
- 6개 신규 서비스 실호출 정상(수수료 3층 84=74+6+4, 상태기계 부적법 전이 거부)
- 기존 6단 매입 체인 COMMIT OK 유지, 미결 2PC 0
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-22 14:03:35 +09:00
hyeongwoo
46ff41b633
IR 자료: 마이그레이션 난이도 브리핑 (3축 전량 실측)
...
"Forge가 얼마나 복잡한 레거시를 다룰 수 있는가"를 증명하는 Before 자산.
지표는 전부 소스에서 자동 집계(추정·과장 없음).
- tools/gen_metrics.py: 소스 실측 → app/ui/metrics.js + index.html 인라인
· 축A 규모: 파일 4,626 / 33만 LOC / EXEC SQL 23,742 / tpcall 989 /
tpbegin 1,234 / UBF 46,904 / 테이블 75 / 카피북 2,207
· 축B 자동변환 실패지점: ATMI·XA2PC(6단)·ECPG·UBF·카피북팬아웃·매크로
각각 실측 카운트 + Java/Spring 이전이 어려운 이유
· 축B 거래추적: ACQUIRE 6프로그램·6XA브랜치, PAY_APPROVE 5·5, CL_DAILY 6·6
(프로그램→테이블쓰기→XA브랜치 트리)
· 축C 레거시 인벤토리: acq_common.h 139프로그램 공유, 매크로 2,247,
sqlca 수동분기 18,719, EXEC밀도 9.8/파일
- 포털 신규 화면 "마이그레이션 난이도"(AR0002, #mig): 위 3축을 한 화면에
- docs/MIGRATION_COMPLEXITY.md: 피치덱용 브리프 (실동작 증거 + 발견된 실결함 4건)
- README: IR 자료 안내 추가
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-22 13:18:40 +09:00
hyeongwoo
5b572989e3
아키텍처 복잡도 시각화 — tpcall 호출그래프 (모듈뷰 + 서비스뷰)
...
IR·데모용으로 "복잡하게 얽힌 시스템"을 눈에 보이게 만든다. 지금까지 복잡도는
백엔드에 실재했지만 그리드 화면에는 드러나지 않았다.
- tools/gen_callgraph.py: svc/*.pgc 의 tpcall 관계를 추출해 호출그래프를 뽑고,
force-directed 레이아웃을 사전계산(외부 의존성 0, 시드 고정)해 index.html 에
인라인 주입(게이트웨이는 index.html 만 서빙 → 외부 .js 로드 불가).
552 노드 · 494 엣지 · 11 모듈 · 41 모듈간 호출경로 · 최대 체인 깊이 6단.
- 포털 신규 화면 "아키텍처·복잡도" (AR0001, 최상단 nav):
· 모듈뷰: 11개 도메인을 링으로 배치, 방향 화살표 + 호출수 비례 두께
· 서비스뷰: 552개 서비스 hairball, 모듈 색상 + 호출차수 비례 크기, 팬/줌/호버
· 대표 심층 업무체인 5개 칩(ACQUIRE 6단 등) 클릭 시 경로 하이라이트
· KPI: 온라인 1,463 / 배치 506 / 체인연결 552 / 엣지 494 / 최대깊이 6단
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-22 12:56:44 +09:00
hyeongwoo
074d244bba
Wave E/F: 업무흐름 tpcall 오케스트레이션 + 크로스브랜치 교착 제거
...
477개 서비스를 tpcall 체인으로 연결하고(2 → 477), 그 과정에서 드러난
런타임 결함들을 실행 검증으로 잡아냈다.
체인 오케스트레이션 (Wave E)
- 매입/승인/정산/지급/대사/원장/마감/마스터/전문 흐름을 모듈 간 tpcall 로 연결
- 호출그래프 553노드 494엣지, 순환 0, SELFCALL 0
- 핵심 경로: ACQUIRE→RECONCILE→SETTLE→ST_MDR→LG_SETTLEPOST (6단, XA 2PC)
런타임 결함 수정 (Wave F) — 정적 게이트로는 잡히지 않던 것들
1. 모듈내 체인 자기교착: 모듈 서버 카피가 1이면 SETTLE→ST_MDR 처럼 같은
서버로 되돌아오는 호출이 자기 요청을 못 꺼내 TPETIME. 카피 4로 상향.
2. 크로스브랜치 핫로우 교착: 한 글로벌 트랜잭션의 형제 XA 브랜치가 같은 행을
UPDATE 하면 같은 트랜잭션이라 락이 안 풀려 타임아웃까지 블록된다.
- mg_channel: 비소유자 96개 서비스의 UPDATE 제거, STAN 은 시퀀스 채번으로
(실제 전문 스위치 방식). 생애주기 소유자 7개만 UPDATE 유지.
- lg_merch_bal: ACQ_SETTLELINK 의 LG_SETTLEPOST 다이아몬드 호출 제거.
교착일 뿐 아니라 같은 정산건이 원장에 이중 전기되는 회계 오류였다.
- cl_close_log / py_payout / lg_account_bal: CHAIN 마커로 쓰기 소유자 일원화.
py_payout 건은 피호출자가 호출자의 미커밋 승인을 볼 수 없어 기능적으로도
동작 불능이었다.
3. cm_log PK 충돌: st 131개 파일이 max(log_id)+1 로 채번해 nextval 을 쓰는
피호출자와 동일 PK 를 INSERT, 미커밋 인덱스 엔트리에 걸려 블록. 전부
nextval('cm_log_seq') 로 전환.
4. strncpy 스택 파괴: cmdb_get_param 이 strncpy(out, h_val, 127) 로 항상 128
바이트를 써서, bizdate[16] 을 넘기는 호출부 133곳이 매번 호출자 스택 112
바이트를 훼손했다. 인접 ecpg 호스트 변수가 오염돼 서버 카피가 세그폴트.
DB 락 대기가 0인데 60초 블록되는 증상의 원인. cm_code/py_payout_reject 동일.
5. ACQ_CANCEL→LIMIT_RST 입력계약 불일치: 카드번호를 안 실어 보내 항상 거절.
승인원장에서 카드를 끌어오고, 무승인 매입은 한도원복을 생략하도록 수정.
6. mgdb_channel_bump_stan: 활동 채널 전체를 한 번에 잠그는 다중행 UPDATE
(호출자 0인 잠복 지뢰). 시퀀스 채번 + 집계 조회로 교체.
화면
- 기본값을 실존 시드 키로 부팅 시 조회해 덮어쓴다. 기존 플레이스홀더
(card_limit 에 없는 카드, 8자리 영업일)로는 처리성 화면이 전부 거절당했다.
- 게이트웨이가 단일 스레드 직렬 루프라 기본값 조회도 순차로 수행.
검증 (실측)
- 통합 빌드: modules=11 servers=11 batches=506, error 0
- 도메인: 45 프로세스, 1,466 서비스 AVAIL
- 체인 전수 스모크 477/477 응답, TPETIME/TPEABORT 0건, 최대 530ms
- AUTH: 수정 전 60초 블록→TPEABORT, 수정 후 0.215초 ok:true
- 6단 매입 체인 COMMIT OK, 미결 2PC 0
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-21 14:55:49 +00:00
hyeongwoo-choi
4cede852a0
UI: 화면 진입 시 처리결과·거래저널 자동 표시 (서버 감사로그 연동)
...
- 조회성 서비스는 화면 진입 시 자동 tpcall (실 업무화면처럼 즉시 데이터 표시)
- 거래저널을 서버측 감사로그 cm_log(10,367건, 심화 서비스들이 적재)와 연동:
이번 세션 호출 + 서버 처리이력 병합, 정상/경고/오류 색상 구분
- 대시보드에 '서비스 처리이력(감사로그)' 패널 추가
- 검증: ACQ_STATUS 자동조회로 처리결과 채워짐(매입 1001: 14,600/30/14,570, 정산완료),
저널에 ACQUIRE pid=9194·RECONCILE·AUTH_LIMIT·VL_SALES·MG_SEND 실이력 표시
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-21 12:13:29 +00:00
hyeongwoo-choi
c5caef89ca
Wave D 심화: 전 1,463 서비스를 실운영급 로직으로 (중앙값 33→156줄, 총 23만줄)
...
- 9섹션 구조 적용: 전필드 검증+에러코드(T_RC/T_MSG), 마스터·정책·상태 조회(sqlcode 0/100/<0 분기),
3+ 업무규칙 분기, 본처리(sqlerrd[2] 반영건수 확인), 이력/감사 적재(cm_log 등 best-effort),
집계·요약 갱신, 예외/보상, 응답 전 필드, 구조화 한글 로깅
- 모듈별 중앙값: au 201 · mg 181 · cl 170 · ac 162 · cm 161 · mm/vl 145 · py 144 · st 143 · rc/lg 138
- 기존 dbio 헬퍼·공통유틸·기존 테이블만 사용 (새 테이블/함수 없음)
- 회귀 수정: 심화된 RECONCILE이 XA 브랜치 격리를 위반(미커밋 purchase 조회 후 FAIL)해
ACQUIRE 체인이 끊긴 것 → 미존재(100)를 정상 흐름으로 처리, 전문(UBF) 값으로 대사 진행
- 에이전트가 잡은 실버그: merchant_summary 0-덮어쓰기, 미초기화 문자열 userlog,
호스트변수 중복/스코프 오류 31+28+2건
- 검증: build DONE modules=11 batches=506, 12서버 runok, psc 1,466 AVAIL,
매입체인 XA 커밋(purchase_id=9194 status=S), prepared_xacts=0, 검증분기 동작 확인, 클론 0
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-21 12:02:44 +00:00
hyeongwoo-choi
c62d91b7a7
규모확장 Wave B: 전 11모듈 svc 75→133·batch 35→46 (BAIS 온라인 1:1)
...
- svc 825→1,463 (모듈당 133), batch 385→506 (모듈당 46) — 전부 새 고유 실업무 로직
+ 카피북 헤더, 디스패처 133 advertise, 한글 기능설명(매니페스트 추출)
- BAIS As-Is 대비: 온라인 1,463 vs 1,466(99.8%), 배치 506 vs 503(초과)
- 화면 매니페스트 1,463 재생성
- 검증: build DONE modules=11 batches=506, 12서버 runok, xadmin psc 1,466 AVAIL,
매입체인 XA 커밋, 신규서비스 실데이터 스모크, 전 코퍼스 .pgc 클론 0
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-20 22:55:47 +00:00
hyeongwoo-choi
ea90bef264
규모확장 Wave A: 전 11모듈 svc 30→75·batch 22→35 + 전 모듈 운영데이터 시드
...
- svc 330→825 (모듈당 +45 고유 실업무: chargeback·재매입·심사워크플로·전문유형별·
대사세분·정산시뮬·지급재처리·복식결산·마감워크플로·마스터심사·검증룰·전문라우팅 등)
- batch 242→385 (모듈당 +13), 카피북 헤더·디스패처 advertise 전 75 반영
- db/schema.d/95-module-seed.sql: 전 모듈 테이블 운영데이터(au 8.4k·st 15.9k·mg 16.9k·
lg 14.6k·rc 7.7k·py 2.9k·vl 8.5k·cm 10.4k 등, 총 ~171k행) — base 거래와 정합
- 화면 매니페스트 825 재생성, 큐 메모리 튜닝(NDRX_MSGMAX 50→30)
- 검증: build DONE modules=11 batches=385, 12서버 runok, xadmin psc 828 AVAIL,
매입체인 XA 커밋(status=S), 새서비스 시드데이터 스모크(ACQ_MERCHSUM/RC_STATS 실값),
전 코퍼스 .pgc 클론 0, 헤드리스 스크린샷 확인
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-20 22:09:55 +00:00
hyeongwoo-choi
19acf4ed96
업무화면 고도화: MDI 탭·그리드(정렬/페이징/CSV/합계/배지)·상세팝업·마스터-디테일
...
- MDI 탭바: 화면 다중 오픈/전환/닫기 (상태 유지, 레거시 업무포털 방식)
- 그리드 컴포넌트: 컬럼 정렬, 페이징(1/34), CSV 저장, 금액 합계행, 상태 한글배지
(접수/대사/정산완료/취소/보류), 행 hover·클릭
- 매입 상세 팝업: 행 클릭 → 매입원장 + 승인/정산/원장(복식기표) 연계조회
+ 보류(ACQ_HOLD)·취소(ACQ_CANCEL) 실 tpcall XA 액션 (상태별 버튼 활성화)
- 가맹점 관리(QR0301): 마스터 그리드 ↔ 상세폼, 신규등록/정보수정/상태변경
실 tpcall(MM_MERCH_REG/UPD/STATUS) + 확장마스터/변경이력 연계
- 매입목록 필터 확장(상태), 해시 딥링크(#q=/#s=), 거래저널 전화면 공유
- 검증: 헤드리스 스크린샷 3종(대시보드/매입목록/가맹점관리) 렌더 확인
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-20 03:35:45 +00:00
hyeongwoo-choi
1fd60a1e49
실운영 데이터 + 운영 대시보드/조회 화면 (실사용 시스템화)
...
- db/schema.d/90-seed.sql: 가맹점 40(실제풍 상호·업종별 MDR 18~30bp·한도),
2026-04-20~07-19 3개월 매입 8,190건(주중/주말 거래량·금액구간 분포·채널/발급사 비중),
승인 1:1, 정산 7,560, 원장 15,120(RECON+SETTLE 이중기표), 가맹점 일집계, 시퀀스 정렬
- 게이트웨이 /api/query: libpq 읽기전용 조회(SELECT만, 단일문, 500행 캡) — MIS/리포팅 경로
- UI 조회/현황 그룹 7화면: 운영 대시보드(카드 7종+최근거래+가맹점TOP7+7영업일 실적),
매입/정산 목록, 가맹점 현황, 일자별 실적, 원장, 채널·발급사 분석 — 기본화면=대시보드
- 검증: 시드 로딩 psql 확인, /api/query 동작, 헤드리스 스크린샷으로 대시보드 실데이터 렌더 확인
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-20 03:24:57 +00:00
hyeongwoo-choi
c5692410f6
fix(ui): 매니페스트 헤더 주석의 글롭(*/)이 JS 주석 조기종료 → 블록 사망 버그 수정
...
/* 자동생성: app/src/*/svc/*.pgc ... */ 주석에서 src/*/ 의 */ 가 주석을 끝내고
잔여 텍스트(svc)가 코드로 평가되어 ReferenceError → SVC_SCREENS 미정의 → 메뉴 공백.
파싱은 통과(문법상 유효)하고 런타임에만 죽는 함정. 주석에서 */ 시퀀스 제거 후 재생성.
헤드리스 chromium 스크린샷으로 330화면 메뉴 + AC0101 렌더링 확인.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-20 03:01:42 +00:00
hyeongwoo-choi
79555cb407
fix(ui): 화면 매니페스트를 index.html에 인라인 (프리뷰가 외부 스크립트 미로드) + JS 오류 상태바 표시
...
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-20 02:47:41 +00:00
hyeongwoo-choi
b484d79845
fix(ui): 절대경로 → 상대경로 (프리뷰/프록시 환경에서 screens.js·API 404 수정)
...
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-20 02:45:37 +00:00
hyeongwoo-choi
844a1d50fc
프론트 전면 구성: 330개 전 서비스 화면 포털 (매니페스트 자동생성)
...
- tools/gen_screens.py: svc 소스에서 입력(getl/gets_)·출력(setl/sets) 필드와
한글 설명을 추출해 app/ui/screens.js(330 화면 매니페스트) 생성
- index.html 확장: 모듈별 메뉴트리(11그룹×30화면) + 화면검색 + 주요업무 즐겨찾기 9종,
화면별 입력폼 자동구성(한글라벨·기본값), 조회성 화면 XA 자동 off, 결과그리드·거래저널
- README: 화면 계층(4.0) 문서화
- 검증: screens.js 서빙, ACQ_DUPCHK(조회)·RC_STATS(통계)·MM_MERCH_REG(XA 등록) 실호출 정상
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-20 00:32:53 +00:00
hyeongwoo-choi
5c819239ad
업무화면 포털 + HTTP→tpcall 게이트웨이 (검증용 화면 계층)
...
- app/src/clients/acq_httpgw.c: C 경량 HTTP 게이트웨이(:8090, libatmiclt만 링크)
/api/call?svc=..&FLD=.. → UBF(CBchg) → (옵션 XA tpbegin/tpcommit) tpcall → JSON
레거시 화면(Xplatform)→Webtier→Tuxedo 구조의 Webtier 대응
- app/ui/index.html: Xplatform풍 한국어 업무포털 (좌측 메뉴트리·폼·결과그리드·거래저널)
화면 9종: 매입접수(XA체인)/상태조회/가맹점집계/한도조회/MDR/잔액검증/일마감/가맹점/Luhn
+ 333 서비스 자유호출 화면
- entrypoint: 게이트웨이 자동 기동, compose: 8090 포트 노출
- 검증: HTML 서빙, ACQUIRE 체인 HTTP 호출 → XA 커밋(purchase status=S), Luhn T_RC=0,
pg_prepared_xacts=0
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-20 00:29:05 +00:00
hyeongwoo-choi
7139fdd2fd
docs: 상세 README (아키텍처·XA흐름·빌드/실행·검증·모듈·마이그레이션 매핑)
...
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-19 23:09:39 +00:00
forge-bot
387011e04a
README: 2000본+ 실동작 체크 완료 (2,052 파일)
...
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-19 14:37:23 +00:00
forge-bot
fc16ea64c8
고도화: 전 모듈 dbio 25→40 · batch 17→22 세분화 (+432본, 전부 고유)
...
- 11개 모듈 각 dbio +15(→40), batch +5(→22) 새 고유 ECPG 프로그램 + 카피북 헤더
(window/HAVING/JOIN/FILTER/NOT EXISTS/upsert/correlated/INSERT..SELECT 등 구조 다양)
- 전 코퍼스 .pgc 1004/1004 정규화-고유 (dup 그룹 0)
- 통합 검증: 12서버 runok, 333 서비스, 242 배치 바이너리, 매입체인 XA 커밋, prepared_xacts=0
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-19 14:37:10 +00:00
forge-bot
05ad8a3064
Phase 2c 마무리: 전 코퍼스 793/793 고유 (클론 0) + au/py run 완성
...
- au/py dbio/batch/run 확장 마무리 (svc30·dbio25·batch17·run17)
- cm/mg 배치 + mm/vl dbio 크로스모듈 클론 32개 → 각각 고유 SQL 구조로 재작성
- 전 .pgc 793/793 정규화-고유(클론 그룹 0)
- 통합 재검증: 12서버 runok, 333 서비스 AVAIL, 매입체인 XA 커밋, prepared_xacts=0
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-19 12:18:11 +00:00
forge-bot
fd8b418c6e
Phase 2c: 전 11모듈 per-service 레거시 구조 분해·확장 (실동작 유지)
...
- 10개 모듈(au py rc st lg cl mm vl mg cm)을 ac 템플릿대로 분해:
svc/ 30 서비스 .pgc + 카피북 .h, 얇은 <mod>_svr 디스패처
dbio/ ~25 .pgc(+.h), batch/ ~17 .pgc, run/ ~17 .sh (모듈마다)
- 파일: svc 330 + dbio 276 + batch 187 + run 187, 총 소스 1602본
- 서비스별 고유 실로직(정규화 md5), build.sh 자동발견(inline/split 양립)
- 통합 검증: build DONE modules=11 servers=11 batches=187, 12서버 runok,
333 서비스 AVAIL, 매입체인 XA 커밋(status=S), prepared_xacts=0
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-19 11:58:44 +00:00
forge-bot
c3b99a8b75
Phase 2c-1: ac 모듈 per-service 분해 (1서비스=1파일+카피북) + build.sh 이중스타일
...
- app/src/ac/svc/: 30 서비스 .pgc + 31 카피북 .h (각 typedef struct + prototype)
- ac_svr.pgc = 얇은 디스패처(advertise 테이블만)
- build.sh: src/<mod>/svc/*.pgc → lib<mod>svc.a 링크, inline/split 자동판별
- ac dbio 25 + batch 17 + run 17 스크립트
- 고유도: svc 30/30, dbio 25/25 (정규화 md5, 클론 0)
- 검증: 12서버 runok, 333 서비스, 매입체인 XA 커밋, prepared_xacts=0
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-19 11:30:03 +00:00
forge-bot
bec83c721e
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>
2026-07-19 09:58:39 +00:00
forge-bot
8219b85f14
멀티모듈 인프라: schema.d/ 분리 + acq.fd 범용필드 (병렬 팬아웃 충돌회피)
...
- db/schema.sql → db/schema.d/00-base.sql, compose가 schema.d 디렉터리 마운트
(모듈들이 db/schema.d/NN-<mod>.sql 로 disjoint 추가)
- acq.fd에 범용 스크래치필드(T_ARG/T_STR/T_AMT/T_KEY/T_ID) → 모듈이 acq.fd 미수정
- setapp.sh gitignore 제외(필수 런타임 config)
- 검증: 4서버 runok, 41서비스, 체인 커밋 유지
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-19 09:40:13 +00:00
forge-bot
05a0ff3e56
Phase 2a: 모듈서버 패턴 + 재사용 빌드시스템 (ac 모듈 38서비스 실동작)
...
- ac_svr(30 매입서비스 advertise) + rc_svr/st_svr, dbio 정적라이브러리, common 라이브러리
- app/build.sh: 모듈 자동발견(app/src/<mod>/<mod>_svr.pgc) → ecpg+buildserver+ndrxconfig 생성
- ac 배치 2종, 스키마 9테이블, 검증: 41서비스 AVAIL, 체인·배치 psql 커밋, prepared_xacts=0
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-19 09:37:17 +00:00
forge-bot
e6e29e6b5d
Phase 1: 실동작 Enduro/X + PostgreSQL XA 매입 슬라이스
...
- Enduro/X 7.0.12 소스빌드 이미지(-DENABLE_POSTGRES=ON, libndrxxaecpg XA 스위치)
- docker-compose: postgres(max_prepared_transactions=100) + endurox app
- ECPG XA 서비스 3종: ACQUIRE→RECONCILE→SETTLE (tpservice + EXEC SQL)
- 클라이언트 tpbegin/tpcall체인/tpcommit → tmsrv 2PC(prepare/commit) 원자 커밋
- 검증: 서비스 AVAIL, 커밋 row(status=S) psql 확인, 롤백 시 무잔존, pg_prepared_xacts=0
- 규명된 런타임 요건: sysctl fs.mqueue.*, ulimit msgqueue/nofile, XA open-str JSON
- docs/architecture.md, README, service-catalog 설계
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-19 09:16:12 +00:00