DaleSchool

AI와 함께 디버깅

입문20분

학습 목표

  • 에러 메시지를 Claude Code에게 전달하는 방법을 안다
  • Claude와 함께 단계적으로 버그를 추적할 수 있다
  • 로그를 활용한 디버깅을 요청할 수 있다

동작하는 코드

먼저 의도적으로 버그가 있는 코드를 만들어봅시다:

> bug-demo.js 파일을 만들어줘:
> const users = [{ name: "Alice", age: 30 }, { name: "Bob", age: 25 }];
> console.log(users.find(u => u.name === "Charlie").age);

이제 이 코드를 실행해보세요:

> node bug-demo.js를 실행해줘

TypeError: Cannot read properties of undefined 에러가 발생합니다. Claude는 에러를 보고 바로 원인을 분석합니다:

> 이 에러를 수정해줘

Claude가 find의 결과가 undefined일 수 있다는 점을 파악하고, 옵셔널 체이닝이나 null 체크를 적용합니다.

직접 수정하기

더 현실적인 시나리오로 해봅시다. 실제 프로젝트에서 에러가 발생했다고 가정합니다:

> npm run build를 실행해줘

빌드 에러가 나면 Claude가 에러 로그를 읽고 원인을 분석합니다. 에러가 없는 프로젝트라면 직접 에러를 만들어보세요:

> server.js에서 import 경로를 일부러 틀리게 바꿔줘. 그다음 실행해서 에러를 보자.

에러를 확인한 뒤:

> 이 에러를 수정해줘

"왜?" — Claude Code가 디버깅에 강한 이유

Claude Code는 에러 메시지만 보는 게 아닙니다. 프로젝트 전체 맥락을 알고 있기 때문에:

  1. 에러가 발생한 파일뿐만 아니라 관련 파일도 확인합니다.
  2. import 관계를 추적해서 근본 원인을 찾습니다.
  3. 설정 파일(tsconfig, package.json 등)과의 불일치도 감지합니다.

효과적인 디버깅 요청 패턴

> npm test를 실행하고 실패하는 테스트를 수정해줘
> 이 에러 로그를 분석해줘: [에러 메시지 붙여넣기]
> users API에서 500 에러가 나는데 원인을 찾아줘
> 이 함수에 console.log를 추가해서 데이터 흐름을 추적해줘

디버깅 워크플로우

에러 발생 → Claude에게 실행 요청 → 에러 자동 분석 → 수정 제안 → 승인 → 재실행으로 확인

복잡한 버그의 경우 한 번에 해결되지 않을 수 있습니다. 그때는 단계적으로 접근하세요:

> 이 에러의 원인을 분석해줘. 수정은 아직 하지 마.

원인을 이해한 뒤에:

> 알겠어, 그러면 ~방식으로 수정해줘

심화 학습

Claude가 틀린 수정을 제안하면요?

Claude도 실수합니다. 수정이 맞지 않으면:

  1. n으로 거부하세요.
  2. 왜 틀렸는지 설명해주세요: "그 수정은 다른 기능을 망가뜨려. 대신 ~방식으로 해줘"
  3. 추가 맥락을 주세요: "이 함수는 ~한 이유로 이렇게 동작해야 해"

Claude와의 대화는 반복적입니다. 한 번에 완벽한 답을 기대하기보다 함께 좁혀나가는 과정이라고 생각하세요.

  1. 프로젝트에서 의도적으로 에러를 만드세요 (import 오타, 없는 변수 참조 등).
  2. Claude에게 "이 프로젝트를 실행해줘"라고 요청하세요.
  3. 에러가 발생하면 Claude의 분석을 읽고, 수정을 승인하세요.
  4. 수정 후 다시 실행해서 문제가 해결되었는지 확인하세요.

Q1. Claude Code로 디버깅할 때 가장 효과적인 접근법은?

  • A) "에러 수정해줘"라고만 말한다
  • B) 에러 메시지를 보여주고 맥락을 함께 전달한다
  • C) 직접 코드를 수정한 다음 Claude에게 확인만 받는다
  • D) 에러가 나면 프로젝트를 새로 만든다