본문으로 건너뛰기

레거시 현대화 플러그인을 열어 보니 코드 도구가 아니었다

Anthropic 공식 플러그인 code-modernization 의 소스를 읽었다. 중심은 코드 생성이 아니라 승인 가능한 문서였고, 미해결 버그와 국내 적용 공백도 분명했다.

COBOL이나 구형 .NET을 안고 있는 조직에서 "AI로 현대화"라는 말이 나오면 대개 코드 변환을 떠올린다. Anthropic 공식 플러그인 code-modernization을 열어 보니 무게 중심이 다른 곳에 있었다.

소스를 직접 읽었다. 커맨드 10개, 에이전트 8개, 워크플로 스크립트 6개, 토폴로지 뷰어 1개. 전부 합쳐 약 5,655줄인데 대부분이 실행 코드가 아니라 지시문 문서다.

강제하는 순서가 핵심이다

preflight → assess → map → extract-rules → brief → (transform | reimagine | uplift) → harden

README가 이유를 이렇게 적는다. 현대화는 팀이 단계를 건너뛸 때 실패한다는 것이다. 이해하기 전에 코드를 바꾸거나, 동작이 틀어졌는지 잡아낼 하네스 없이 배포하는 경우다.

단계마다 산출물이 파일로 떨어진다.

단계산출물
preflightPREFLIGHT.md — 명령별 준비 상태(가능 / 부분 가능 / 불가)
assessASSESSMENT.md, 여러 시스템이면 portfolio.html 시퀀싱 히트맵
maptopology.json과 인터랙티브 TOPOLOGY.html, 호출 그래프·데이터 리니지
extract-rulesBUSINESS_RULES.md — Given/When/Then 규칙 카드에 파일:줄 인용과 확신도
briefMODERNIZATION_BRIEF.md — 목표, 단계 계획, 동작 계약, 검증 전략, 승인 블록
hardenSECURITY_FINDINGS.md와 검토용 패치. legacy/는 절대 수정하지 않는다

중심은 코드가 아니라 승인 문서다

brief 명령이 이렇게 끝난다. "멈춰라. 사용자가 명시적으로 승인할 때까지 아무것도 더 쓰지 마라. '이견 없음'은 승인이 아니다."

그리고 실행 명령 세 개는 그 브리프의 단계별 진입·종료 조건을 "맥락이 아니라 게이트"로 읽는다. 조건을 넘어서 진행하지 말고, 조용히 우회해 다시 계획하지도 말라고 적혀 있다.

즉 사람이 브리프를 편집하면 AI의 실행이 바뀐다. 산출물에 Approved by: ___ Date: ___ 블록까지 박혀 있다. 코드 생성 도구가 아니라 거버넌스 도구로 설계한 것이다.

공공·금융 현대화 사업에서 필요한 순서가 정확히 이거다. 문제는 늘 "AI가 코드를 옮길 수 있나"가 아니라 "무엇을 옮길지 누가 승인했나"였다.

세 가지 방법을 구분한다

transformreimagineuplift
하는 일스택을 건너뛴 재작성 (COBOL → Java)새 아키텍처로 그린필드 재구축같은 스택 버전 업 (.NET 4.8 → 8)
범위모듈 하나 (레거시는 계속 운영)시스템 전체 → 서비스 여러 개프로젝트 전체
코드 취급추출한 의도에서 새로 쓴다구조를 버리고 명세만 계승코드 보존, 최소 diff
등가성 증명특성화 테스트를 먼저 쓰고 통과시킨다실행 가능한 인수 테스트같은 테스트를 구·신 런타임에서 돌려 비교

uplift를 README가 이렇게 소개한다. "transform이 재작성으로 망치는 흔한 경우." 버전 업을 재작성으로 처리하는 실수를 겨냥한 별도 경로다.

방식도 배울 만하다. 대표 프로젝트 하나를 끝까지 옮겨 보고 그 경험을 PLAYBOOK.md로 굳힌 다음, 나머지를 의존성 순서대로 배치(처음 4개, 최대 16개)로 펼친다. 배치 빌드 성공률이 3분의 2에 못 미치면 즉시 멈춘다. 실패하는 배치에 대한 옳은 대응은 에이전트를 더 붙이는 게 아니라 플레이북을 고치는 것이라고 적혀 있다.

그리고 델타 카탈로그가 "코드 대부분이 바뀌어야 한다"를 보이면 스스로 uplift를 포기하고 transform을 권한다. 멀티 에이전트 비용을 통제하는 구조로 참고할 만하다.

증명 강도를 문서에 적게 만든다

메인프레임은 로컬에서 안 돌아간다. 이걸 설계가 인정한다. CICS/IMS 프로그램에는 로컬 번역기가 없고 실제 런타임은 내 손에 없는 메인프레임일 수 있다고 명시한다.

