노트

디버깅 포켓 가이드 (개요)

The Pocket Guide to Debugging

개발 문화#debugging#book · 연결된 개념 11개

쉽게 말하면

이 책은 버그를 서둘러 덮지 말고 탐정처럼 '무슨 일이 일어난 거지?'부터 묻자고 말하는 작은 책이에요. 막혀도 잠깐이고, 컴퓨터가 그렇게 된 이유는 항상 있다고 다독여 주죠.

비유가 깨지는 곳 탐정 소설처럼 번뜩이는 영감으로 푸는 건 아니에요. 재현해 실패하는 테스트로 고정하고, print·디버거·로그로 증거를 모으고, 잘 되던 버전과 비교하며 범위를 좁히는 구체적인 전략을 모았어요.

줄리아 에반스(Julia Evans)가 만든 짧은 책(zine)으로, 버그를 대하는 마음가짐과 바로 써먹을 수 있는 전략을 모았다. 특정 언어나 도구가 아니라 디버깅이라는 기술 자체를 다룬다.

디버깅 매니페스토(Debugging Manifesto)

  • 덮지 말고 조사한다: "일단 고쳐야 해" 대신 "무슨 일이 일어난 거지?"를 먼저 묻는다
  • 막힌 건 잠깐이다: 영영 못 풀 것 같아도 20분 뒤 안 해 본 방법이 떠오른다
  • 아무것도 믿지 않는다: "이 라이브러리에 버그가 있을 리 없어"도 가정일 뿐이다
  • 아마 내 코드 문제다: 그래도 확률로는 내 코드일 때가 많다
  • 혼자 하지 않는다: 같이 보면 새 질문과 도구가 생긴다
  • 이유는 항상 있다: 그렇게 느껴지지 않아도 컴퓨터는 논리적이다
  • 도구 상자를 만든다: 좋은 도구 하나가 디버깅을 바꾼다
  • 모험이 될 수 있다: 이상한 버그는 이야깃거리다

주요 전략

  • 재현하고 정리하기: 현장(로그, 입력, 스크린샷)을 보존하고, 에러 메시지를 처음부터 두 번 읽는다. 버그를 재현해 실패하는 테스트로 고정하고, 의심 가는 원인을 거르지 말고 모두 적은 뒤 하나씩 지운다 → 디버깅 문제 정의 5단계
  • 증거 모으기: print, 디버거(Debugger), REPL(Read-Eval-Print Loop), 어서션, 로그 분석으로 실제 동작을 본다. 공식 문서와 라이브러리 소스(특히 테스트 코드), 이슈와 릴리스 노트도 본다. 버그의 '종류'를 알면 검색어가 생긴다(간헐적이면 경쟁 상태(Race Condition)를 의심하는 식)
  • 범위 좁히기: 잘 되던 버전과 비교하고(git bisect로 원인 커밋 찾기), 작은 프로그램으로 줄이고, 한 번에 하나만 바꾸고, 무작위성을 없앤다 → 최소 재현
  • 막혔을 때: 쉬기, 같이 보기, 조사 마감 정하기, 말로 설명하기, 내 코드가 정말 실행되는지 확인하기 → 러버덕 디버깅
  • 다음을 위해: 피드백 루프(Feedback Loop)를 짧게 만들고 출력과 로그를 읽기 좋게 다듬는다 → 크롬 개발자 도구 팁. 고친 뒤에는 배운 것을 나누고, 비슷한 버그를 함께 찾고, 커밋 메시지로 맥락을 남긴다 → 커밋 메시지와 원자적 커밋

조용히 삼켜진 예외가 디버깅을 어렵게 만드는 경우가 많다 → 예외 삼키기

출처: The Pocket Guide to Debugging Julia Evans · A debugging manifesto Julia Evans

연결된 개념

이 노트를 가리키는 문서

뜻이 가까운 노트

  • 알고리즘 문제 풀이 접근법

    낯선 문제를 만났을 때 바로 코드를 쓰기보다 따르는 다섯 단계. 수학자 폴리아(George Pólya)의 『어떻게 문제를 풀 것인가』(*How to Solve It*)에서 이어지는 흐름이다.

  • 자가 테스트 코드

    결과까지 스스로 판정하는 자동화된 테스트를 갖춘 코드. 사람이 출력을 눈으로 확인할 필요 없이 명령 하나로 "모두 통과"를 알 수 있어야 한다. 리팩터링의 전제 조건이다.

  • 섣부른 최적화

    "섣부른 최적화는 모든 악의 근원이다." 도널드 크누스(Donald Knuth)가 1974년 글 「Structured Programming with go to Statements」에서 쓴 말이다. 원문의 맥락은 작은 효율은 대부분(약 97%)의 경우 잊으라는 것이고, 정말 중요한 3%는 놓치지 말라는 말이 이어진다.

  • 행동 설명 질문

    "보통 어떻게 하세요?" 대신 "최근에 실제로 어떻게 했나요?"를 묻는 질문. 일반론이 아니라 직접 겪은 최근 경험을 끌어내 더 진실하고 밀도 높은 답을 얻는다.

  • 기술 부채

    지금 지름길을 택한 대가로 나중에 갚아야 할 비용을 빚에 빗댄 말. 워드 커닝햄(Ward Cunningham)이 1992년에 처음 썼다. 원금은 언젠가 제대로 고치는 비용이고, 이자는 지저분한 코드 때문에 매번 더 드는 개발 시간이다.

보기 옵션