express 5 버전부터 기본적으로 async/await 제공
2026. 01. 26.
무엇이 문제였나?
express는 10년 동안 4 버전을 제공하다가 최근에야 5 버전으로 업그레이드 되었다. 4 버전에서는 async/await에 대한 지원이 완벽하지 않았기 때문에 비동기 함수 처리를 도와주는 헬퍼 함수를 사용하곤 했었다.
const asyncHandler = fn => (req, res, next) => {
Promise.resolve(fn(req, res, next)).catch(next);
};
위와 같이 asyncHandler라는 헬퍼 함수가 있으면 아래처럼 사용하곤 했다.
router.get(
"/test",
asyncHandler(async (req, res) => {
const data = await someAsyncOperation();
res.json(data);
}),
);
이제 express 5 부터는 router 및 미들웨어에서 기본적으로 async/await를 사용할 수 있기 때문에 asyncHandler와 같은 헬퍼 함수를 사용할 필요가 없다.
실제 예시
위와 같은 상황에서는 이제 헬퍼함수를 제거하고 async 함수만 사용하면 된다.
router.get("/test", async (req, res) => {
const data = await someAsyncOperation();
if (!data) throw new Error("Data not found");
res.json(data);
});
그리고 에러를 던진다면 express 5가 자동으로 에러 미들웨어로 보내게 된다.
app.use((err, req, res, next) => {
// 적절한 에러 처리
});
받은 에러는 미들웨어에서 적절하게 처리해주면 된다. 미들웨어에서도 지원되기 때문에 express 4를 사용할 때보다 훨씬 더 코드가 간결해지고 간편해지는 것 같다.