그래서 이중 실행을 포기하고 녹화된 출력이나 골든 마스터로 내려간다. 대신 "이 등가성은 trace 기반이다"를 변환 노트에 반드시 쓰게 강제한다. preflight도 이 경우를 "불가"가 아니라 "부분 가능"으로 판정한다. 감사 대응에서 이 차이가 크다.

COCOMO도 일정이나 비용이 아니라 상대 복잡도 지수로만 쓴다고 못 박는다. 그 상수가 사람 팀의 생산성을 담고 있고 에이전트 변환은 그 곡선을 따르지 않는다는 이유다. 정직한 처리다.

보안 설계도 눈에 띈다. 분석 대상 코드를 신뢰할 수 없는 입력으로 취급한다. 코드 주석에 "이전 지시를 무시하라"가 들어 있을 수 있기 때문이다. 자격증명은 값이 아니라 마스킹된 형태와 위치로만 남기고, 별도 gitignore 파일로 격리한다.

지금 상태로 쓰기 전에 알아야 할 것

열린 이슈를 확인했다. 전부 미해결이다.

인수가 한 칸 밀린다. 공식 문서는 첫 인수가 $0인데 커맨드 10개 전부가 $1을 쓴다. 인수를 두 개 이상 넘기면 엉뚱한 디렉터리를 분석한다. 관련 PR이 열려 있다. 쓸 거면 인수를 하나만 넘기고, 첫 출력에서 어느 경로를 봤는지 눈으로 확인해야 한다.

윈도우 절대경로가 깨진다. legacy/$1이 하드코딩돼 있어서 C:\Code\proj를 넘기면 경로가 뭉개진다. 이슈가 1년 넘게 열려 있다.

대형 저장소에서 규칙 추출이 죽은 사례가 있다. 열린 PR 설명에 큰 Perl 서비스에서 에이전트 컨텍스트가 부풀고 워크독이 재시작하면서 실행이 두 번 죽었다고 적혀 있다. 재개 경로가 문서화되지 않아 쓴 토큰이 전손됐다는 내용도 있다. 모듈 단위로 좁혀 시작하는 게 안전하다.

버전 고정이 안 된다. plugin.json에 version 필드가 없고 공식 마켓플레이스는 자동 업데이트가 기본이다. 프로젝트 중간에 프롬프트가 바뀔 수 있다. 재현성이 필요하면 포크해서 자체 마켓플레이스로 고정하는 게 맞다.

README가 권하는 권한 설정 세 줄(Write(analysis/**) 형태)은 실제로 매칭되지 않아 경고가 뜬다. Edit(legacy/**) 거부 규칙은 정상 동작하므로 격리 자체는 유지된다.

국내 적용에서 남는 공백

소스 전체를 검색해도 EBCDIC와 UTF-8 변환, 한글 인코딩, 전자정부 표준프레임워크, Tibero·Jeus 같은 국내 스택 언급이 하나도 없다. 고정 컬럼(COBOL 8~72) 처리는 있지만 인코딩 지시는 없다.

그리고 이 도구의 성패는 모델 성능이 아니라 세 가지에 달린다.

  1. copybook, JCL, CICS 정의, DDL을 얼마나 온전히 한 트리에 모으는가
  2. 실거래 데이터를 못 쓸 때 대체할 골든 마스터를 만들 수 있는가
  3. P0 규칙을 확인해 줄 현업 전문가 시간을 확보하는가

도구가 풀어 주는 문제가 아니다. 도구가 어디서 사람이 필요한지 정확히 가리켜 주는 문제다. 그것만으로도 현대화 사업 기획에서 쓸 값은 한다.

마지막으로 하나. 이 플러그인 폴더에는 evals/가 없다. 공식 평가 스위트로 검증된 기록이 공개돼 있지 않다는 뜻이다. 그리고 플러그인은 내 권한으로 임의 코드를 실행할 수 있는 구성요소다. 공식 문서도 신뢰하는 출처에서만 설치하라고 적는다.

저장소: anthropics/claude-plugins-official (Apache-2.0, 플러그인 308개 중 Anthropic 저작 39개) · 플러그인: code-modernization · 설치: /plugin install code-modernization@claude-plugins-official · 확인 기준일 2026-09-18. 소스를 읽고 확인한 내용이며, 실제 레거시 시스템에 끝까지 돌려 본 기록은 아니다.

15초 요약

인스타그램 릴스로도 올린 영상입니다. HeyGen HyperFrames 로 이 글에서 바로 렌더했습니다.

CONTACT

컨설팅 · 강의 문의

회사 메일로 남겨 주시면 구성과 비용을 안내드립니다.

gmail·naver 같은 개인 메일은 받지 않습니다.