실동작 Enduro/X(오픈 Tuxedo) 카드 매입·정산 시스템 — 포지 마이그레이션 대상
Find a file
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
app Phase 2b: 11개 모듈 전량 실동작 (333 서비스, 전서버 부팅) 2026-07-19 09:58:39 +00:00
db/schema.d Phase 2b: 11개 모듈 전량 실동작 (333 서비스, 전서버 부팅) 2026-07-19 09:58:39 +00:00
docker Phase 2b: 11개 모듈 전량 실동작 (333 서비스, 전서버 부팅) 2026-07-19 09:58:39 +00:00
docs Phase 2a: 모듈서버 패턴 + 재사용 빌드시스템 (ac 모듈 38서비스 실동작) 2026-07-19 09:37:17 +00:00
slice Phase 1: 실동작 Enduro/X + PostgreSQL XA 매입 슬라이스 2026-07-19 09:16:12 +00:00
.gitignore 멀티모듈 인프라: schema.d/ 분리 + acq.fd 범용필드 (병렬 팬아웃 충돌회피) 2026-07-19 09:40:13 +00:00
README.md Phase 1: 실동작 Enduro/X + PostgreSQL XA 매입 슬라이스 2026-07-19 09:16:12 +00:00

acquire-core-x — 카드 매입·정산 시스템 (실동작 Enduro/X)

실제 Enduro/X(오픈소스 Tuxedo/ATMI TP 모니터) + ECPG/PostgreSQL 위에서 실제로 기동·트랜잭션 처리되는 카드 매입·정산 레거시 시스템. 포지(Klaro Forge) 자율 마이그레이션 도구의 대형 전환 대상 픽스처 — 이 C/ATMI 시스템을 Java Spring Boot로 전환한다.

앞서의 acquire-core-full(자체 TxCore 셔임, 컴파일만 되는 픽스처)과 달리, 이 프로젝트는 진짜 TP 미들웨어에서 tpcall·XA 트랜잭션이 실제로 동작한다. (사용자 요구 = B방식)

스택

계층 실체
TP 모니터 Enduro/X 7.0.12 (오픈 Tuxedo/ATMI: tpservice/tpcall/tpadvertise/tpbegin) — 소스빌드
전문 버퍼 UBF (≈FML32): Bget/Bchg, 필드테이블 mkfldhdr
DB 접근 ECPG (EXEC SQL) → PostgreSQL 15
분산 트랜잭션 XA 2PC — libndrxxaecpg.so ECPG XA 스위치, tmsrv가 조율
오케스트레이션 ndrxd + ndrxconfig.xml + app.ini(CCONFIG)

실행 (docker-compose)

docker compose -f docker/docker-compose.yml up -d --build   # postgres + endurox app

필수 런타임 요건 (없으면 ndrxd 부팅 실패 — 실측으로 규명됨)

POSIX 큐/세마포어 한도 때문에 app 컨테이너에 반드시 필요:

sysctls:
  fs.mqueue.msg_max:     "512"
  fs.mqueue.msgsize_max: "65536"
ulimits:
  msgqueue: 536870912      # 큐 1개 = msg_max×msgsize_max ≈ 5.6MB, 기본 RLIMIT_MSGQUEUE(800KB) 초과
  nofile:   65536

PostgreSQL는 XA(2단계 커밋) 위해 -c max_prepared_transactions=100.

구성

  • docker/endurox.Dockerfile(Enduro/X 소스빌드, -DENABLE_POSTGRES=ON), docker-compose.yml
  • db/schema.sql(merchant/purchase/approval/settlement/ledger …)
  • app/conf/(ndrxconfig.xml, app.ini, 환경), ubftab/(UBF 필드테이블), 서비스 .pgc/.c, entrypoint.sh
  • docs/architecture.md, service-catalog.md
  • ref/ — Enduro/X upstream PostgreSQL 통합테스트(참고용, .gitignore)
  • slice/ — 최초 검증용 non-DB ATMI 슬라이스(부팅+tpcall 증명 완료)

검증 상태

  • Enduro/X 소스빌드 (PostgreSQL XA 포함) → 이미지 acquire-x/endurox:7.0.12
  • ndrxd 부팅 (10 프로세스 runok)
  • 커스텀 tpservice advertise + 실제 tpcall 왕복 (ACQUIRE: fee=2500 net=997500)
  • ECPG XA 서비스 체인(매입→대사→정산) + 커밋 row psql 검증 + 롤백 검증
  • 2000본+ 확장 (Phase 2)
  • 포지 마이그레이션 → Spring Boot (Phase 3)