Fastify TIL
Fastify란?
Fastify는 Node.js를 위한 빠르고 효율적인 웹 프레임워크입니다. Express.js의 대안으로 설계되었으며, 높은 성능과 개발자 친화적인 기능들을 제공합니다.
주요 특징
1. 높은 성능
- Express보다 더 빠른 처리 속도 (벤치마크에 따라 차이 존재)
- 성능 최적화 요소들:
fast-json-stringify: 컴파일된 JSON 직렬화로 최대 10배 빠른 JSON 생성find-my-way: 최적화된 HTTP 라우터 (radix tree 기반)- 스키마 컴파일: JSON Schema를 사전 컴파일하여 검증 성능 향상
- 객체 재사용: 내부적으로 객체 풀링으로 가비지 컬렉션 부하 감소
2. TypeScript 지원
- 내장된 TypeScript 지원
- 타입 안전성 보장
- 자동 완성 및 IntelliSense 지원
3. 스키마 기반 검증
- JSON Schema를 이용한 입력 검증
- 자동 문서화 (Swagger/OpenAPI)
- 런타임 성능 최적화
4. 플러그인 시스템
- 모듈화된 아키텍처
- 풍부한 생태계
- 캡슐화된 컨텍스트
기본 사용법
설치
npm install fastify간단한 서버 예제
const fastify = require('fastify')({ logger: true })
// 라우트 선언
fastify.get('/', async (request, reply) => {
return { hello: 'world' }
})
// 서버 시작
const start = async () => {
try {
await fastify.listen({ port: 3000 })
console.log('서버가 http://localhost:3000 에서 실행 중입니다')
} catch (err) {
fastify.log.error(err)
process.exit(1)
}
}
start()스키마 검증 예제
const schema = {
body: {
type: 'object',
properties: {
name: { type: 'string' },
age: { type: 'number' }
},
required: ['name']
}
}
fastify.post('/user', { schema }, async (request, reply) => {
const { name, age } = request.body
return { message: `안녕하세요, ${name}님!` }
})주요 플러그인
1. @fastify/cors
await fastify.register(require('@fastify/cors'), {
origin: true
})2. @fastify/static
await fastify.register(require('@fastify/static'), {
root: path.join(__dirname, 'public')
})3. @fastify/jwt
await fastify.register(require('@fastify/jwt'), {
secret: 'your-secret-key'
})Express와의 차이점
| 특징 | Fastify | Express |
|---|---|---|
| 성능 | 더 빠름 (상황별 차이) | 표준 |
| TypeScript | 내장 지원 | 별도 설정 필요 |
| 스키마 검증 | 내장 | 별도 라이브러리 필요 |
| 플러그인 시스템 | 캡슐화된 컨텍스트 | 글로벌 미들웨어 |
| JSON 처리 | 최적화됨 | 표준 |
언제 사용하면 좋을까?
✅ Fastify를 선택하는 경우
- 높은 성능이 중요한 API 서버
- TypeScript 프로젝트
- 마이크로서비스 아키텍처
- JSON API 중심의 애플리케이션
- 스키마 기반 검증이 필요한 경우
❌ Express를 고려하는 경우
- 기존 Express 생태계에 의존하는 경우
- 레거시 프로젝트 마이그레이션이 어려운 경우
- 특정 Express 전용 미들웨어가 필요한 경우
핵심 개념
1. 인캡슐레이션
- 각 플러그인은 독립적인 컨텍스트를 가짐
- 네임스페이스 충돌 방지
- 모듈화된 개발 가능
2. 비동기 기본
- Promise/async-await 기본 지원
- 효율적인 비동기 처리
3. 스키마 중심 개발
- 입력/출력 검증
- 자동 문서화
- 성능 최적화
실무 팁
- 로깅 설정: 프로덕션에서는
logger: true대신 pino 설정 사용 - 에러 핸들링:
setErrorHandler로 글로벌 에러 처리 - 플러그인 등록:
register로 플러그인 등록 시 순서 주의 - 스키마 재사용: 공통 스키마는 별도 파일로 분리
마무리
Fastify는 성능과 개발자 경험을 모두 중시하는 현대적인 Node.js 프레임워크입니다. 특히 API 서버 개발에서 Express의 강력한 대안이 될 수 있으며, TypeScript와 스키마 검증이 중요한 프로젝트에서 그 진가를 발휘합니다.