
Express는 Node.js를 위한 가장 인기 있는 웹 프레임워크 중 하나로, 웹 애플리케이션의 라우팅, 요청 처리, 에러 핸들링 등을 단순화한다.
에러 핸들링은 소프트웨어 개발의 필수적인 부분이며, 프로그램이 예기치 못한 상황에 대처하는 방법을 정의한다. 이는 프로그램의 안정성과 신뢰성을 향상시키는 데 중요하다. 에러 핸들링을 통해 개발자는 다음과 같은 목표를 달성할 수 있다.
Express에서 에러 핸들링은 미들웨어를 통해 수행된다. 미들웨어는 요청-응답 주기의 중간에서 특정 작업을 수행하는 함수이다. Express는 기본적으로 다음과 같은 에러 핸들링 메커니즘을 제공한다:
Express에서 사용자 정의 에러 핸들링 미들웨어를 구현하는 것은 간단하다. 기본적으로 이러한 미들웨어는 네 개의 인자를 받는다: err, req, res, next. 여기서 err는 발생한 에러 객체, req는 HTTP 요청 객체, res는 HTTP 응답 객체, next는 미들웨어 체인에서 다음 미들웨어 함수를 호출하는 함수이다.
에러 핸들링 미들웨어 예시:
app.use((err, req, res, next) => {
console.error(err.stack); // 에러 로깅
res.status(500).send('Something broke!'); // 사용자에게 에러 메시지 전송
});
일반적으로 웹사이트에서 오류 발생 시 특정한 HTML 페이지를 띄우는 것은 좋은 관행이다. 이는 사용자에게 더 친숙하고 이해하기 쉬운 인터페이스를 제공한다. 이를 위해 에러 핸들링 미들웨어에서 HTML 파일을 응답으로 보낼 수 있다. ( 실제 프로젝트에서 구현하였더니 매우 좋았었다)
app.use((err, req, res, next) => {
console.error(err.stack); // 에러 로깅
res.status(500).sendFile('/path/to/error.html'); // 특정 에러 페이지 전송
});
이렇게 하면, 서버 측에서 발생하는 모든 에러에 대해 사용자에게 특정 HTML 페이지를 보여줄 수 있다.
실제 서비스에서는 일반적으로 사용자 경험을 최대한 존중하면서도, 시스템의 안정성과 보안을 유지하기 위해 복잡한 에러 핸들링 시스템을 구축한다. 이러한 회사들은 사용자에게 친숙하고 안내가 잘되어 있는 에러 페이지를 제공하는 동시에, 백엔드에서 에러 로깅, 모니터링, 알림 시스템을 통해 신속하게 문제를 감지하고 대응한다.
실제 프로젝트에서 에러 핸들링을 구현할 때는 다음과 같은 사항을 고려해야 한다: