콘텐츠로 이동

02. 디버깅 (문제 해결의 기술)

"모든 코드는 버그가 있습니다. 개발자는 코드를 짜는 시간보다 고치는 시간을 더 많이 씁니다. 에러 메시지는 컴퓨터가 어디가 아픈지 말해주는 러브레터입니다."

1. 에러 해부학 (Traceback 읽는 법)

빨간 글씨가 화면을 덮어도 당황하지 마세요. Traceback(에러 추적) 메시지에는 규칙이 있습니다. 시선을 아래로 향하세요.

graph TD
    Step1["🚨 에러 발생!"] --> Step2["맨 마지막 줄 읽기<br>NameError: name 'a' is not defined"]
    Step2 --> Step3["맨 윗줄 파일명 확인<br>File 'main.py'"]
    Step3 --> Step4["몇 번째 줄인지 확인<br>line 10"]
    Step4 --> Step5["🔍 해당 줄로 이동해서 수정"]

    style Step2 fill:#ffebee,stroke:#c62828,stroke-width:2px
    style Step5 fill:#e8f5e9,stroke:#2e7d32

자주 보는 에러 3대장

에러 이름 의미 힌트
NameError "그런 이름표 없는데요?" 오타 확인, 변수 선언했는지 확인
TypeError "타입이 안 맞아요" 숫자 + 문자 더하기 했나?
IndentationError "줄 맞춤이 엉망이에요" 들여쓰기(Tab/Space) 확인
SyntaxError "문법이 틀렸어요" 콜론(:)이나 괄호() 빠뜨렸나?

2. 디버깅 3원칙 (탐정 놀이)

1) 프린트 찍어보기 (print debugging)

의심스러운 곳 앞뒤에 CCTV를 설치하듯 print를 심어둡니다.

💡 꿀팁: f-string 디버깅 (=) 변수 이름과 값을 동시에 보고 싶다면 =을 붙이세요. (파이썬 3.8+)

score = 90
print(f"{score=}") 
# 출력 결과: score=90  (그냥 90만 나오는 것보다 훨씬 보기 편함!)

2) 작게 쪼개기 (Divide and Conquer)

100줄을 한 번에 실행하고 "안 돼요"라고 하면 신도 모릅니다. 10줄씩 잘라서 실행해보며 "여기까진 잘 되네?"를 확인하며 범위를 좁히세요.

3) AI에게 물어보기 (닥터 왓슨)

에러 메시지를 통째로 복사해서 AI에게 주면, 99.9% 확률로 해결책을 줍니다.

"이거 왜 안돼요?"라고 묻기 전에, "에러 메시지가 뭐라고 하니?"라고 스스로에게 물어보는 습관을 들이세요.

3. 구글링(Googling) vs AI 질문법

과거에는 에러 메시지를 구글에 쳐서 Stack Overflow를 뒤져야 했습니다. 지금은 AI가 더 친절하게 알려줍니다.

AI에게 디버깅 맡기는 프롬프트

그냥 "고쳐줘"라고 하면 정답 코드만 띡 던져줍니다. 그러면 실력이 안 늘어납니다. 이렇게 물어보세요.

> **"이 에러가 발생한 '원인'이 무엇이고, 앞으로 어떻게 '예방'할 수 있는지 설명해주고 코드를 수정해줘."**

AI가 개인 과외 선생님처럼 원리를 설명해 줄 것입니다.