40년 된 ERP 시스템 마이그레이션, 데이터 정합성 문제의 숨겨진 진실
40년 된 Clipper ERP를 Delphi + PostgreSQL로 마이그레이션하는 과정에서 4만 개 이상의 고아 인보이스 행(Orphan Invoice Lines) 발견
초기에는 마이그레이션 결함으로 의심했으나, 오랜 기간 유지된 데이터 정리 패턴(Data Purge Pattern)으로 밝혀짐
AI를 활용하여 코드 분석을 가속화했지만, 데이터 검증(Data Verification)은 여전히 중요함을 강조
레거시 시스템의 데이터 구조(Data Structure)와 아키텍처(Architecture)가 유지 보수성에 미치는 영향 분석
커뮤니티에서는 레거시 시스템 마이그레이션의 어려움과 AI의 역할에 대한 다양한 의견(Various Opinions) 제시
고아 데이터의 진실: 의도적인 데이터 정리 패턴
마이그레이션 과정에서 발견된 41,095개의 고아 인보이스 행(Orphan Invoice Lines)과 4,160개의 고아 현금 영수증은 단순한 오류가 아니었다. 실제로는 오랜 기간 동안 유지된 데이터 정리(Data Purge) 패턴의 결과였다. 이는 시스템의 DBF 파일 크기 관리(DBF File Size Management)를 위한 조치였으며, 헤더를 주기적으로 정리하면서 관련 트랜잭션 데이터는 유지하는 방식으로 운영되었다. 이러한 패턴은 레거시 시스템의 생존 전략(Survival Strategy)이었음을 알 수 있다.
AI를 활용한 레거시 시스템 분석
AI는 570개의 Clipper 소스 파일을 분석하고, 프로그램, 메뉴, DBF 관계를 매핑하는 데 활용되었다. 또한, AI는 비즈니스 규칙(Business Rules)을 추출하고, 현대적인 방식으로 재구현하기 위한 쿼리를 생성하는 데 기여했다. 하지만, AI는 데이터 검증(Data Verification)을 대체할 수 없었다. 저자는 AI가 가설 생성의 속도를 높이는 데 기여했지만, 최종적인 검증은 SQL 쿼리를 통한 반복적인 확인을 통해 이루어졌다고 강조한다.
레거시 시스템의 기술적 부채와 적응
40년 동안 유지된 시스템은 다양한 기술적 부채(Technical Debt)를 안고 있었다. 예를 들어, `cust_no` 필드에 VOIDED 상태(Voided Status)를 나타내는 마커를 삽입하거나, 동일한 열에 여러 날짜 형식을 혼용하는 등, 현대적인 시스템에서는 지양하는 방식들이 사용되었다. 이러한 안티 패턴(Anti-Patterns)은 과거의 제약 조건(파일 크기 제한, 단일 사용자 인덱스 잠금 등)을 극복하기 위한 적응(Adaptation)의 결과였다.
마이그레이션 전략의 변화: 사용량 매핑의 중요성
570개의 파일로 구성된 코드베이스를 분석하는 과정에서, 사용량 매핑(Usage Mapping)이 코드 분석보다 더 중요한 영향을 미쳤다. 즉, 어떤 파일이 실제로 사용되는지 파악하는 것이 마이그레이션 전략을 결정하는 데 핵심적인 역할을 했다. 이는 소스 코드의 양(Source Volume)보다 비즈니스 흐름(Business Flow)에 따라 우선순위를 정하는 접근 방식을 가능하게 했다. AI는 이러한 분석을 가속화하는 데 기여했다.
데이터 정합성 문제 해결: 위험 감수와 명확한 문서화
마이그레이션 과정에서 고아 데이터(Orphan Data) 문제를 해결하기 위해 두 가지 선택지가 있었다. 첫째는 존재하지 않는 데이터를 복구하려는 시도, 둘째는 영향 범위를 파악하고 위험을 문서화하는 것이다. 저자는 두 번째 방법을 선택했다. 즉, 41,095개의 고아 인보이스 행(1.36%, $530,833.66)과 4,160개의 고아 현금 영수증(1.19%, $341,775.36)을 영구적인 레거시 데이터 상태(Permanent Legacy Data Condition)로 인정하고, 현재 비즈니스 운영에 미치는 영향이 없음을 명시했다.