Home Error Handler (Middleware)
Post
X

Error Handler (Middleware)

에러 핸들러를 미들웨어로 구현해보자.

프로젝트의 전역 에러 핸들러를 미들웨어로 정의하여, 모든 라우트, 컨트롤러에서 발생하는 오류를 일괄적으로 처리해보자.


장점

  • 중복 코드 방지

    각 컨트롤러나 서비스에서 일일이 try-catch 블록을 사용하는 대신, 미들웨어에서 한 번에 처리할 수 있습니다.

  • 일관된 응답 구조

    예외가 발생했을 때 응답 형태(status, message, error 등)를 통일할 수 있습니다.

  • 로깅 및 디버깅 용이

    에러 발생 시 로깅 시스템과 연계하여 한 곳에서 오류를 기록하고 관리할 수 있습니다.

  • NestJS 전환

    NestJS에서도 ExceptionFilter를 활용하여 유사한 방식으로 에러를 핸들링하므로, 미리 구조를 잡아두면 전환이 용이합니다.


errorHandler.ts

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
import { Request, Response, NextFunction } from "express";

// 커스텀 에러 타입 정의 (옵션)
class AppError extends Error {
  statusCode: number;
  constructor(message: string, statusCode: number) {
    super(message);
    this.statusCode = statusCode;
    Error.captureStackTrace(this, this.constructor);
  }
}

// 에러 핸들링 미들웨어
const errorHandler = (
  err: any,
  req: Request,
  res: Response,
  next: NextFunction
) => {
  const statusCode = err.statusCode || 500;
  const message = err.message || "서버 오류가 발생했습니다.";

  console.error(`[ERROR] ${req.method} ${req.url} - ${message}`);

  res.status(statusCode).json({
    success: false,
    message,
    ...(process.env.NODE_ENV === "development" ? { stack: err.stack } : {}),
  });
};

export { errorHandler, AppError };
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.