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 앱의 퍼포먼스를 향상시킬 수 있습니다. 이러한 최적화는 무거운 트래픽을 처리해야 하는 대규모 어플리케이션에서 특히 중요합니다.
참고 문헌:
- “Fastify - Encapsulation and Performance”, https://www.fastify.io/docs/latest/Encapsulation-and-Performance/