코드를 버리지 않고 AI를 활용하여 리팩토링하는 방법
요약
AI를 활용한 코드 리팩토링 시 발생할 수 있는 환각과 컨텍스트 상실 문제를 방지하기 위한 실무 워크플로를 제안합니다. Git 브랜치 활용, 테스트 우선 원칙, 세밀한 Diff 검토를 통해 개발자가 통제권을 유지하며 AI를 파트너로 사용하는 방법을 다룹니다.
핵심 포인트
- AI 제안마다 개별 브랜치를 생성하여 안전하게 검증할 것
- AI 코드를 적용하기 전 반드시 기존 테스트가 통과하는지 확인
- git diff를 통해 의도치 않은 동작 변경이나 보안 문제를 줄 단위로 검토
- AI를 결정권자가 아닌 브레인스토밍 파트너로 활용하여 통제권 유지
코드를 버리지 않고 AI를 활용하여 리팩토링하는 방법
AI를 이용한 리팩토링은 어색합니다. 도구들은 강력하지만, 환각(hallucinate)을 일으키고, 컨텍스트를 잃어버리며, 심지어 더 나아지게 만들기 전에 코드베이스를 더 안 좋게 만들 때도 있습니다. 제가 분노하며 포기하지 않고 이들을 사용하는 방법을 공유합니다.
순진한 AI 리팩토링의 문제점
지난달에 저는 Claude에게 500줄짜리 서비스 파일을 리팩토링해 달라고 요청했습니다.
- 아키텍처 선호도 파악하기
- 의도가 무엇이었는지 추측하기
- 비즈니스 로직의 미묘한 차이 이해하기
- 안전하게 breaking changes 만들기
4단계: Git으로 탈출하기 (Git Your Way Out)
AI가 제시하는 모든 제안에 대해 브랜치를 만드세요. 단 하나도 빠짐없이요. 작아 보여도 상관없습니다.
git checkout -b ai/refactor-user-service
# AI 제안 붙여넣기, 테스트 실행
# 좋으면: merge. 아니면: 브랜치 삭제.
테스트는 AI 코드를 실행하기 전에 통과해야 합니다. 만약 통과하지 못한다면, 먼저 수정하세요. 깨진 테스트 위에서 진행하는 AI 리팩토링은 새로운 버그를 만드는 방법입니다.
5단계: Diff(차이점) 읽기, 줄 단위로
지루하다는 것을 압니다. 하지만 바로 여기서 AI의 환각 현상(hallucinations)을 잡아낼 수 있습니다:
- 원래 없던 곳에 동작 변경이 생겼나요?
- 새로운 의존성(dependencies)이 몰래 들어왔나요?
- 보안 관련 문제가 있나요? (AI는 어떤 이유로든
.eval()추가를 좋아합니다) - 언급되지 않은 성능 트레이드오프가 있나요?
전문 팁: 먼저 git diff --stat을 사용하여 얼마나 많이 변경되었는지 확인하세요.
실제로 도움이 되는 도구들
- GitHub Copilot — 유용한 용도: 현재 편집 중인 코드에서 추출 (extract) 패턴을 제안할 때
- Claude — 유용한 용도: 코드가 왜 나쁘게 작성되었는지 이해하고, 다양한 리팩토링 (refactoring) 접근 방식을 얻을 때
- Cursor IDE — 유용한 용도: 편집 과정에서 AI의 제안을 점진적으로 적용할 때
- ChatGPT — 솔직히 말하자면? 주로 기존 코드를 설명하는 데는 유용하지만, 리팩토링 (refactoring)에는 아주 뛰어나지는 않음
진짜 교훈
AI 리팩토링 (AI refactoring)은 AI가 모든 것을 결정하게 만드는 것이 아닙니다. 핵심은 당신이 통제권을 유지하면서 AI를 브레인스토밍 (brainstorming) 파트너로 사용하는 것입니다. AI는 당신의 마감 기한, 팀의 선호도, 또는 당신이 왜 그 변수 이름을 x라고 지었는지(비록 이상해 보일지라도) 이해하지 못합니다.
똑똑하지만 주의력이 산만한 사람과 페어 프로그래밍 (pair programming)을 하는 것이라고 생각하세요. 당신이 운전(drive)합니다. 그들은 제안합니다. 당신이 검증합니다. 당신이 병합 (merge)합니다.
그게 전부입니다. 그것이 실제로 작동하는 워크플로 (workflow)입니다.
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기