서버 로깅 및 모니터링 (Winston, Morgan)
실제 서비스(운영 서버)에서는 `console.log()`를 쓰지 않습니다! 터미널 창을 닫으면 기록이 다 날아가기 때문입니다. 언제 어떤 에러가 났는지, 해커가 어떤 주소로 공격을 시도했는지 증거를 남기기 위해 파일 형태로 꼼꼼하게 일기(Log)를 쓰는 기술입니다.
const morgan = require("morgan");
const winston = require("winston");
// 1. Morgan: 모든 HTTP 요청을 보기 좋게 터미널에 찍어주는 미들웨어
app.use(morgan("dev"));
// 출력 예: GET /users 200 15.342 ms - 54
// 2. Winston: 에러를 터미널뿐만 아니라 "error.log" 파일로 저장하는 전문 로거
const logger = winston.createLogger({
level: "error",
transports: [
new winston.transports.File({ filename: "error.log" })
]
});
app.get("/broken", (req, res) => {
logger.error("DB 접속 실패 크리티컬 에러 발생!");
res.status(500).send("에러");
});