AI 코드 리팩토링 프롬프트 작성법, 기능 유지부터 가독성·보안·테스트 검증까지 총정리
AI 코딩 도구에 “이 코드 리팩토링해 줘”라고만 요청하면 예상보다 큰 범위가 바뀌거나 기존 동작이 달라질 수 있습니다.
코드가 짧아졌다고 반드시 읽기 쉬워지는 것도 아니고요.
안전하게 개선하려면 프롬프트에 유지해야 할 기능, 변경 범위, 개선 기준, 결과 형식을 구체적으로 적어야 합니다.
리팩토링과 재작성부터 구분하세요
리팩토링은 외부에서 보이는 기능을 그대로 유지하면서 내부 구조를 다듬는 작업입니다.
입력값과 반환값, 오류 처리, 공개 함수 이름이 달라지면 단순한 리팩토링이라고 보기 어려워요.
반면 재작성은 사용 기술이나 구조, 라이브러리까지 크게 바꿀 수 있습니다.
따라서 요청 첫 부분에 기존 동작과 공개 API를 유지하세요라고 명확히 적는 것이 중요합니다.
새 패키지를 추가해도 되는지, 함수 이름을 바꿔도 되는지, 오류 메시지를 그대로 유지해야 하는지도 함께 알려주세요.
좋은 리팩토링은 코드를 무조건 짧게 만드는 작업이 아닙니다.
다음에 읽는 사람이 더 빠르고 안전하게 수정할 수 있도록 만드는 작업입니다.
프롬프트에 반드시 들어갈 네 가지
1. 현재 실행 환경
사용 언어와 버전, 프레임워크, 런타임, 스타일 규칙을 먼저 알려주세요.
예를 들어 TypeScript라면 strict 모드 사용 여부를 적고, React라면 서버 컴포넌트인지 일반 클라이언트 컴포넌트인지 구분하는 것이 좋습니다.
테스트 코드와 린트 규칙이 있다면 함께 전달해야 결과가 프로젝트 환경과 어긋나지 않습니다.
2. 반드시 유지할 조건
함수 입력값과 반환값, 외부 API 호출 순서, 오류 형식, 데이터베이스 접근 횟수처럼 바뀌면 안 되는 항목을 적으세요.
특히 결제와 권한, 회원정보 처리 코드는 작은 변경도 실제 서비스 동작에 영향을 줄 수 있습니다.
확실하지 않은 요구사항은 추측해서 수정하지 말 것이라는 문장도 도움이 됩니다.
3. 원하는 개선 기준
“깔끔하게 바꿔줘”보다 관찰 가능한 기준을 사용해야 합니다.
중첩 조건문 축소, 중복 로직 분리, 모호한 변수명 개선, 매직 넘버 상수화, 함수 책임 분리처럼 원하는 결과를 구체적으로 적으세요.
한 줄로 줄이는 것보다 중급 개발자가 디버깅하기 쉬운 명시적인 흐름을 우선해 달라고 요청해도 좋습니다.
4. 결과 출력 순서
개선된 코드만 받으면 무엇이 달라졌는지 검토하기 어렵습니다.
먼저 문제점 분석, 변경 계획, 개선 코드, 변경 이유, 위험 요소, 필요한 테스트 순서로 출력하게 하세요.
파일이 크다면 전체 코드를 다시 받기보다 수정된 함수나 diff 형태로 요청하는 편이 안전합니다.
바로 사용할 수 있는 기본 프롬프트
다음과 같은 구조로 작성하면 됩니다.
“아래 코드를 동작 변경 없이 리팩토링해 주세요.
함수의 입력값, 반환값, 오류 처리, 공개 API는 유지하세요.
새 의존성은 추가하지 말고 확실하지 않은 요구사항은 추측하지 마세요.
중첩 조건문을 줄이고, 중복 로직을 분리하며, 변수와 함수 이름에서 의도가 드러나게 개선하세요.
먼저 현재 문제점을 설명한 뒤 변경 계획, 개선된 전체 코드, 변경 이유, 회귀 테스트 항목을 순서대로 작성하세요.”
여기에 실제 프로젝트 조건을 덧붙이면 됩니다.
예를 들어 “결제 API 호출 순서는 변경 금지”, “응답 JSON 구조 유지”, “기존 클래스 구조 존중”, “TypeScript의 any와 강제 타입 단언 추가 금지”처럼 적을 수 있어요.
한 번에 너무 많이 바꾸지 마세요
구조 분리와 타입 재설계, 성능 최적화, 라이브러리 교체, 테스트 추가를 한꺼번에 요청하면 변경 범위가 커집니다.
결과가 좋아 보여도 어떤 수정 때문에 문제가 생겼는지 찾기 어려워져요.
한 번의 요청에는 중심 목표 하나만 두는 것이 좋습니다.
먼저 변수명과 중복 조건을 정리하고, 다음 요청에서 함수 책임을 분리하세요.
그다음 테스트를 추가하고 성능 개선은 실제 측정 자료가 있을 때 별도로 진행하는 식입니다.
작게 나누면 코드 리뷰와 롤백도 훨씬 쉬워집니다.
개선 코드보다 검증 과정이 더 중요해요
AI가 만든 코드는 완성품보다 검토가 필요한 초안에 가깝습니다.
원본 코드와 리팩토링 결과를 함께 제공하고 기능 차이, 예외 처리 누락, null과 undefined 경계 조건, 성능 저하 가능성을 다시 검토하게 하세요.
기존 테스트가 있다면 반드시 실행하고, 없다면 핵심 동작을 기준으로 테스트 사례부터 만들어야 합니다.
주의하세요.
테스트가 통과했다고 해서 모든 동작이 동일하다는 뜻은 아닙니다.
실제 운영 환경의 예외 조건과 외부 서비스 계약은 사람이 직접 확인해야 합니다.
보안 관련 코드는 별도로 점검하세요
로그인과 권한, 결제, 사용자 입력, 데이터베이스 쿼리를 다루는 코드는 가독성만 보고 적용하면 안 됩니다.
입력값 검증과 권한 확인이 빠지거나, SQL 인젝션과 XSS 위험이 생기지 않았는지 살펴보세요.
API 키와 비밀번호를 코드에 직접 넣지 말 것도 프롬프트에 명시하는 것이 좋습니다.
존재하지 않는 라이브러리나 API가 추가되지 않았는지도 확인하세요.
새 패키지를 제안받았다면 실제 공식 문서와 라이선스, 유지관리 상태를 확인한 뒤 적용해야 합니다.
GitHub Copilot 공식 문서 확인하기
코드 제안과 채팅 기능, 사용 시 주의사항을 공식 문서에서 확인하세요.
OWASP 보안 기준 확인하기
리팩토링 후 입력 검증과 권한, 웹 보안 취약점을 점검할 때 참고하세요.
마지막 검토 순서
첫째, 원본과 수정본의 diff를 읽습니다.
둘째, 기존 테스트와 새로 제안받은 테스트를 실행합니다.
셋째, 반환값과 오류 메시지, 외부 API 호출 순서를 비교합니다.
넷째, 보안과 성능에 영향을 줄 수 있는 변경을 따로 확인합니다.
다섯째, 이해하지 못한 코드는 그대로 적용하지 않습니다.
AI 코드 리팩토링의 품질은 모델보다 작업 지시의 구체성에서 크게 달라집니다.
유지해야 할 계약과 개선 목표를 먼저 정하고, 작은 범위로 수정한 뒤 테스트와 사람의 리뷰까지 거쳐야 안전하게 가독성을 높일 수 있습니다.