Express 5.x가 2024년 10월 정식 출시된 이후 5.2 라인이 안정화되었고, Node.js 24가 2025년 5월부터 Active LTS로 운영 중이다. 이 글은 Express 5 기준 비동기 에러 처리, Node 24 LTS, 그리고 Fastify·Hono 같은 2026년 대안 프레임워크 흐름을 반영해 갱신했다.
개요 및 중요성
Express는 10년 넘게 Node.js 백엔드의 사실상 표준이었다. 주간 다운로드 약 3,500만 회로 여전히 가장 많이 쓰이는 웹 프레임워크이지만, 2026년의 의미는 조금 달라졌다. Express 5.x가 정식(stable) 라인으로 자리잡으면서, 오랫동안 골칫거리였던 비동기 에러 처리가 프레임워크 차원에서 해결됐기 때문이다.
핵심은 두 가지다. 첫째, Express 5에서는 async 핸들러가 던지거나 reject한 에러를 라우터가 자동으로 next(err)로 넘긴다. 더 이상 모든 라우트를 try/catch로 감싸거나 asyncHandler() 래퍼를 씌울 필요가 없다. 둘째, 실행 기반인 Node.js도 24 LTS로 올라오면서 npm 11, 최신 V8 엔진, 안정화된 내장 TypeScript 타입 스트리핑을 함께 쓸 수 있게 됐다.
이 글은 그 변화를 중심으로, 기본 서버 구성부터 미들웨어 설계, 에러 처리, 그리고 2026년에 Express를 계속 쓸지 Fastify·Hono로 갈아탈지 판단하는 기준까지 정리한다.
새 프로젝트라면 Node.js 24 LTS(2028-04까지 지원)를 기준으로 잡는다. Express 5는 Node 18 이상을 요구하므로 24와 완전히 호환된다. ESM(import) 사용 시 package.json에 "type": "module"을 명시한다.
핵심 개념과 기본 원리
Express의 본질은 단순하다. 요청(request)이 들어오면 미들웨어(middleware) 함수들을 순서대로 통과시키는 파이프라인이다. 각 미들웨어는 (req, res, next)를 받아서 작업을 하고, next()를 호출해 다음 단계로 넘기거나 직접 응답을 끝낸다. 라우트 핸들러도 결국 마지막 미들웨어일 뿐이다.
이 구조를 이해하면 인증, 로깅, 바디 파싱, 에러 처리가 모두 같은 패턴으로 정리된다. 순서가 곧 동작이므로 미들웨어 등록 순서가 매우 중요하다. 예를 들어 express.json()은 라우트보다 먼저 등록해야 req.body가 채워진다.
Express 5에서 라우팅 문법도 손봤다. 와일드카드는 더 이상 '*' 단독으로 쓰지 않고 이름을 붙여 '/files/*splat' 형태로 명시해야 하며, 정규식 기반 경로 매칭이 더 엄격해졌다. Express 4에서 마이그레이션할 때 가장 자주 걸리는 부분이다.
가장 큰 변화는 async 핸들러 자동 에러 전달이다. 기존 asyncHandler() 래퍼를 모두 제거하고 async 함수를 그대로 라우트에 넘기면 된다. 라우트 와일드카드(* → *name)와 req.query가 읽기 전용이 된 점도 함께 점검한다.
실전 구현 가이드
2026년 Express로 API를 짤 때 가장 체감되는 변화는 비동기 에러 처리다. Express 4 시절에는 async 라우트에서 던진 에러가 에러 핸들러로 가지 않아, 모든 핸들러를 try/catch로 감싸거나 express-async-errors 같은 패키지를 깔아야 했다. Express 5는 이걸 프레임워크가 직접 처리한다.
아래처럼 async 함수가 reject하면, Express 5 라우터가 자동으로 그 에러를 잡아 맨 마지막에 등록한 에러 처리 미들웨어(인자 4개)로 넘긴다. 코드에서 반복되던 보일러플레이트가 통째로 사라진다.
입력 검증
요청 바디는 신뢰하지 않는다. Zod나 express-validator로 라우트 진입 직후 검증 미들웨어를 둔다.
비즈니스 로직 분리
라우트 핸들러는 얇게 유지하고, 실제 로직은 서비스 계층으로 빼낸다. 테스트와 재사용이 쉬워진다.
중앙 에러 핸들러
모든 에러를 한 곳에서 받아 상태 코드와 응답 형식을 통일한다. Express 5에서는 async 에러도 여기로 모인다.
고급 패턴 및 최적화
Express는 안정적이지만 빠른 프레임워크는 아니다. 2026년 벤치마크 기준 Express는 hello-world에서 초당 약 4만 요청(40K RPS)을 처리하는데, Fastify와 Hono는 12만~15만 RPS로 2~3배 이상 앞선다. JSON API에서 이 차이는 특히 크게 벌어진다.
그렇다면 2026년에는 무엇을 골라야 할까. 정답은 상황에 따라 다르다.
| 프레임워크 | 강점 | 적합한 경우 |
|---|---|---|
| Express 5 | 최대 생태계, 풍부한 미들웨어, 익숙함 | 기존 코드베이스, 검증된 안정성 우선 |
| Fastify | Express 대비 2~3배 성능, JSON Schema 검증 | Node.js 전용, 성능이 중요한 JSON API |
| Hono | 최고 수준 TypeScript DX, 멀티 런타임 | 신규 프로젝트, 엣지/서버리스(Cloudflare·Bun·Deno) |
요약하면 이렇다. 레거시를 운영 중이거나 미들웨어 생태계의 폭이 중요하면 Express 5로 충분하다. 순수 Node.js 환경에서 성능이 최우선이면 Fastify, 처음부터 새로 시작하고 TypeScript와 엣지 배포(Cloudflare Workers, Vercel Edge, AWS Lambda)를 고려한다면 Hono가 2026년의 기본 선택지로 떠올랐다.
Express를 계속 쓴다면 성능을 끌어올리는 실무 포인트는 다음과 같다.
- 압축과 캐싱:
compression미들웨어 + 정적 자산에Cache-Control헤더를 적용한다. - 클러스터링: Node 24의
cluster모듈이나 PM2로 CPU 코어 수만큼 워커를 띄운다. - 보안 헤더:
helmet으로 기본 보안 헤더를 설정하고,express-rate-limit으로 요청 폭주를 막는다. - 리버스 프록시: 운영 환경에서는 Nginx나 Caddy 뒤에 두어 TLS 종료와 로드밸런싱을 위임한다.
Node.js 24는 내장 TypeScript 타입 스트리핑이 안정화돼, 별도 빌드 단계 없이 .ts 파일을 실행할 수 있다. 다만 타입 검사는 하지 않으므로 CI에서 tsc --noEmit로 별도 검증하는 구성이 안전하다.
마무리
2026년의 Express는 더 이상 "어쩔 수 없이 쓰는 오래된 프레임워크"가 아니다. Express 5에서 비동기 에러 처리가 정리되고 Node.js 24 LTS가 받쳐주면서, 검증된 안정성과 압도적인 생태계라는 강점이 다시 살아났다. 기존 프로젝트라면 Express 5로의 업그레이드만으로도 코드가 한층 깔끔해진다.
다만 새로 시작하는 프로젝트, 특히 엣지·서버리스 환경이나 TypeScript 우선 개발이라면 Fastify와 Hono를 진지하게 비교해 볼 가치가 있다. 도구는 목적에 맞게 고르는 것이다. 먼저 작은 Express 5 서버로 미들웨어 흐름과 에러 처리를 손에 익힌 뒤, 요구사항이 명확해지면 그때 대안을 저울질해도 늦지 않다.