[javascript] 에러 추적을 위한 스택 트레이스 활용

자바스크립트에서 오류가 발생했을 때, 오류가 발생한 위치와 그 이전의 호출 스택 정보를 추적할 수 있는 스택 트레이스(trace)는 디버깅에 매우 유용한 도구입니다. 이번 블로그 포스트에서는 자바스크립트에서 스택 트레이스를 활용하는 방법을 알아보겠습니다.

에러 객체의 스택 트레이스 정보

자바스크립트에서 발생하는 에러 객체(Error object)는 ‘stack’ 속성을 통해 스택 트레이스 정보를 제공합니다. 스택 트레이스는 현재 함수의 호출 스택 정보를 담고 있으며, 이를 출력하면 오류가 발생한 위치와 그 이전의 함수 호출 순서를 알 수 있습니다.

아래는 간단한 예제입니다.

function firstFunction() {
    secondFunction();
}

function secondFunction() {
    thirdFunction();
}

function thirdFunction() {
    throw new Error('에러 발생');
}

try {
    firstFunction();
} catch (error) {
    console.error(error.stack);
}

위 예제에서 thirdFunction에서 throw new Error() 문을 사용하여 에러를 발생시킵니다. 그리고 try-catch문을 통해 에러를 잡고, console.error(error.stack)으로 스택 트레이스를 출력합니다.

실행 결과는 다음과 같습니다.

Error: 에러 발생
    at thirdFunction (example.js:11:11)
    at secondFunction (example.js:7:5)
    at firstFunction (example.js:3:5)
    at Object.<anonymous> (example.js:15:5)
    at Module._compile (internal/modules/cjs/loader.js:701:30)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:712:10)
    at Module.load (internal/modules/cjs/loader.js:600:32)
    at tryModuleLoad (internal/modules/cjs/loader.js:539:12)
    at Function.Module._load (internal/modules/cjs/loader.js:531:3)
    at Function.Module.runMain (internal/modules/cjs/loader.js:754:12)

위 결과에서 스택 트레이스 정보는 at 키워드를 통해 호출 순서와 위치를 나타내고 있습니다. 에러가 발생한 위치인 thirdFunction부터 시작하여 secondFunction, firstFunction, 그리고 더 이상의 호출 스택이 없는 Object.<anonymous>까지 순서대로 나열됩니다.

이러한 스택 트레이스 정보를 통해 어떤 함수에서 에러가 발생했는지, 그리고 어떤 경로를 통해 에러에 도달했는지를 확인할 수 있습니다.

스택 트레이스 정보를 활용한 디버깅

스택 트레이스 정보는 디버깅 과정에서 매우 유용합니다. 오류가 발생한 위치를 더 빠르게 파악할 수 있을 뿐만 아니라, 어떤 함수나 호출 스택에서 문제가 발생했는지를 분석할 수 있습니다.

예를 들어, 위 예제에서 firstFunction에서 에러가 발생했다면, 스택 트레이스 정보를 통해 firstFunction을 호출한 부분에서 에러 원인을 찾을 수 있습니다.

더 나아가, 스택 트레이스 정보를 파일과 라인별로 매핑하여 실제로 어떤 코드에서 오류가 발생했는지를 확인할 수도 있습니다. 스택 트레이스에서 파일 경로와 라인 번호를 추출하여 디버깅 도구나 로깅 시스템에 활용하면, 개발자들은 더 쉽고 효율적으로 오류를 파악할 수 있습니다.

결론

자바스크립트에서 스택 트레이스를 활용하면 오류 추적과 디버깅을 보다 효율적으로 수행할 수 있습니다. 에러 객체의 stack 속성을 통해 스택 트레이스 정보를 얻어와 원인을 분석하고 해결하는 과정에서 많은 도움을 받을 수 있습니다. 따라서 자바스크립트 개발 시, 에러 처리 및 디버깅에 스택 트레이스를 적극적으로 활용하는 것을 권장합니다.

참고 자료: