디버깅 (Debugging)

개념

디버깅(debugging)은 원하는 결과를 얻기 위해 컴퓨터 프로그램, 소프트웨어 혹은 시스템에서 버그(또는 오류)를 찾고 해결하는 과정 또는 활동이다. 버그는 잘못되거나 예기치 않는 결과를 초래하는 결함 또는 문제이다.

다루는 문제

소프트웨어 개발은 복잡한 활동으로 버그 없이 코드를 작성하는 것은 거의 불가능하다. 이러한 버그는 코드가 실행되었을 때, 코드가 원하는대로 동작하지 않도록(정의되지 않은 동작을 하도록) 만들 것이다. 애플리케이션이 얼마나 중요한지에 따라, 버그는 재정적 또는 심지어 인명에 심각한 부정적인 영향을 미칠 수 있다. 일반적으로, 애플리케이션 코드는 다양한 단계나 환경에서 테스트를 거쳐야 한다. 애플리케이션이 중요할수록 더 정확한 테스트가 요구된다.

문제 해결 방식

버그가 발생할 때, 엔지니어는 프로덕션(production) 시스템에서 원하지 않는 동작을 줄이기 위해 앱을 디버그(예, 버그를 찾고 수정하는 등)해야 한다. 엔지니어가 원하지 않는 동작의 원인을 찾아내야 하므로 디버깅은 쉬운 일이 아니다. 코드 자체와 런타임에서의 실행 컨텍스트(execution context)에 대한 지식이 필요하다. 여기서 다양한 디버깅 기술과 도구가 도움이 된다. 예를 들어, 로그(logs), 추적(traces) 및 메트릭(metrics) 분석은 프로덕션에서 직접 디버깅하는 데 사용된다. 개발자는 대화형(interactive) 디버깅을 사용하여 런타임에 코드를 단계별로 실행할 수 있고, 동시에 관련 실행 컨텍스트를 분석한다. 오류의 원인을 파악하고 나면 코드를 올바로 수정하고, 이에 대한 버그 수정(fix) 또는 패치(patch)를 생성한다.