COBOL 현대화 인텔리전스
대부분의 현대화 프로젝트가 실패하는 이유는 도구가 코드를 토폴로지가 아니라 텍스트로 읽기 때문입니다. CodeGraph는 메인프레임 자산을 타입이 지정된 지식 그래프로 파싱하고, 카피북, REDEFINES, COMP-3, DB2, JCL에 걸쳐 변경의 전체 전이적 의존성 폐쇄를 해소하며, 모든 엣지에 파일:줄 출처를 붙이고 얼마나 해소할 수 있었는지에 대한 증명을 제공합니다. 지도가 제품입니다. 번역은 그다음 단계의 활용 사례입니다.
9/9 vs 3/9
복구된 의존성: 그래프 대 단일 파일 창
TRN-LIMIT 픽스처에서, 알려진 정답 집합에 대해
97.1%
해소된 참조 (33 of 34), 1건은 검토용으로 플래그됨
결정론적 완전성 게이트, 실행마다 동일한 결과
47 / 70
7가지 노드 유형에 걸친 노드와 엣지
제공된 합성 은행 픽스처
이것은 실행 가능한 데모입니다. 자산은 데모를 위해 작성된 합성이고, 그래프는 인메모리와 SQLite이며, DB2, JCL, 나이브 단일 파일 뷰는 파일 픽스처와 시뮬레이션이지 라이브 커넥터가 아닙니다.
실패 모드는 맥락적 맹목이며, 더 큰 모델이 그것을 없애지 않습니다.
메인프레임 현대화 프로젝트의 70 to 80%가 목표를 달성하지 못합니다(산업 메타분석, 2025). 번역이 틀려서가 아니라, 도구가 코드를 토폴로지가 아니라 텍스트로 취급하기 때문입니다. 범용 번역기는 자신이 볼 수 있는 그 한 파일을 읽습니다. 실제로 중요한 사실은 단일 파일 컨텍스트 창에서는 보이지 않습니다.
그 이해득실은 학술적이지 않습니다. 대략 220 billion 줄의 COBOL이 여전히 프로덕션에서 돌아가며 ATM 트랜잭션의 약 95%, 뱅킹 시스템의 43%, 하루 3 trillion 달러의 활동을 실어 나르고(Reuters, 2017), 누적된 미국 기술 부채는 추정 1.52 trillion 달러입니다(CISQ, 2022). 이것이 은행·보험 스택의 핵심이며, 바로 아무도 맥락 없이 건드리고 싶어 하지 않는 코드입니다.
구체적인 비유는 TRN-LIMIT라는 필드로 계산하는 송금 프로그램입니다. 번역기가 볼 수 있는 그 한 파일에서는 산술이 사소해 보입니다. 그러나 TRN-LIMIT는 카피북 세 개 너머에 정의된 COMP-3 패킹 십진수이고, 그 해석은 다른 프로그램에서 설정된 플래그가 고르며, 그 플래그는 송금 작업 전에 돌아가는 새벽 2시 JCL 배치 작업이 씁니다. 보이는 사실만 주면 모델은 일반 long을 내보내고, Java는 컴파일되고 단위 테스트를 통과한 뒤, 첫 라이브 송금에서 데이터베이스를 손상시킵니다. 그 참조 무결성 실패는 UAT에서 드러납니다. 실패는 맥락적 맹목이었습니다.
이것은 모델이 좋아져도 사라지지 않습니다. 실제 자산은 100만~1,000만 줄 이상이며 현재든 미래든 어떤 컨텍스트 창에도 들어가지 않습니다. 어려운 부분은 변경이 건드리는 정확한 전이적 슬라이스를 검색하고 전부를 찾았음을 증명하는 것입니다. 그것은 토폴로지, 검색, 증거 문제이지 추론 품질 문제가 아닙니다. 에이전트는 조언하고, 코드가 결정합니다.
자산을 타입이 지정된 그래프로 파싱한 다음 결정론적 분석을 실행합니다. 임계 경로에 LLM은 없습니다.
파이프라인은 픽스처 자산, 그다음 파싱(COBOL, 카피북, JCL, DB2 DDL), 그다음 타입이 지정된 지식 그래프 구축, 그다음 출처가 붙은 전이적 폐쇄 영향, 그다음 결정론적 분석, 그다음 감사와 증거 내보내기, 그다음 인터랙티브 대시보드 순으로 실행됩니다. 로드 시 앱은 이것을 Server-Sent Events 위에서 라이브로 실행하므로, 각 단계가 콘솔에 실제 측정된 지연 시간과 함께 서술되고, 패널이 점진적으로 채워지며, 지속되는 단계 레일로 어느 단계의 Input, Processing, Output 트레이스든 열 수 있습니다. 단일 컨트롤이 전체 실행을 다시 재생합니다.
networkx로 구축되어 인메모리와 SQLite에 유지되는 이 그래프에는 일곱 가지 노드 유형(program, copybook, variable, table, jcl, dataset, 그리고 미해소 플레이스홀더)과 DEFINES, IMPORTS, REDEFINES, CONTROLS_TYPE_OF, WRITES_VAR, REFERENCES, CALLS, READS and WRITES, EXECUTES, USES_DATASET, PRECEDES 같은 타입이 지정된 엣지가 있습니다. 제공된 픽스처에서 그래프는 노드 47개와 엣지 70개입니다: 프로그램 14개, 카피북 5개, 변수 17개, DB2 테이블 3개, JCL 작업 3개, 데이터셋 4개, 미해소 노드 1개.
이것들은 모델 호출이 아니라 평범한 그래프 알고리즘이므로, 같은 픽스처는 실행마다 같은 결과를 냅니다.
변경의 전이적 의존성 슬라이스. 각 엣지가 파일:줄 소스를 지니므로, 무엇이 영향받는지뿐 아니라 증거가 어디에 있는지도 볼 수 있습니다.
픽스처의 알려진 정답 의존성 집합에 대해 채점한 그래프의 폐쇄 대, 텍스트 기반 도구가 실제로 모델에 넣는 것인 시뮬레이션된 단일 파일 창.
프로그램별 결합도와 영향 반경 점수(결합도 가중치 3, COMP-3 함정 가중치 2, JCL 중요도 가중치 2, 미해소 호출 가중치 5)로 안전한 스트랭글러 피그(strangler fig) 마이그레이션 순위를 매깁니다.
모든 PERFORM, CALL, COPY, DB2 참조는 해소되거나 검토 필요로 플래그되어야 하며, 결코 조용히 누락되지 않습니다. 도달 불가능한 단락은 예시로 보고되며, 헤드라인 지표로 채점되지 않습니다.
토글 하나가 차이를 손에 잡히게 만듭니다. 나이브 AI 컨텍스트 뷰를 켜면 그래프가 약간의 컨텍스트 줄이 있는 단일 소스 파일로 흐려집니다. 아홉 가지 송금 사실 중 여섯이 사라지고, 빨간 배너가 결과를 말하며, 다시 뒤집으면 영수증과 함께 9/9가 복원됩니다. 그 토글은 검색 계층이 공급해야 하는 컨텍스트가 무엇인지를 보여주는 예시이지, 가치의 원천이 아닙니다.
끝나면 Export JSON이 migration-evidence.json 파일을 쓰고, Evidence report는 인쇄 가능한 코드베이스 토폴로지 및 완전성 보고서를 렌더링합니다: 노드와 엣지 요약, 파일:줄 출처가 있는 모듈별 폐쇄, 재현율 결과와 방법, 순위가 매겨진 추출 순서, 데드 코드 목록, 타임스탬프. 우리는 그것을 DORA ICT 자산 인벤토리이자 SOC-2 변경 통제 영수증으로 위치시킵니다. 선택적 Pydantic-AI 계층이 폐쇄에 대해 질문에 답할 수 있지만, 기본은 꺼져 있고 키로 게이트되며, 결정론적 데모는 키 없이 결과를 기록합니다.
한 필드의 한 변경을, 알려진 정답 집합에 대해 해소합니다. 아래 이미지는 모두 실행 중인 앱의 스크린샷입니다.
기본 뷰는 TRN-LIMIT가 선택된 송금 서브시스템에서 시작합니다. 영향 패널은 픽스처의 알려진 정답 의존성 집합에 대해, 나이브 단일 파일 컨텍스트 3/9 (33%) 대비 그래프 검색 9/9 (100%)를 보여줍니다. 한 파일에서 보이는 사실은 세 가지입니다: WIRETXN이 COMPUTE에서 TRN-LIMIT를 사용하고(WIRETXN.cbl:33), 카피북 CBACCT가 이름으로 임포트되며(WIRETXN.cbl:13), DB2 테이블 ACCOUNTS에 대한 UPDATE가 발생합니다(WIRETXN.cbl:37). 정확성을 결정하는 여섯은 아닙니다: TRN-LIMIT는 long이 아니라 BigDecimal이 되어야 하는 PIC S9(9)V99 COMP-3 패킹 십진수이고(CBACCT.cpy:11), TRN-LIMIT-ALPHA가 같은 여섯 바이트 위에서 텍스트로 REDEFINES하며(CBACCT.cpy:12), LIMIT-TYPE-FLAG가 어느 해석이 살아있는지를 결정하고(CBACCT.cpy:13), 두 프로그램(LIMITSET과 BATCHUPD)이 그 플래그를 쓰며, 02:00의 JCL 작업 NIGHTLY가 WIREJOB보다 먼저 돌아가 송금이 돌기 전에 플래그가 설정됩니다.
나이브 AI 컨텍스트 뷰를 켜면 그래프가 WIRETXN.cbl 안에 사는 것으로 흐려집니다. COMP-3 타입, REDEFINES 오버레이, 제어 플래그, 그 두 개의 교차 모듈 작성자, 02:00 JCL 선행 작업이 모두 회색으로 흐려지고, 빨간 배너가 결과를 말합니다: 보이는 세 사실만 주면 모델은 일반 long TRN_LIMIT를 내보내고 ACCOUNTS.TRN_LIMIT에 손상된 바이트를 쓰며, 그것이 UAT 실패입니다. 이것이 텍스트 창 도구가 구조적으로 닫을 수 없는 바로 그 맥락적 맹목 간극이며, 클릭 한 번에 보이게 됩니다.
추출 뷰는 결합도와 영향 반경 점수로 프로그램 14개 전체를 순위 매깁니다. AUDITLOG는 rank 1에서 리스크 점수 0, 결합도 0으로 안전한 첫 추출입니다. WIRETXN은 rank 11입니다(리스크 4, COMP-3 함정 하나와 JCL 중요도). DISPATCH는 미해소 동적 CALL 때문에 rank 12(리스크 5)이고, 갓 프로그램(god-program) ACCTMGR는 rank 14에서 마지막에 추출됩니다(결합도 5, 리스크 15). 그것이 방어할 수 있는 스트랭글러 피그 순서입니다. 최저 리스크 먼저, 최고 결합도 마지막.
감사 탭은 참조의 97.1%가 해소되었다고 보고합니다. 그것은 33 of 34이며, 정확히 한 건이 검토용으로 플래그되고 조용히 누락되지 않습니다. 그 한 건은 DISPATCH의 동적 CALL WS-PROGNAME으로, 타깃이 런타임에 계산되어(DISPATCH.cbl:15) 정적으로 해소할 수 없습니다. 탭은 도달 가능성으로 데드 코드도 나열합니다: AUDITLOG의 LEGACY-FORMAT 단락과 WIRETXN의 OLD-LIMIT-CHECK 단락은 도달 불가능합니다. 해소를 위조하지 않는 것이 정직한 동작이며, 규제 당국이 보고 싶어 하는 동작입니다.
위의 모든 것이 인쇄 가능한 코드베이스 토폴로지 및 완전성 보고서로 내보내집니다: 노드 47개, 엣지 70개 요약, 97.1% 커버리지, 단일 파일 가시성과 파일:줄 출처가 있는 아홉 가지 TRN-LIMIT 의존성 사실, 순위가 매겨진 추출 순서, 생성 타임스탬프. 자산이 합성이고 작성되었기 때문에 참 의존성 집합은 구성상 알려져 있으며, 그것이 재현율 수치를 주장이 아니라 재현 가능한 레이블된 측정으로 만듭니다. 우리는 9/9, 3/9, 97.1%를 이 제공된 픽스처에 귀속하며, 임의의 COBOL 자산에 대한 오픈월드 보증으로 제시하지 않습니다.
데모가 비교하는 바로 그 토글. 송금 픽스처에서 나란히.
| 차원 | 단일 파일 컨텍스트 창 | CodeGraph 지식 그래프 |
|---|---|---|
| 복구된 TRN-LIMIT 의존성 | 3 of 9 | 9 of 9, 알려진 정답 집합에 대해 |
| 카피북을 가로지르는 COMP-3 타입 | 보이지 않음 | 파일:줄 출처와 함께 해소됨 |
| REDEFINES 오버레이와 제어 플래그 | 보이지 않음 | 해소됨, 교차 모듈 작성자 포함 |
| JCL만의 순서 엣지 (NIGHTLY가 WIREJOB보다 먼저) | 보이지 않음 | PRECEDES 엣지로 모델링됨 |
| 완전성 증명 | 없음 | 97.1% 해소, 미해소는 검토용으로 플래그됨 |
| 안전한 추출 순서 | 없음 | 결합도와 영향 반경으로 순위 |
| 감사 산출물 | 없음 | 내보낼 수 있는 토폴로지 및 완전성 보고서 |
아닙니다. CodeGraph는 이해 계층이지 번역기가 아니며, COBOL을 붙여넣고 Java를 내보내지 않도록 의도적으로 설계되었습니다. 자산의 타입이 지정된 의존성 그래프를 구축하고, 변경이 건드리는 정확한 전이적 슬라이스를 파일:줄 출처와 완전성 증명과 함께 해소합니다. 번역은 그다음 단계의 활용 사례이며, 모든 번역 도구는 변경이 실제로 무엇을 건드리는지 알기 위해 여전히 이 지도가 필요합니다.
아닙니다. 그것이 지속되는 요점입니다. 실제 자산은 100만~1,000만 줄 이상이며 현재든 미래든 어떤 컨텍스트 창에도 들어가지 않습니다. 어려운 부분은 정확한 전이적 슬라이스를 검색하고 전부를 찾았음을 증명하는 것이며, 그것은 토폴로지, 검색, 증거 문제이지 추론 품질 문제가 아닙니다. 완벽한 모델조차 규제 당국에 어떤 의존성이 검색되었는지 증명할 수 없고, 여전히 안전한 추출 순서가 필요하며, 여전히 ICT 자산 인벤토리를 제출해야 합니다.
완전성 게이트는 모든 PERFORM, CALL, COPY, DB2 참조가 해소되거나 검토용으로 플래그되도록 요구하며, 결코 조용히 누락되지 않습니다. 제공된 픽스처에서는 그것이 해소된 참조 33 of 34, 즉 97.1% 커버리지이며, 해소 불가능한 한 참조는 플래그됩니다. 노드와 엣지 요약, 파일:줄 출처가 있는 모듈별 폐쇄, 재현율 결과와 방법, 순위가 매겨진 추출 순서, 데드 코드 목록이 있는 인쇄 가능한 코드베이스 토폴로지 및 완전성 보고서를 내보낼 수 있으며, DORA ICT 자산 인벤토리이자 SOC-2 변경 통제 영수증으로 위치합니다.
검토용으로 플래그되며 조용히 누락되지 않고, 그 정직한 동작이 요점입니다. 픽스처에서 해소 불가능한 한 참조는 DISPATCH의 동적 CALL WS-PROGNAME이며, 타깃이 런타임에 계산되어(DISPATCH.cbl:15) 정적으로 해소할 수 없습니다. CodeGraph는 그것을 검토 필요로 기록하고, 바로 그 이유로 DISPATCH를 안전한 추출 순서의 끝에 가깝게 순위를 매깁니다.
이 데모에서는 아닙니다. 그래프는 인메모리와 SQLite이고, DB2, JCL, 스케줄러 입력은 파일 픽스처이며, 나이브 단일 파일 뷰는 시뮬레이션된 컨텍스트 창입니다. 프로덕션 배포는 Neo4j 또는 Memgraph 같은 그래프 플랫폼을 명시하고 실제 자산을 읽겠지만, 여기 어떤 것도 라이브 z/OS 파이프라인을 함의하지 않습니다. 데모는 배포가 아니라 합성 자산에서 메커니즘을 증명합니다.
우리는 IBM이나 시스템 통합사업자의 파서를 이긴다고 주장하지 않으며, 데모 파서는 모든 방언, ALTER, OCCURS DEPENDING ON이 아니라 COBOL의 현실적인 합성 부분집합을 다룹니다. 차이는 산출물입니다: 파일별 번역이 아니라, 저장소 인식 지식 그래프에 완전성 증명과 안전한 추출 순서입니다. 그것은 어떤 번역 노력에도 먼저 필요한 이해 계층이며, 더 나은 기반 모델이 없애지 않는 계층입니다.
메커니즘을 증명하는 실행 가능한 데모이지, 배포된 파이프라인이 아닙니다. 은행 자산은 이 데모를 위해 작성된 합성이므로 참 의존성 집합은 구성상 알려져 있으며, 그것이 재현율 지표를 주장이 아니라 재현 가능한 레이블된 측정으로 만듭니다. 파싱, 그래프, 네 가지 분석 전부는 API 키도 데이터베이스도 없이 실행되는 결정론적 순수 Python(FastAPI plus networkx, Cytoscape.js UI)입니다. 질문 응답을 위한 선택적 LLM 계층이 있지만 기본은 꺼져 있으며, 가치는 그것에 의존하지 않습니다.
이 데모의 배경이 되는 연구 — 아키텍처, 검증 설계, 엔터프라이즈 청사진.
전체 솔루션
레거시 COBOL 현대화 솔루션 살펴보기 →이해 계층이 어려운 부분입니다. 우리는 지도를 먼저 구축합니다.
팀이 아무도 볼 수 없었던 의존성으로 인한 UAT 서프라이즈 없이 COBOL 자산을 현대화하는 방법을 저울질하고 있다면, 어떻게 생각하고 계신지 진심으로 듣고 싶습니다. 문제는 산업 전반의 것이고 답도 그럴 것입니다.