AI에게 코드 리뷰를 요청해도 중요한 문제가 빠지는 이유
바이브 코딩으로 기능을 만든 뒤 AI에게 “이 코드를 리뷰해 줘”라고 요청하면 그럴듯한 답변을 받을 수 있다. 하지만 응답 내용이 길다고 해서 실제로 중요한 오류를 정확하게 발견했다는 의미는 아니다.
AI는 사용자가 무엇을 가장 중요하게 생각하는지 자동으로 알 수 없다. 기능 오류를 찾으려는 것인지, 보안 취약점을 확인하려는 것인지, 성능이나 코드 가독성을 개선하려는 것인지에 따라 검토 기준이 달라진다.
프로젝트의 기술 환경과 요구사항이 제공되지 않으면 AI는 일반적인 코드 작성 관습을 기준으로 판단한다. 그 결과 실제 프로젝트에서는 정상인 코드를 문제로 지적하거나, 반대로 프로젝트에 치명적인 권한 오류를 놓칠 수 있다.
AI 코드 리뷰의 정확도를 높이려면 단순히 더 길게 질문하는 것이 아니라 목표, 범위, 판단 기준과 필요한 증거를 분명하게 전달해야 한다.
좋은 코드 리뷰 프롬프트의 기본 구조
OpenAI의 공식 모델 지침은 결과 중심 프롬프트에 목표, 관련 맥락, 제약조건, 필요한 증거, 성공 기준과 출력 형식을 포함하도록 안내한다. 같은 지시를 여러 번 반복하기보다 필요한 내용을 한 번씩 명확하게 작성하는 방식이 권장된다. OpenAI 모델 프롬프트 지침
이를 AI 코드 리뷰에 적용하면 다음과 같은 구조를 사용할 수 있다.
- 무엇을 검토할 것인지 목표를 정한다.
- 프로젝트 환경과 기능 요구사항을 제공한다.
- 검토할 파일과 변경 범위를 제한한다.
- 중요하게 확인할 위험 요소를 지정한다.
- 모든 지적에 코드 근거를 요구한다.
- 문제를 재현하거나 확인하는 방법을 요구한다.
- 결과를 일정한 형식으로 출력하도록 지정한다.
1. 코드 리뷰의 목표를 하나로 좁힌다
“전체 코드를 완벽하게 리뷰해 줘”와 같은 요청은 범위가 지나치게 넓다. AI가 수많은 항목을 얕게 살펴보면서 중요한 문제를 놓칠 수 있다.
한 번의 검토에서는 목표를 하나 또는 두 개로 제한하는 것이 좋다.
예를 들어 다음과 같이 요청할 수 있다.
- 로그인 기능의 인증과 권한 오류를 검토해 줘.
- 이번 변경으로 기존 기능이 손상되는지 확인해 줘.
- 사용자 입력값이 서버에서 안전하게 검증되는지 확인해 줘.
- 외부 API 실패 시 오류 처리가 적절한지 검토해 줘.
- 불필요한 데이터베이스 호출과 반복 요청을 찾아줘.
보안, 성능, 가독성과 접근성을 한 번에 요청하기보다 검토 단계를 나누면 각 항목에 더 집중된 결과를 얻을 수 있다.
2. 프로젝트 환경과 요구사항을 알려준다
코드만 전달하면 AI가 사용 중인 프레임워크, 라이브러리 버전과 데이터 흐름을 잘못 추측할 수 있다. 검토 대상과 관련된 기술 환경을 간단하게 제공해야 한다.
다음과 같은 정보가 도움이 된다.
- 사용하는 언어와 프레임워크
- 데이터베이스와 인증 서비스
- 해당 코드가 실행되는 위치
- 로그인 사용자와 관리자의 권한 차이
- 정상적으로 작동해야 하는 사용자 흐름
- 이번 작업에서 변경하면 안 되는 기존 기능
맥락은 길게 설명할 필요가 없다. 현재 검토에 필요한 정보만 제공해야 AI가 핵심 코드에 집중할 수 있다.
예를 들어 “Next.js와 TypeScript를 사용하고 있으며 서버에서 Supabase 데이터베이스에 접근한다. 일반 사용자는 자신의 게시물만 수정할 수 있고 관리자는 모든 게시물을 수정할 수 있다” 정도로 설명할 수 있다.
3. 검토할 코드 범위를 제한한다
프로젝트 전체를 한꺼번에 제공하면 검토 결과가 분산되고 토큰 사용량도 커진다. AI가 변경하지 않은 파일까지 불필요하게 지적할 수 있다.
Git Diff를 이용해 AI가 변경한 코드만 전달하거나 검토할 파일을 지정하는 것이 좋다. 관련 코드가 다른 파일에 있다면 AI가 임의로 추측하지 말고 추가 파일을 요청하도록 지시할 수 있다.
범위를 제한하는 문장은 다음과 같이 작성한다.
“이번 검토 범위는 아래 Git Diff와 직접 관련된 함수다. 변경되지 않은 코드의 전면 리팩터링은 제안하지 마라. 판단에 필요한 파일이 부족하면 추측하지 말고 필요한 파일 경로를 먼저 알려줘.”
이렇게 요청하면 코드 리뷰가 대규모 재작성 제안으로 바뀌는 것을 줄일 수 있다.
4. 우선적으로 확인할 위험을 지정한다
AI 코드 리뷰에서는 검토 기준을 구체적으로 제공해야 한다. 로그인 기능이라면 디자인보다 인증과 권한이 중요하고, 결제 기능이라면 중복 요청과 실패 복구가 중요하다.
일반적인 웹앱에서는 다음 항목을 우선 확인할 수 있다.
- 다른 사용자의 데이터에 접근할 수 있는 권한 오류
- 사용자 입력값 검증 누락
- API 키와 개인정보 노출
- 비동기 오류와 처리되지 않은 예외
- 중복 데이터 저장과 반복 API 호출
- 데이터베이스 작업 일부만 성공하는 문제
- 빈 값과 잘못된 데이터 형식 처리
- 운영 환경에서 노출되는 디버그 정보
단순히 “보안을 확인해 줘”라고 요청하기보다 어떤 실패 상황을 찾고 싶은지 명시하는 것이 좋다.
5. 모든 지적에 근거를 요구한다
AI는 실제 오류가 아닌 가능성을 확정적인 문제처럼 설명할 수 있다. 이를 줄이려면 파일, 함수, 코드 위치와 발생 조건을 근거로 제시하도록 요청해야 한다.
다음과 같은 조건을 추가할 수 있다.
“각 문제에는 해당 파일과 함수, 문제가 되는 코드, 오류가 발생하는 조건을 제시해 줘. 코드에서 확인되지 않는 내용은 확정된 오류가 아니라 확인 필요 항목으로 구분해 줘.”
결과를 다음 세 가지로 구분하도록 요청하는 것도 좋다.
- 확인된 문제
- 발생 가능성이 있지만 추가 정보가 필요한 문제
- 코드만으로 판단할 수 없는 항목
이 구분이 없으면 사용자가 AI의 모든 지적을 실제 오류로 오해할 수 있다.
6. 재현 방법과 검증 방법을 요청한다
코드 리뷰의 목적은 문제 목록을 많이 받는 것이 아니라 실제로 확인하고 수정하는 것이다. 따라서 AI가 지적한 문제마다 재현 절차 또는 테스트 방법을 함께 제공하도록 요청해야 한다.
예를 들어 권한 문제라면 다음과 같은 검증 절차가 필요하다.
- 사용자 A로 게시물을 생성한다.
- 사용자 B로 로그인한다.
- 사용자 A의 게시물 번호를 이용해 수정 요청을 보낸다.
- 서버가 요청을 거부하는지 확인한다.
비동기 오류라면 네트워크 속도를 늦추거나 API가 실패하도록 설정한 뒤 화면 상태를 확인할 수 있다.
테스트할 수 없는 지적은 우선순위를 판단하기 어렵다. AI에게 “문제를 확인할 수 있는 최소 테스트 절차를 함께 작성해 줘”라고 요청하는 것이 좋다.
7. 성공 기준을 명확하게 작성한다
무엇을 만족해야 코드 리뷰가 끝난 것인지 정의해야 한다. 단순히 개선할 부분을 찾는 것으로 끝내지 말고 통과 조건을 지정한다.
예를 들어 다음과 같은 성공 기준을 사용할 수 있다.
- 로그인하지 않은 사용자는 보호된 API를 호출할 수 없어야 한다.
- 일반 사용자는 다른 사용자의 데이터를 수정할 수 없어야 한다.
- 잘못된 입력값은 데이터베이스에 저장되기 전에 거부돼야 한다.
- 외부 API가 실패해도 중복 데이터가 생성되지 않아야 한다.
- 타입 검사, 테스트와 운영 빌드가 모두 통과해야 한다.
- API 응답에 화면에서 사용하지 않는 개인정보가 포함되지 않아야 한다.
성공 기준이 있으면 AI는 취향에 가까운 코드 스타일보다 실제 기능과 위험을 중심으로 검토할 수 있다.
8. 원하는 출력 형식을 지정한다
출력 형식을 정하지 않으면 중요한 문제와 사소한 개선 사항이 섞여 나타날 수 있다. 사용자가 바로 판단할 수 있도록 결과 구조를 지정하는 것이 좋다.
다음 항목을 포함하도록 요청할 수 있다.
- 심각도
- 파일과 함수
- 문제 설명
- 코드 근거
- 발생 조건
- 사용자에게 미치는 영향
- 재현 또는 테스트 방법
- 최소 수정 방향
- 추가로 필요한 정보
심각도는 치명적, 높음, 보통, 낮음 정도로 나눌 수 있다. 실제 오류가 아닌 코드 스타일 제안은 별도 항목으로 분리하는 것이 좋다.
바로 사용할 수 있는 AI 코드 리뷰 검증 프롬프트
다음 프롬프트에서 대괄호 안의 내용을 프로젝트에 맞게 변경해 사용할 수 있다.
목표:
아래 변경 코드에서 [인증과 권한 오류]를 검토해 줘.
프로젝트 맥락:
- 기술 환경: [Next.js, TypeScript, Supabase]
- 기능: [로그인한 사용자가 자신의 게시물을 수정하는 기능]
- 권한 규칙: [일반 사용자는 자신의 게시물만 수정 가능]
- 유지해야 할 기능: [기존 게시물 조회와 삭제 기능]
검토 범위:
- 아래에 제공한 Git Diff와 직접 관련된 코드만 검토해 줘.
- 범위를 벗어난 전면 리팩터링은 제안하지 마라.
- 판단에 필요한 파일이 부족하면 추측하지 말고 필요한 파일을 알려줘.
우선 확인 항목:
1. 로그인하지 않은 사용자의 접근
2. 다른 사용자의 게시물 수정 가능성
3. 클라이언트에서 전달한 사용자 ID 신뢰 여부
4. 서버와 데이터베이스의 권한 검사
5. 오류 발생 시 개인정보 노출
근거 요구사항:
- 각 문제에 파일, 함수, 관련 코드와 발생 조건을 제시해 줘.
- 코드에서 확인되지 않은 내용은 “확인 필요”로 표시해 줘.
- 단순한 스타일 의견은 보안 문제와 분리해 줘.
검증 방법:
- 각 문제를 재현할 수 있는 최소 테스트 절차를 작성해 줘.
- 수정 후 통과해야 하는 테스트도 제안해 줘.
출력 형식:
1. 심각도
2. 파일과 함수
3. 문제 설명
4. 코드 근거
5. 발생 조건과 영향
6. 재현 방법
7. 최소 수정 방향
8. 추가로 필요한 정보
먼저 문제 목록만 제시하고 코드는 수정하지 마라.
보안 검토에 사용할 수 있는 추가 문장
보안 검토에서는 AI가 일반적인 가능성만 나열하지 않도록 실제 코드와 연결된 근거를 요구해야 한다.
다음 문장을 기존 프롬프트에 추가할 수 있다.
일반적인 보안 조언을 나열하지 말고 제공된 코드에서 근거를 찾을 수 있는 문제를 우선 보고해 줘. 공격자가 조작할 수 있는 입력과 서버가 신뢰하는 값을 구분해 줘. 권한 검사가 화면이 아닌 서버 또는 데이터베이스에서도 수행되는지 확인해 줘.
기능 오류 검토에 사용할 수 있는 추가 문장
새로운 기능이 정상 상황에서만 작동하는지 확인하려면 예외 조건을 구체적으로 지정해야 한다.
정상 입력뿐만 아니라 빈 값, 중복 요청, 느린 네트워크, API 실패, 세션 만료와 새로고침 상황을 검토해 줘. 각 상황에서 화면 상태와 데이터 상태가 일치하는지 확인해 줘.
Git Diff 검토에 사용할 수 있는 추가 문장
AI가 변경된 코드만 검토하도록 하려면 다음과 같이 요청할 수 있다.
아래 Git Diff에서 추가된 줄과 삭제된 줄을 구분해 검토해 줘. 삭제된 인증, 권한, 입력값 검증과 오류 처리 코드가 있는지 우선 확인해 줘. 요청한 기능과 관계없는 파일 변경도 별도로 표시해 줘.
정확도를 떨어뜨리는 프롬프트 작성 방식
AI에게 특정한 역할을 부여하는 것만으로 코드 리뷰가 정확해지는 것은 아니다. “너는 세계 최고의 보안 전문가다”라는 문장보다 검토 목표와 근거 기준을 구체적으로 작성하는 것이 중요하다.
같은 지시를 여러 형태로 반복하는 것도 피하는 것이 좋다. 지나치게 긴 프롬프트는 핵심 조건을 찾기 어렵게 만들 수 있다. OpenAI의 최신 모델 지침도 중복된 지시를 제거하고 각 요구사항을 한 번씩 명확하게 전달하는 간결한 프롬프트를 권장한다.
코드를 검토하면서 동시에 수정하도록 요청하는 것도 주의해야 한다. AI가 문제를 설명하기 전에 코드를 변경하면 실제 오류와 수정 내용을 구분하기 어려워진다. 먼저 문제와 근거를 보고하게 한 뒤 사용자가 선택한 항목만 별도로 수정하는 방식이 안전하다.
AI 코드 리뷰 결과를 다시 검증하는 방법
좋은 프롬프트를 사용해도 AI 코드 리뷰가 항상 정확한 것은 아니다. 결과를 받은 뒤 다음 순서로 다시 확인해야 한다.
- 지적한 파일과 코드가 실제로 존재하는지 확인한다.
- 설명한 조건에서 문제가 재현되는지 테스트한다.
- 확정된 문제와 가능성만 있는 문제를 구분한다.
- 수정 범위가 기존 기능에 영향을 주는지 확인한다.
- 필요한 항목만 최소 범위로 수정한다.
- 타입 검사, 테스트와 운영 빌드를 실행한다.
- Git Diff로 최종 변경사항을 다시 검토한다.
AI가 지적한 문제를 재현할 수 없다면 무조건 수정하지 말고 추가 조건이나 누락된 맥락이 있는지 확인해야 한다.
마무리
AI 코드 리뷰의 정확도는 모델의 성능뿐만 아니라 사용자가 제공하는 검토 기준에 따라 크게 달라진다. “코드를 리뷰해 줘”라는 짧고 모호한 요청으로는 프로젝트에 중요한 문제를 빠뜨릴 수 있다.
목표, 프로젝트 맥락, 검토 범위, 위험 요소, 코드 근거, 검증 방법, 성공 기준과 출력 형식을 명확하게 작성하면 더 구체적이고 확인 가능한 결과를 받을 수 있다.
가장 중요한 원칙은 AI의 지적을 정답으로 받아들이지 않는 것이다. 모든 문제에 근거와 재현 방법을 요구하고 실제 테스트와 Git Diff를 통해 다시 확인해야 AI 코드 리뷰를 안전하게 활용할 수 있다.