Gitsunmin

TIL

TIL
(=Today I Learned)

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와의 차이점

특징FastifyExpress
성능더 빠름 (상황별 차이)표준
TypeScript내장 지원별도 설정 필요
스키마 검증내장별도 라이브러리 필요
플러그인 시스템캡슐화된 컨텍스트글로벌 미들웨어
JSON 처리최적화됨표준

언제 사용하면 좋을까?

✅ Fastify를 선택하는 경우

  • 높은 성능이 중요한 API 서버
  • TypeScript 프로젝트
  • 마이크로서비스 아키텍처
  • JSON API 중심의 애플리케이션
  • 스키마 기반 검증이 필요한 경우

❌ Express를 고려하는 경우

  • 기존 Express 생태계에 의존하는 경우
  • 레거시 프로젝트 마이그레이션이 어려운 경우
  • 특정 Express 전용 미들웨어가 필요한 경우

핵심 개념

1. 인캡슐레이션

  • 각 플러그인은 독립적인 컨텍스트를 가짐
  • 네임스페이스 충돌 방지
  • 모듈화된 개발 가능

2. 비동기 기본

  • Promise/async-await 기본 지원
  • 효율적인 비동기 처리

3. 스키마 중심 개발

  • 입력/출력 검증
  • 자동 문서화
  • 성능 최적화

실무 팁

  1. 로깅 설정: 프로덕션에서는 logger: true 대신 pino 설정 사용
  2. 에러 핸들링: setErrorHandler로 글로벌 에러 처리
  3. 플러그인 등록: register로 플러그인 등록 시 순서 주의
  4. 스키마 재사용: 공통 스키마는 별도 파일로 분리

마무리

Fastify는 성능과 개발자 경험을 모두 중시하는 현대적인 Node.js 프레임워크입니다. 특히 API 서버 개발에서 Express의 강력한 대안이 될 수 있으며, TypeScript와 스키마 검증이 중요한 프로젝트에서 그 진가를 발휘합니다.