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