TechFeedTechFeed
백엔드난이도 보통⏱ 며칠(라우트 수에 따라)

Express에서 Fastify로 마이그레이션

Express→Fastify
요약: Fastify는 Express와 유사한 라우팅에 더 빠른 처리량과 스키마 기반 검증·직렬화를 제공합니다. req/res가 request/reply로 바뀌고 미들웨어는 플러그인·훅으로 전환됩니다.

왜 옮기나

  • Fastify는 JSON 직렬화 최적화로 Express보다 처리량이 높습니다.
  • JSON 스키마 기반 요청 검증·응답 직렬화가 내장돼 있습니다.
  • 플러그인 캡슐화로 대규모 앱 구조가 깔끔해집니다.

전제 — 현재 상태

Express app, app.get/post, req/res, express 미들웨어 체인.

마이그레이션 단계

1
Fastify 설치

Fastify와 필요한 플러그인을 설치합니다.

npm install fastify
2
앱 초기화 교체

express()를 fastify()로 바꾸고 리스닝을 async listen으로 변경합니다.

const fastify = require('fastify')({ logger: true })
await fastify.listen({ port: 3000 })
3
핸들러 시그니처 변경

req/res 대신 (request, reply)를 받고, res.json 대신 reply.send 또는 return 값을 씁니다.

fastify.get('/users', async (request, reply) => {
  return { users: [] } // 자동 JSON 직렬화
})
4
미들웨어 → 훅/플러그인

app.use 미들웨어는 Fastify의 onRequest/preHandler 훅이나 플러그인(@fastify/cors 등)으로 옮깁니다.

fastify.register(require('@fastify/cors'), { origin: true })

⚠️ 막히는 케이스 · 함정

  • Express 미들웨어를 그대로 쓰려면 @fastify/express 호환 레이어가 필요하지만 성능 이점이 줄어듭니다.
  • 에러 처리는 setErrorHandler로 중앙화하며 Express의 next(err) 패턴과 다릅니다.
  • 요청 본문 파싱·검증은 라우트의 schema 옵션으로 선언하는 방식이 권장됩니다.
✅ 검증: 각 엔드포인트의 응답·상태코드·에러 처리가 동일한지 통합 테스트로 확인하고, 부하 테스트로 처리량 개선을 확인합니다.
FastifyExpress백엔드Node.jsAPI

관련 가이드

Node.js LTS 버전 | 운영은 24, 10월 28일부터 26도 LTS입니다Prisma Query Engine, binaryTargets, 엔진 파일 | 프리뷰만 엔진을 못 찾으면?동기 require, ESM, 노드 버전 | 패키지는 있는데 require만 막히면?ERR_PACKAGE_PATH_NOT_EXPORTED, 서브패스, exports | 패키지는 있는데 깊은 경로만 막히면?