비동기 에러 핸들링 (전역 에러 미들웨어)
비동기 함수 안에서 에러가 발생했는데 try-catch로 잡아주지 않으면 Node.js 서버 프로세스가 통째로 죽어버리는(Crash) 대형 사고가 발생합니다. 이를 방지하기 위한 최후의 보루가 바로 전역 에러 미들웨어입니다.
// 1. 에러가 날 수 있는 비동기 로직
app.get("/danger", async (req, res, next) => {
try {
const data = await fetchSomething(); // 에러 발생!
res.json(data);
} catch (err) {
// 에러를 캐치하면 next(err)를 호출해 전역 에러 처리기로 던짐!
next(err);
}
});
// 2. 🚨 서버 맨 밑바닥에 설치하는 전역 에러 처리 미들웨어 (인자가 4개임)
app.use((err, req, res, next) => {
console.error("에러 감지됨:", err.message);
// 유저에게는 친절한 메시지만 보여주고 내부 에러는 숨김
res.status(500).json({ error: "서버가 아파요. 잠시 후 다시 시도해주세요." });
});