[NestJS] Express vs. Fastify?

NestJS는 플랫폼으로 ExpressFastify를 지원한다.

그럼 당연히 떠오르는 질문은 둘 중에 무엇을 쓸까?

 

일단 아무 설정도 하지 않으면 디폴트는 Express로 돌아간다.

 

NestJS의 공식 문서는 다음과 같이 두 플랫폼을 묘사한다.

Express Fastify
Well-known High Performance
Battle Tested Low Overhead
Production Ready Maximum Efficiency & Speed

대충 요약하자면...

 

- Express: 활성화된 커뮤니티에 의해 실서비스 안정성이 검증된 안정적인 선택지

- Fastify: 퍼포먼스! 퍼포먼스! 퍼포먼스!

 

약간 도전적인 선택이 가능한 개발자라면 Fastify에 꽂힐 것이고,

실서비스 구축을 준비중인 개발자라면 Express에 더 끌릴 것이다.

 

창업 아이템을 개발하면서 처음에 Fastify로 설정을 했는데, 그 이유는 다음과 같다.

- 백엔드에 복잡한 기능을 넣을 계획이 없다.

  - 그럼 퍼포먼스 위주로 가면 서버 비용을 조금이라도 덜 낼 수 있다!!!

  - Fastify가 그렇게 빠르다는데 써보고 싶다!!!

- 플랫폼 의존적 코드가 없다면 코드 몇 줄로 Express로 돌아갈 수 있다. (중요)

 

NestJS에 플랫폼 Specific한 코드를 넣는 것은 지양하는게 좋다고 생각한다.

- 플랫폼 의존적인 코드가 들어가면 NestJS를 쓰는 의미가 희미해진다.

- 문제가 발생했을 때 고민할 포인트가 늘어난다.

 

현재는 Express로 플랫폼을 되돌려둔 상태인데, 그 이유는 파일 업로드 때문이다.

아래는 공식 문서의 File upload 항목인데, 상단에 신경쓰이는 warning이 있다.

 

 

Documentation | NestJS - A progressive Node.js framework

Nest is a framework for building efficient, scalable Node.js server-side applications. It uses progressive JavaScript, is built with TypeScript and combines elements of OOP (Object Oriented Progamming), FP (Functional Programming), and FRP (Functional Reac

docs.nestjs.com

WARNING
Multer cannot process data which is not in the supported multipart format (multipart/form-data). Also, note that this package is not compatible with the FastifyAdapter.

 

파일 업로드에 사용하는 Multer 패키지가 Fastify는 지원하지 않는다!

근데 예제는 Multer를 사용한다!

나는 자바스크립트도 타입스크립트도 익숙하지 않은데 시간도 없다.

...파일 업로드를 위해 또 헤매는 건 좀 아닌데...

 

그래서 결국 Express로 방향을 전환했다. (main.ts에서 2~3줄 정도 바꾸고 import 지우면 끝)

 

Express와 Fastify 중에 고민하고 있다면, 아래와 같이 권하고 싶다.

- 회사 업무라면 일단 Express로 개발하자.

- Node.js로 백엔드 개발을 지겨울 정도로 해본 후에 Fastify를 고려하자.

 

새로운 기술은 언제나 매력적이고 멋지지만, 리스크가 많기 때문에 높은 숙련도를 요구한다.