// src/middleware/error.middleware.js const { logger, auditLogger } = require("../config/logger"); const errorHandler = (err, req, res) => { err.statusCode = err.statusCode || 500; err.status = err.status || "error"; // 운영 환경과 개발 환경의 에러 응답 구분 if (process.env.NODE_ENV === "development") { logger.error(err.stack); res.status(err.statusCode).json({ status: err.status, message: err.message, errors: err.errors, stack: err.stack, }); } else { // 운영 환경에서는 스택 트레이스 제외 logger.error(err.message, { status: err.status, statusCode: err.statusCode, errors: err.errors, }); // 운영 환경에서는 일반적인 에러 메시지만 전송 if (err.isOperational) { res.status(err.statusCode).json({ status: err.status, message: err.message, errors: err.errors, }); } else { // 프로그래밍 에러의 경우 일반적인 에러 메시지 전송 res.status(500).json({ status: "error", message: "Something went wrong!", }); } } }; // 감사 로그 미들웨어 const auditMiddleware = (req, res, next) => { const startTime = Date.now(); // 응답이 완료된 후 로깅 res.on("finish", () => { const duration = Date.now() - startTime; auditLogger.info({ type: "API_ACCESS", method: req.method, path: req.path, statusCode: res.statusCode, duration, userId: req.user?.id, ip: req.ip, userAgent: req.headers["user-agent"], }); }); next(); }; module.exports = { errorHandler, auditMiddleware, };