‘AI로 54만 줄의 코드를 2주 만에 마이그레이션’이라는 말을 듣고, 현업 엔지니어들은 우선 의심했습니다. 중국에서 화제가 된 이 사례는 후속 기사에서 ‘2주’라는 기간의 구체적인 내용과 AI를 통제한 실질적인 규칙까지 공개하고 있습니다. 숫자 자체보다 그 과정이 더 가치가 있습니다.
- 대상: 가동 10년, 약 54만 줄의 PHP로 작성된 EC 핵심 시스템(상품 목록, 가격, 검색 등). 미국 및 캐나다 사이트를 지원함.
- 상태: 문서 부족, 단위 테스트(Unit Test), 통합 테스트(Integration Test), 회귀 테스트(Regression Test) 모두 전무.
- 인력 구성: Java에 능숙한 베테랑 4명. Cursor Ultra를 9개 계정으로 사용했으며, 2주간의 도구 비용은 약 1,800달러가 소요됨.
- 기간: 핵심 마이그레이션과 주요 동작 일치 및 기본 검증에 2주가 소요되었고, 이후 단계별 출시와 모니터링, 세부 수정에 추가로 1주일 이상이 걸림.
- 결과: PHP 약 54만 줄이 Java 약 22만 줄로 축소됨. 커밋은 1주차에 300회 초과(일 평균 약 45회), 2주차에 500회 초과(일 평균 70회 이상)를 기록.
- 실전: A/B 테스트 결과 주문 수 차이는 -0.8%, 매출 차이는 -0.6%를 보임. 미국 사이트는 100% 전환, 캐나다는 80%가 적용됨. 롤백(Rollback)이나 P0 장애는 발생하지 않음.
‘2주’라는 기간은 어디까지나 코드의 주요 부분 마이그레이션에 걸린 시간입니다. 이 경계를 저자 스스로 명확히 구분했다는 점이 신뢰할 수 있는 이유 중 하나입니다.
전환점은 문제 정의 방식을 바꾼 것이었습니다. ‘왜 이렇게 설계했는지’를 이해하려고 노력하는 대신, ‘입력이 무엇이고, 무엇을 반환하며, 어떤 항목이 일치해야 하는가’를 기준으로 삼았습니다.
1주차는 ‘일단 동작하게 만드는’ 주였습니다. 약한 타입 지정의 Map으로 데이터를 주고받던 방식을 Java의 DTO(Data Transfer Object, 타입 지정 데이터 클래스)로 대체하고, ES 검색, 필터링, 캐싱, 가격 표시 로직을 AI를 이용해 일괄 변환했습니다. 아울러 Redis나 Feign(HTTP API 호출 공통 컴포넌트)도 정비했습니다. 2주차는 ‘정확하게 동작하게 만드는’ 주였으며, 차이점 해소, 긴 함수의 분할, PHP 원본 코드와의 대응 코멘트 추가, 성능 개선 등을 진행했습니다.
테스트가 없는 상태의 검증은 동일한 요청을 신규 버전과 구버전 양쪽에 보내서 반환된 내용을 항목별로 대조하는 방식이었습니다.
다만, 그대로 비교하면 캐시 차이 때문에 화면에 차이가 너무 많이 나타납니다. 그래서 비교를 두 단계로 나누어 진행했습니다.
- 1단계에서만 차이가 나고 캐시를 거치지 않는 2단계에서는 사라진 것: 캐시의 차이이므로 버그가 아님.
- 2단계에서도 계속 차이가 난 것: 업무 로직의 차이이므로 반드시 수정해야 함.
- 2단계에서 처음 나타난 것: 캐시가 하위 계층의 문제를 숨기고 있었음.
여기에 더해, "1"과 1, `
AI는 차이점은 감지했지만, 반대로 수정하여 화면에 에러가 사라지지 않았습니다. 5% 단계적 출시(staged release) 중에 발견되었고, 수정에는 10분이 걸렸습니다. 상품 수가 PHP보다 적었습니다. AI도 사람도 검색 조건은 올바르다고 판단했지만, 실제로는 응답을 구성하는 단계에서 일부 값이 누락되어 있었습니다. 이 경험을 통해 '진입점뿐만 아니라 마지막에 값을 할당하는 줄까지 추적한다'는 규칙이 생겼습니다.
- AI가 확인 없이 빌드를 실행하여 조사 중인 상태를 지워버렸습니다. 이후로는 환경에 영향을 주는 작업은 반드시 사람이 확인하도록 했습니다.
위험도에 따라 AI에게 맡기는 정도를 3단계로 나누었습니다. 핵심 부분은 사람이 주도하고 AI는 보조하며, 중요 부분은 AI가 구현하고 사람이 엄격하게 검토하며, 주변 부분은 AI의 재량을 넓혀주는 방식입니다. 어느 단계에서든 AI에게 먼저 계획(변경할 파일, 절차, 위험 요소, 영향 범위)을 제시하게 하고, 사람이 승인한 후에 실행하도록 했습니다. 배포는 운영 환경과 병행하여 결과를 비교하는 검증부터 시작해, 소량의 단계적 출시, 분할 전환, 전면 전환 순서로 진행하고 있습니다. 롤백(rollback)은 분 단위로 되돌릴 수 있도록 준비했습니다.
저자는 모방 가능한 전제 조건으로 '경험자 4명', '도구에 대한 투자', '연결 지점이 비교적 명확한 모듈 구성', 그리고 '업무 부서의 협력'을 언급하며, '2주'라는 수치만 가지고 경영 판단을 내리지 않도록 당부합니다.
오래된 Java나 PHP 시스템을 다루는 현장에서도, 먼저 비교 명령어와 규칙 파일 두 가지를 준비하는 것부터 시작할 수 있습니다.
출처