Fastify 는 이름에서 알 수 있듯이, 빠른 속도를 내세우는 node.js 웹서버 프레임워크이다. 속도는 본인들의 벤치마크에 따르면, express
대비 약 4배, koa
대비 약 1.6배 빠르다.
빠른 속도 외에도, 여러 장점이 있는데, 내가 눈여겨본 장점은 다음과 같다:
Fastify 의 서버 객체는 express
와 유사하게 생성하고 실행한다.
import fastify, { FastifyInstance } from 'fastify'
const server: FastifyInstance = fastify()
fastify
생성자에 파라미터로 이것저것 넘겨줄 수 있다. 난 기본 Logger 사용 설정과, Request Body 사이즈 제한값만 추가하였다. 이 외에 다양한 옵션들이 가능하니 참고하도록 하자.
import fastify, { FastifyInstance } from 'fastify'
const server: FastifyInstance = fastify({
bodyLimit: 10485760,
logger: true
})
참고로 기본 Logger 는 기본적으로 JSON 형태의 구조화된 로그를 콘솔창에 출력한다.
{"level":30,"time":1629171047623,"pid":62407,"hostname":"morphism0ui-MacBookPro.local","msg":"Server listening at http://0.0.0.0:8090"}
기본적으로 Request, Response 를 기록하며, 코드 중간에 로그를 기록하고 싶다면, request
객체에서 log
속성값을 꺼내 사용할 수 있다.
request.log.error(err)
request.log.info('Hello, world!')
CORS 설정을 위해서는 Fastify 팀에서 개발하는 fastify-cors
패키지를 설치해야 한다. express
와 비슷하게, Fastify 에서도 CORS, JWT 등은 모두 미들웨어로 구현된다. 그리고 이러한 미들웨어는 (당연히) 개인이 직접 개발해서 추가할 수도 있다. 미들웨어를 등록하기 위해서는 express.use
와 비슷한 register
라는 함수가 있다.
import cors from 'fastify-cors'
const server: FastifyInstance = fastify()
server.register(cors, { origin: '*' })
필요한 CORS 설정은 왠만한건 다 할 수 있으니, fastify-cors
패키지 저장소의 문서를 참고하자.
대충 적당히 설정이 끝나면, 아래 코드를 이용하여 서버를 실행할 수 있다.
server.listen(8080, '0.0.0.0')
기본 Logger 가 설정되어 있다면, 자동으로 아래와 같이 서버 실행 로그를 찍는다.
{"level":30,"time":1629171047623,"pid":62407,"hostname":"morphism0ui-MacBookPro.local","msg":"Server listening at http://0.0.0.0:8090"}
또한, listen
함수는 Promise<string>
을 반환하는데, 이때 string
은 서버가 실행되는 주소값으로, http://0.0.0.0:8080
과 같은 값을 갖는다.