[nodejs] Fastify와 퍼포먼스 튜닝 방법

Node.js의 웹 프레임워크인 Fastify는 높은 성능을 자랑하며, 대규모 어플리케이션의 필요에 맞게 설계되었습니다. 하지만 실제로 Fastify 앱의 성능을 극대화하기 위해서는 몇 가지 추가적인 퍼포먼스 튜닝이 필요할 수 있습니다. 이 포스트에서는 Fastify 앱의 퍼포먼스를 향상시키기 위한 몇 가지 방법을 살펴보겠습니다.

목차

서버 인스턴스 생성

Fastify 앱의 서버 인스턴스를 생성할 때, helloworld 예제를 사용하여 기본적인 앱을 만들 수 있습니다. 기본 앱 설정으로는 이미 빠른 속도를 제공하지만, OS 수준에서의 TCP 및 HTTP 설정을 병행하여 향상된 결과를 얻을 수 있습니다.

또한, 더 높은 퍼포먼스를 원한다면, 운영체제의 설정을 튜닝하여 네트워크 스택 및 파일 시스템이 최적화되도록 하는 것이 중요합니다.

프로덕션 환경에서 Fastify 앱을 실행할 때, server.listen() 메서드의 옵션을 사용하여 네트워크 인터페이스, 포트, 백로그 사이즈 등을 설정해야 합니다.

fastify.listen({
  port: 3000,
  host: '0.0.0.0',
  backlog: 511
}, (err, address) => {
  if (err) {
    console.error(err)
    process.exit(1)
  }
  console.log(`Server listening on ${address}`)
})

라우팅과 핸들러 함수 최적화

라우팅 및 핸들러 함수는 Fastify 앱의 핵심 요소이며, 퍼포먼스에 영향을 미칩니다. 따라서 라우트 경로마다 최적화된 핸들러 함수를 작성하고, 불필요한 미들웨어를 제거하여 응답 시간을 단축할 수 있습니다.

Fastify는 라우팅 속도를 높일 수 있는 키 캐싱과 라우팅 속도 향상을 위한 라우트 컴파일러 기능을 제공합니다.

fastify.route({
  method: 'GET',
  url: '/user/:id',
  handler: async (request, reply) => {
    // 핸들러 함수 내용
  }
})

스키마 유효성 검사 성능 향상

Fastify는 JSON 스키마를 사용하여 요청 및 응답 데이터를 유효성 검사하는 기능을 제공합니다. 하지만 스키마의 규모가 크고 요청이 많은 경우, 스키마 유효성 검사가 성능 저하의 원인이 될 수 있습니다.

이를 해결하기 위해 서버 시작 시, JSON 스키마를 컴파일하여 성능을 향상시키는 방법을 사용할 수 있습니다.

fastify.addSchema({
  $id: 'userSchema',
  type: 'object',
  properties: {
    // 프로퍼티 정의
  }
})

위에서 언급된 방법을 따라 Fastify 앱의 퍼포먼스를 향상시킬 수 있습니다. 이러한 최적화는 무거운 트래픽을 처리해야 하는 대규모 어플리케이션에서 특히 중요합니다.

참고 문헌: