← ClaudeAtlas

systematic-debugginglisted

수정을 제안하기 전에 근본 원인을 찾게 강제한다. Use when 버그·테스트 실패·예상 밖 동작·빌드 실패·성능 문제를 만났을 때. 증상만 덮는 수정을 막는다.
HarryJhin/groundwork · ★ 0 · Code & Development · score 70
Install: claude install-skill HarryJhin/groundwork
# systematic-debugging **핵심 원칙**: 수정을 시도하기 전에 항상 근본 원인을 찾는다. 증상 수정은 실패다. **이 절차를 글자 그대로 지키지 않는 것은 디버깅의 취지를 저버리는 것이다.** ## 철칙 ``` 근본 원인 조사 없이 수정하지 않는다 ``` 근본 원인 조사(아래 「절차」의 1단계)를 마치지 않았다면 수정을 제안할 수 없다. ## 적용 대상 모든 기술적 문제에 쓴다. 테스트 실패, 프로덕션 버그, 예상 밖 동작, 성능 문제, 빌드 실패, 통합 문제. **특히 다음 상황에서 쓴다**: - 시간 압박을 받을 때(급하면 추측이 달콤해진다) - "빠른 수정 하나면 될 것" 같을 때 - 이미 여러 수정을 시도했을 때 - 앞선 수정이 듣지 않았을 때 - 문제를 온전히 이해하지 못했을 때 **다음 이유로 건너뛰지 않는다**: - 문제가 단순해 보인다(단순한 버그에도 근본 원인이 있다) - 급하다(서두르면 재작업이 확정된다) - 지금 당장 고쳐야 한다(체계적인 쪽이 헤매는 것보다 빠르다) ## 절차 각 단계를 마쳐야 다음으로 간다. ### 1단계. 근본 원인 조사 **어떤 수정이든 시도하기 전에** 한다. 1. **에러 메시지를 정독한다** - 에러·경고를 건너뛰지 않는다 - 거기에 정확한 해법이 들어 있는 경우가 많다 - 스택 트레이스를 끝까지 읽는다 - 라인 번호·파일 경로·에러 코드를 기록한다 2. **일관되게 재현한다** - 신뢰성 있게 유발할 수 있는가 - 정확한 절차가 무엇인가 - 매번 일어나는가 - 재현되지 않으면 데이터를 더 모은다. 추측하지 않는다 3. **최근 변경을 확인한다** - 무엇이 바뀌어 이것을 일으켰나 - git diff, 최근 커밋 - 새 의존성, 설정 변경 - 환경 차이 4. **다중 컴포넌트 시스템에서 증거를 모은다** 시스템에 컴포넌트가 여럿이면(CI → 빌드 → 서명, API → 서비스 → DB) 수정을 제안하기 전에 진단 계측을 넣는다. ``` 각 컴포넌트 경계마다: - 컴포넌트에 들어가는 데이터를 로깅 - 컴포넌트에서 나오는 데이터를 로깅 - 환경·설정 전파를 확인 - 각 층의 상태를 확인 한 번 돌려 어디서 깨지는지 보여주는 증거를 모은다 그 증거로 실패 컴포넌트를 특정한다 그 컴포넌트만 파고든다 ``` 이렇게 하면 어느 층이 실패하는지 드러난다. 예를 들어 비밀값은 워크플로까지 정상 전달됐고, 워크플로에서 빌드로 넘어가는 경계에서 깨졌다. 5. **데이터 흐름을 추적한다** 에러가 콜스택 깊은 곳에 있으면 역방향으로 추적한다. 상세 기법은 [root-cause-tracing.md](root-cause-tracing.md)에 있다. 요약하면 이렇다. 나쁜 값이 어디서 비롯됐는가. 무엇이 나쁜 값으로 이것을 호출했는가. 출처를 찾을 때까지 위로 올라간다. 증상이 아니라 출처를 고친다.