nodejs

Error.captureStackTrace로 디버깅 하기

Node.js에서 디버깅을 하다 보면 종종 스택 트레이스가 너무 복잡하거나 불필요한 정보까지 포함되어 있어 실제 문제를 빠르게 찾기 어려운 경우가 있습니다. 이런 상황에서 Node.js(V8 엔진 기반)가 제공하는 Error.captureStackTrace 메서드를 사용하면 디버깅 효율성을 크게 높일 수 있습니다. 이 글에서는 Error.captureStackTrace가 무엇인지, 어떻게 활용할 수 있는지를 실제 코드와 함께 알아보도록 합시다.


Error.captureStackTrace는 Node.js(V8 엔진 기반)에서 제공하는 메서드로, 커스텀 에러 클래스에서 불필요한 스택 정보를 제외하고 명확한 오류 발생 지점만 남겨 디버깅을 간편하게 만들어줍니다.


우리가 자주 사용하는 Error 객체의 스택 트레이스는 불필요한 정보를 포함할 수 있지만, 이 메서드를 사용하면 명확하고 간결한 스택을 유지할 수 있습니다. 또한, 스택 트레이스에서 에러 클래스를 제외하고 실제 오류가 발생한 위치만 추적이 가능합니다.


Node.js에서 Error.captureStackTrace 활용 예시

커스텀 에러 클래스 정의하기

아래는 커스텀 에러 클래스인 ServerError를 만들고, Error.captureStackTrace를 활용하여 스택 트레이스를 정리하는 예시입니다.

captureStackTrace
class ServerError extends Error {
  constructor(message: string) {
    super(message);
 
    if (Error.captureStackTrace) {
      Error.captureStackTrace(this, ServerError);
    }
  }
}
 
function throwError() {
  throw new ServerError("Something went wrong!");
}
 
try {
  throwError();
} catch (err) {
  console.error(err.stack);
}

사용 전 vs 사용 후 비교

사용 전 (불필요한 정보 포함)

captureStackTrace
ServerError: Something went wrong!
    at new ServerError (/path/to/code.js:5:5) (불필요한 정보)
    at throwError (/path/to/code.js:12:9)
    at Object.<anonymous> (/path/to/code.js:16:3)

사용 후 (필요한 정보만 출력)

captureStackTrace
ServerError: Something went wrong!
    at throwError (/path/to/code.js:12:9) (실제 오류 발생 지점)
    at Object.<anonymous> (/path/to/code.js:16:3)

이렇게 불필요한 클래스 호출 정보가 사라져 가독성과 디버깅 효율이 높아집니다. 이 메서드는 Node.js(V8 엔진 환경)에서만 지원됩니다. 브라우저 환경에서는 사용 불가할 수 있습니다. 모든 Error 클래스에 반드시 적용할 필요는 없으며, 명확한 디버깅이 필요한 상황에 선택적으로 활용하면 됩니다.


마무리

Error.captureStackTrace는 Node.js 환경에서 디버깅 효율성을 높이는 유용한 도구입니다. 특히 커스텀 에러 클래스와 함께 사용하면 불필요한 정보를 제거하고 문제의 핵심을 빠르게 파악할 수 있습니다.


참고 문서