🧑🏻💻 Ep.12 | AI로 레거시 코드 다루기
5년 된 코드를 리팩토링해야 합니다. 누가 왜 이렇게 짰는지 아는 사람은 이미 퇴사했습니다. AI에게 "이 코드 정리해줘"라고 시키면 깔끔하게 바꿔줍니다. 배포하면 터집니다. 왜 터졌는지 AI도 모르고, 시킨 사람도 모릅니다.
레거시 코드는 AI가 가장 자신 있게, 그리고 가장 위험하게 건드리는 영역입니다.
1. 레거시 코드가 어려운 진짜 이유
레거시 코드가 어려운 건 코드가 복잡해서가 아닙니다. 코드에 담긴 의도를 아는 사람이 없어서입니다.
이 조건문은 왜 있을까. 이 예외 처리는 왜 이 위치에 있을까. 겉으로 보면 불필요해 보이는 코드가 실은 3년 전 장애 대응의 결과물입니다. 히스토리를 모르면 "필요 없는 코드"로 보입니다. 지우면 같은 장애가 다시 터집니다.
레거시의 본질은 코드에 녹아 있는 암묵지입니다.
2. AI가 레거시를 이해하는 방식과 한계
AI는 코드를 분석할 수 있습니다. 구조를 파악하고, 의존 관계를 추적하고, 패턴을 식별합니다. 하지만 AI가 보는 건 현재 코드의 형태입니다.
이 코드가 왜 이 형태가 되었는지, 어떤 장애를 겪어서 이 분기가 추가되었는지, 이건 모릅니다. git blame으로 커밋 기록을 볼 수는 있습니다. 하지만 커밋 메시지가 "fix bug"라면 맥락은 여전히 없습니다.
AI에게 레거시 리팩토링을 시키면 코드의 형태는 개선하지만 의도를 보존하지 않습니다. 이것이 레거시에서 AI가 위험한 이유입니다.
3. AI를 투입하기 전에 해야 할 것
레거시 코드를 AI와 함께 다루려면 준비가 필요합니다. 코드를 던져주기 전에 맥락을 정리하는 단계입니다.
세 가지를 먼저 확인해야 합니다.
✔️ 변경 범위 확인: 이 코드를 수정하면 어디까지 영향을 받는가
✔️ 테스트 존재 여부: 현재 동작을 검증하는 테스트가 있는가
✔️ 비즈니스 규칙 확인: 이 코드가 지키고 있는 정책이 무엇인가
이 세 가지가 정리되면 AI에게 "이 범위 안에서, 이 동작을 유지하면서, 구조만 개선해줘"라고 시킬 수 있습니다. 범위가 없으면 AI는 전체를 건드립니다.
4. 안전한 리팩토링 순서
레거시 리팩토링에는 순서가 있습니다. 한 번에 크게 바꾸면 깨집니다.
1️⃣ 현재 동작을 테스트로 고정: 리팩토링 전에 현재 동작을 기록하는 테스트를 작성합니다.
2️⃣ 구조 변경 없이 가독성 개선: 변수명, 메서드 추출 같은 안전한 변경부터 시작합니다.
3️⃣ 의존성 정리: 불필요한 결합을 풀어냅니다.
4️⃣ 비즈니스 로직 분리: 핵심 로직을 인프라 코드에서 분리합니다.
각 단계마다 테스트가 통과하는지 확인합니다. 이 순서에서 AI는 2번과 3번에서 가장 잘 도와줍니다. 코드 구조를 읽고 패턴을 적용하는 작업이니까요.
1번을 건너뛰면 나머지가 전부 위험해집니다. 테스트 없는 리팩토링은 리팩토링이 아니라 도박입니다.
5. 테스트가 없는 레거시를 다루는 법
현실에서는 테스트가 없는 레거시가 대부분입니다. 그렇다고 리팩토링을 포기할 수는 없습니다.
이때 AI가 도움이 됩니다. 기존 코드의 동작을 분석해서 특성 테스트(characterization test)를 만드는 작업입니다.
"이 메서드가 현재 어떻게 동작하는지 테스트로 기록해줘."
정답이 아니라 현재 상태를 기록하는 것이 목적입니다. 이 테스트가 있으면 리팩토링 중에 동작이 바뀌는 순간을 잡을 수 있습니다.
완벽한 테스트가 아니어도 됩니다. 변경을 감지할 수 있는 최소한의 그물이면 충분합니다.
6. 레거시에서 의도를 추출하는 방법
코드를 고치는 것만큼 중요한 게 있습니다. 왜 이렇게 되어 있는지를 문서로 남기는 것입니다.
AI가 이 작업을 잘 도와줍니다.
✔️ "이 클래스가 하는 일을 요약해줘"
✔️ "이 분기 조건이 어떤 경우를 처리하는지 분석해줘"
✔️ "이 코드의 의존 관계를 다이어그램으로 정리해줘"
코드를 읽고 구조를 정리하는 건 AI가 빠릅니다. 다만 AI가 정리한 내용을 그대로 믿지는 마세요. AI는 코드의 형태에서 의도를 추측합니다. 실제 의도와 다를 수 있습니다. 운영 이력이나 장애 기록과 대조하는 건 사람의 몫입니다.
7. 레거시는 맥락이다
레거시를 "오래된 코드"로 보면 "빨리 치워야 할 것"이 됩니다. 하지만 레거시는 조직이 겪은 문제와 해결의 누적입니다.
AI는 코드의 형태를 바꿔줄 수 있습니다. 하지만 그 코드에 담긴 맥락은 사람만이 판단할 수 있습니다.
레거시 코드를 다루는 실력은 코드를 고치는 기술이 아닙니다. "이걸 왜 건드리면 안 되는지"를 아는 감각입니다.
🌱 레거시와 씨름하는 개발자들이 함께하는 곳, 루퍼스
트랜잭션 설계, 멀티모듈 구조, 운영 환경에서의 리팩토링.
루퍼스 Loop:PAK에서는 현업에서 마주하는 기술 과제를 실전으로 다룹니다.
AI 시대에도 결국 중요한 건 생각하는 힘과 성장하는 환경이라고 믿습니다.
루퍼스에는 성장에 진심인 700+명의 크루가 함께하고 있습니다. 현업에서 부딪히는 고민과 경험을 나누며 함께 성장하는 크루들의 이야기. 전액 기부 강의 그리고 다양한 오프라인 네트워킹까지! 루퍼스는 개발자를 위한 지속 가능한 성장을 만들어 갑니다.
📢 LOOPERS의 소식이 궁금하다면?
Share article