콘텐츠로 이동

AI로 디버깅하기 — Claude는 버그를 얼마나 잘 잡을까?

AI가 코드를 작성하는 시대가 왔지만, 디버깅은 어떨까? Nadia Makarevich가 실제 프로덕션 버그 3가지를 AI에게 던져본 실험 결과를 정리했다. 각 버그마다 3번의 시도를 진행해 일관성도 함께 확인했다.

버그 1: Zod 검증이 통과하는데 타입이 안 맞는다

섹션 제목: “버그 1: Zod 검증이 통과하는데 타입이 안 맞는다”

API 응답을 Zod로 검증하는 코드에서, 검증은 성공하는데 TypeScript 타입과 실제 데이터 구조가 달랐다.

const UserSchema = z.object({
id: z.string(),
name: z.string(),
settings: z.object({
theme: z.enum(['light', 'dark']),
notifications: z.boolean(),
}),
});
// 검증은 통과하지만...
const result = UserSchema.safeParse(apiResponse);
if (result.success) {
// result.data.settings가 undefined일 수 있음
console.log(result.data.settings.theme); // 💥 런타임 에러
}

3번 중 2번은 정확히 문제를 짚어냈다. 스키마 정의와 실제 API 응답 구조의 불일치, .optional() 누락 등을 정확하게 식별했다. 세 번째 시도에서는 근본 원인은 맞췄지만 해결책이 다소 과했다.

AI가 잘하는 영역: 타입 시스템과 검증 로직의 불일치처럼 패턴이 명확한 버그는 AI가 강하다.

버그 2: 로딩 스켈레톤이 두 번 나타난다

섹션 제목: “버그 2: 로딩 스켈레톤이 두 번 나타난다”

데이터를 페칭할 때 로딩 스켈레톤이 한 번 보여야 하는데, 잠깐 사라졌다가 다시 나타나는 현상이 발생했다.

function UserProfile({ userId }: { userId: string }) {
const { data, isLoading } = useQuery({
queryKey: ['user', userId],
queryFn: () => fetchUser(userId),
});
if (isLoading) return <Skeleton />;
if (!data) return null;
return <Profile data={data} />;
}

첫 번째 시도에서만 React의 Strict Mode에서 Effect가 두 번 실행되는 것과 연관된 원인을 정확히 짚었다. 나머지 두 번은 엉뚱한 방향으로 갔다 — 하나는 CSS 애니메이션 문제로 진단했고, 다른 하나는 불필요한 상태 관리 리팩토링을 제안했다.

AI의 약점: 타이밍과 라이프사이클이 얽힌 버그는 일관성이 떨어진다. 같은 버그를 3번 물어보면 3개의 다른 답이 나올 수 있다.

로그인 후 원래 페이지로 리다이렉트해야 하는데, 간헐적으로 엉뚱한 페이지로 이동하는 버그.

function useAuthRedirect() {
const router = useRouter();
const { isAuthenticated } = useAuth();
const returnUrl = useSearchParams().get('returnUrl');
useEffect(() => {
if (isAuthenticated && returnUrl) {
router.push(returnUrl);
}
}, [isAuthenticated, returnUrl, router]);
}

3번 모두 실패했다. 각 시도마다 다른 원인을 제시했지만, 어느 것도 실제 버그의 근본 원인에 도달하지 못했다.

실제 원인은 returnUrl이 인코딩/디코딩 과정에서 변형되는 edge case였다. 여러 미들웨어를 거치면서 URL이 이중 인코딩되는 문제로, 코드만 봐서는 발견하기 어렵고 실행 컨텍스트를 이해해야 하는 버그였다.

AI의 한계: 시스템 전체의 실행 흐름을 추적해야 하는 버그는 현재 AI가 가장 힘들어하는 영역이다. AI는 코드를 보지만, 코드가 실행되는 환경은 보지 못한다.

버그 유형시도 1시도 2시도 3AI 강점
타입/스키마 불일치🥑패턴 매칭에 강함
라이프사이클 타이밍일관성 부족
시스템 흐름 추적실행 컨텍스트 부재
❌ "이 코드에서 버그를 찾아줘"
✅ "로그인 후 returnUrl로 리다이렉트하는 코드인데,
간헐적으로 엉뚱한 페이지로 이동합니다.
Next.js 미들웨어에서 인증 체크 후 리다이렉트하고,
Nginx 프록시 뒤에 있습니다.
재현 조건: returnUrl에 쿼리 파라미터가 2개 이상일 때"

한 번의 답변을 그대로 믿지 말고, 같은 질문을 2-3번 반복해서 일관된 답변이 나오는지 확인한다. 매번 다른 답이 나온다면, AI도 확신이 없는 것이다.

AI가 잘하는 디버깅:

  • 타입 에러, 스키마 불일치
  • 잘 알려진 라이브러리의 일반적인 실수
  • 코드에서 바로 보이는 논리 오류

AI가 못하는 디버깅:

  • 타이밍 관련 간헐적 버그
  • 여러 시스템이 상호작용하는 버그
  • 특정 환경에서만 재현되는 버그
  • AI는 패턴이 명확한 버그(타입 에러, 스키마 불일치)에 강하다
  • 타이밍, 라이프사이클 관련 버그는 일관성이 떨어진다
  • 시스템 전체 흐름 추적이 필요한 버그는 아직 AI의 한계다
  • AI 디버깅의 핵심은 컨텍스트 제공반복 검증이다
  • AI를 “답을 주는 도구”가 아닌 “같이 생각하는 동료”로 활용하면 가장 효과적이다

출처: Nadia Makarevich — “Debugging with AI”