Commit graph

12 commits

Author SHA1 Message Date
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
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
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-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
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
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