문제를 정확히 이해하는 것이 가장 중요
가정 먼저 오류 메세지를 꼼꼼하게 읽어 어떤 원인에 의해 문제가 발생한 것인지 구체적이고 명확하게 파악하려 노력
문제를 격리하는 과정이 필요
코드 베이스가 클수록, 문제가 특정 위치에 국한되지 않고 여러 요소가 얽혀 있을 가능성이 높음
이럴 땐 문제를 작게 분리해 재현 가능한 환경을 구성하는 것이 중요
ex - 복잡한 컴포넌트에서 문제가 발생하면 해당 컴포넌트만 따로 실행해보거나, 간단한 테스트 데이터를 사용해 문제가 있는 부분만 집중적으로 테스트하는 방식으로 문제를 좁혀갈 수 있음 이러한 과정을 거쳐 크고 복잡한 문제를 작고 단순한 문제로 최대한 깎아냄
문제를 좁히는 과정에서, 정상 케이스의 동작 흐름과 문제 상황의 동작 흐름을 비교하는 일도 문제를 좁히는 데 큰 도움이 됨
정상적으로 동작한다면 애플리케이션이 어떤 절차로 동작해야 하는지 먼저 스케치 해본 후, 문제 상황 당시의 동작 흐름을 스케치하여 비교
그 후, 두 동작 흐름 간의 차이를 바탕으로 문제 지점을 도출
마지막으로, 파악한 문제를 해결할 수 있는 방법을 모색
우선적으로 공식 문서와 공신력 있는 출처의 글들을 참고하여 문제 해결 방법을 찾음
혹은 관련 Github 레포지토리를 찾아가 Issue 게시판을 탐색하기도 함
그럼에도 해결법을 찾지 못하면 구글링 및 생성형 AI를 활용하여 검색
이외에 브라우저 개발자 도구 및 IDE에서 제공하는 디버깅 도구들을 적극적으로 활용하거나, 문제 해결 후 그 과정을 기록하는 습관을 들이는 등이 필요