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>
This commit is contained in:
parent
2ac4c3c920
commit
e1729d6edc
14 changed files with 2054 additions and 7 deletions
|
|
@ -142,7 +142,34 @@ LEGACY = {
|
|||
"embedded_sql_density": round(sh_count(pgc, r"EXEC SQL") / max(1, len(pgc)), 1),
|
||||
}
|
||||
|
||||
data = {"SCALE": SCALE, "HAZARDS": HAZARDS, "TRACE": TRACE, "LEGACY": LEGACY}
|
||||
# ── Oracle 계보 (As-Is 원본 legacy-oracle/ 실측) ─────────────────────────────
|
||||
ora_proc = glob.glob(os.path.join(ROOT, "legacy-oracle", "proc", "*.pc"))
|
||||
ora_plsql = glob.glob(os.path.join(ROOT, "legacy-oracle", "plsql", "*.sql"))
|
||||
ora_files = ora_proc + ora_plsql
|
||||
def ora_hits(pat): return sh_count(ora_files, pat) if ora_files else 0
|
||||
ORACLE = {
|
||||
"asis_files": len(ora_files),
|
||||
"asis_proc": len(ora_proc),
|
||||
"asis_plsql": len(ora_plsql),
|
||||
"asis_loc": loc(ora_files) if ora_files else 0,
|
||||
# As-Is 원본에서 실측한 Oracle 방언 (현행 이관에서 옮긴 것들)
|
||||
"dialects": [
|
||||
{"t": "PL/SQL 패키지 호출 (pkg_x.proc)", "n": ora_hits(r"\bpkg_[a-z_]+\.")},
|
||||
{"t": "NVL / NVL2 널가드", "n": ora_hits(r"\bNVL2?\s*\(")},
|
||||
{"t": "DECODE 다분기", "n": ora_hits(r"\bDECODE\s*\(")},
|
||||
{"t": "SYSDATE / SYSTIMESTAMP", "n": ora_hits(r"\bSYS(DATE|TIMESTAMP)\b")},
|
||||
{"t": "FROM DUAL", "n": ora_hits(r"\bFROM\s+DUAL\b")},
|
||||
{"t": "시퀀스 .NEXTVAL", "n": ora_hits(r"\.NEXTVAL\b")},
|
||||
{"t": "ROWNUM 의사컬럼", "n": ora_hits(r"\bROWNUM\b")},
|
||||
{"t": "구식 외부조인 (+)", "n": ora_hits(r"\(\+\)")},
|
||||
{"t": "CONNECT BY 계층질의", "n": ora_hits(r"\bCONNECT\s+BY\b")},
|
||||
{"t": "WHENEVER SQLERROR 라벨분기", "n": ora_hits(r"WHENEVER\s+SQLERROR")},
|
||||
{"t": "TO_DATE / TO_CHAR 포맷", "n": ora_hits(r"\bTO_(DATE|CHAR)\s*\(")},
|
||||
{"t": "RAISE_APPLICATION_ERROR", "n": ora_hits(r"RAISE_APPLICATION_ERROR")},
|
||||
],
|
||||
}
|
||||
|
||||
data = {"SCALE": SCALE, "HAZARDS": HAZARDS, "TRACE": TRACE, "LEGACY": LEGACY, "ORACLE": ORACLE}
|
||||
payload = json.dumps(data, ensure_ascii=False, separators=(",", ":"))
|
||||
with open(OUT_JS, "w", encoding="utf-8") as w:
|
||||
w.write("/* 자동생성: tools/gen_metrics.py — 소스 실측 마이그레이션 난이도 지표. 손대지 말 것. */\n")
|
||||
|
|
@ -165,3 +192,6 @@ for t in TRACE:
|
|||
print(" 레거시: 카피북 %d(최대공유 %d×%s) 매크로 %d sqlca분기 %d EXEC밀도 %.1f/파일"
|
||||
% (LEGACY["copybook_total"], LEGACY["copybook_shared_max"], LEGACY["copybook_shared_name"],
|
||||
LEGACY["macro_defs"], LEGACY["sqlca_checks"], LEGACY["embedded_sql_density"]))
|
||||
print(" Oracle As-Is: 원본 %d파일(proc %d/plsql %d) %dLOC · 방언히트 %d종"
|
||||
% (ORACLE["asis_files"], ORACLE["asis_proc"], ORACLE["asis_plsql"], ORACLE["asis_loc"],
|
||||
sum(1 for d in ORACLE["dialects"] if d["n"] > 0)))
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue