Mistral AI 레거시 코드 현대화
Mistral AI는 유럽 에너지 운영자에게 물리적 집약적인 저수지 시뮬레이터의 40,000줄의 Fortran 77 코드를 C++로 성공적으로 마이그레이션했습니다. 이 프로젝트는 복잡한 레거시 시스템을 현대화하기 위해 단순한 구문 번역을 넘어서 아키텍처 리팩터링이 필요하며, 수치적 검증과 구조화된 인간-인-더-루프 에이전트 워크플로우가 이를 뒷받침해야 한다는 점을 보여줍니다.
검증을 위한 수치적 동등성 확보
마이그레이션을 시작하기 전, Mistral은 레거시 Fortran 77 시스템과 이식된 C++ 코드베이스 간의 수치적 동등성을 보장하기 위해 평형 허니스(harness)를 구현했습니다. Fortran의 절차적 구조와 C++의 객체 지향 구조 간의 구조적 차이로 인해 라인 단위 대응이 불가능하므로, 출력의 수치적 동등성이 유일한 신뢰할 수 있는 정확성 증명입니다.
평형 허니스는 다음과 같은 구성으로 이루어졌습니다:
- 상태 내보내기 서브루틴: Fortran 코드베이스에 추가되어 상태 스냅샷을 덤프합니다.
- C++ 테스트 프레임워크: 이러한 체크포인트를 로드하고 마이그레이션된 모듈의 출력을 검증합니다.
- Skill.md 파일: AI 에이전트가 허니스를 올바르게 사용하도록 안내합니다.
Fortran 코드에 특정 변수(예: RHOG)를 내보내는 라인을 삽입함으로써, 팀은 이러한 값을 참조 체크포인트로 사용하여 마이그레이션된 C++ 모듈을 검증할 수 있었습니다.
에이전트 트리로 레거시 코드 문서화
레거시 코드베이스는 종종 오래된 PDF와 인라인 주석에 흩어진 문서화를 가지고 있습니다. Mistral은 절차적 Fortran 프로그램을 단일 호출자-호출자 트리로 간주하여 이 문제를 해결했습니다.
맞춤형 파서를 사용해 트리를 생성한 후, Mistral은 Vibe CLI를 통해 100개 이상의 에이전트를 배포했습니다. 이 에이전트들은 Mistral OCR과 문서 라이브러리를 활용해 관련 PDF를 읽어와 코드베이스를 문서화했습니다. 이 과정은 하향식 접근 방식을 따랐습니다: 에이전트는 트리의 잎에서 시작하여 위로 진행했으며, 각 노드는 코드를 문서화하고 풀 리퀘스트(PR)를 열기 위해 하위 에이전트를 생성했습니다. 크론 스케줄로 실행되는 리뷰어 에이전트는 이러한 PR을 모니터링하고 필요에 따라 수정 작업을 예약했습니다.
마이그레이션을 위한 AI 에이전트 워크플로우의 진화
Mistral은 마이그레이션 과정에 대해 세 가지 다른 수준의 자율성을 테스트했으며, 구조화된 인간-보조 워크플로우가 품질과 효율성의 최적 균형을 제공함을 발견했습니다.
완전 자율 번역
첫 번째 시도에서는 에이전트가 하위 루틴을 독립적으로 번역하도록 완전 자율을 부여했습니다. 이로 인해 "C++ 구문으로 재타이핑된 Fortran"이 탄생했으며, COMMON 블록은 전역 구조체로 변환되고 GOTO 기반 제어 흐름은 그대로 유지되어 진정한 아키텍처 현대화를 달성하지 못했습니다.
구조화된 에이전트 팀
두 번째 시도에서는 각 모듈당 플래너, 코더, 테스터, 코드 품질 리뷰어로 구성된 에이전트 팀을 활용했습니다. 코드 품질은 향상되었지만, 복잡한 버그를 마주했을 때 인간의 개입 없이 에이전트들이 자주 정지했습니다.
인간-인-더-루프 구조화된 워크플로우
마지막 성공적인 접근 방식은 인간이 코더, 테스터, 리뷰어 에이전트의 워크플로우를 운영하는 것이었습니다. 코드베이스는 독립적인 모듈(10,000줄 미만의 Fortran 서브트리)로 나뉘었습니다. 각 모듈은 다음 순서를 따릅니다:
- 아키텍처 생성: 대상 C++ 아키텍처를 생성합니다.
- 공학 리뷰: 저수지 엔지니어와 함께 아키텍처를 검토합니다.
- 작업 큐잉: 승인된 아키텍처를 작업 큐로 분할합니다.
- 구현 루프: 각 작업에 대해
계획 → 구현 → 테스트 → 반복의 하위 워크플로우를 실행합니다. - 인간 병합: 인간이 결과 PR을 검토하고 변경을 요청하여 병합될 때까지 반복합니다.
레거시 시스템 현대화의 핵심 원칙
300,000줄 중 40,000줄을 마이그레이션한 경험을 바탕으로, Mistral은 대규모 레거시 마이그레이션을 위한 세 가지 핵심 원칙을 도출했습니다:
- 평형 허니스 우선: 마이그레이션 코드를 작성하기 전에 검증 시스템을 구축하세요; 수치적 일치는 완료를 입증하는 가장 설득력 있는 증거입니다.
- 문서화를 먼저 진행하세요: 마이그레이션 전에 에이전트를 활용해 문서화를 통합하고 정리하세요. 읽을 수 없는 코드는 마이그레이션할 수 없습니다.
- 구조화된 워크플로우 구현: 대규모에서는 인간 리뷰 게이트를 포함한 구조화된 워크플로우가 완전 자율과 순수 수동 세션 모두를 능가합니다.