Computer >> 컴퓨터 >  >> 프로그래밍 >> JavaScript

자바스크립트 Error 객체의 .stack 속성 완벽 이해하기

JavaScript의 .stack 속성이란?

JavaScript에서 Error 객체가 가진 stack 속성은 오류가 발생한 시점까지의 함수 호출 경로(스택 트레이스)를 문자열로 담고 있습니다. 이 문자열에는 어떤 함수들이 어떤 순서로 호출되었는지, 각 호출이 어느 파일의 몇 번째 줄과 열에서 일어났는지 등의 정보가 포함됩니다.

스택 문자열은 가장 최근에 호출된 함수부터 시작하여 거꾸로 거슬러 올라가, 최초의 전역 범위(global scope) 호출 지점까지 이어집니다. 동작 방식은 Java의 스택 트레이스(stack trace)와 매우 유사하며, 디버깅 시 오류의 발생 원인과 호출 흐름을 파악하는 데 필수적인 도구입니다.

사용 예제

아래 코드는 함수 내부에서 의도적으로 오류를 발생시키고, catch 블록에서 stack 속성을 출력하는 기본적인 예제입니다.

function a() {
    throw new Error("error");
}
try {
    a();
} catch(e) {
    console.log(e.stack);
}

실행 결과

위 코드를 실행하면 다음과 같은 출력 결과를 얻을 수 있습니다.

Error: error
    at a (<anonymous>:2:11)
    at <anonymous>:6:5

출력 결과를 해석해 보면, 첫 줄은 오류 메시지이며 그 아래 줄들은 호출 스택을 나타냅니다. 즉, a() 함수의 2번째 줄 11번째 열에서 오류가 발생했고, 해당 함수는 6번째 줄에서 호출되었다는 것을 알 수 있습니다.

주의 사항

참고: stack 속성은 ECMAScript 표준에 포함되지 않은 비표준(non-standard) 속성입니다. 대부분의 주요 브라우저와 Node.js 환경에서 지원되지만, 모든 실행 환경에서 반드시 사용할 수 있는 것은 아니므로 주의가 필요합니다.

또한 스택 트레이스의 정확한 형식은 브라우저나 자바스크립트 엔진(V8, SpiderMonkey 등)에 따라 조금씩 다를 수 있습니다. 참고로 V8 엔진(Chrome, Node.js)에서는 Error.captureStackTrace() 메서드를 사용해 스택 트레이스 생성 방식을 세밀하게 제어할 수도 있습니다.