NestJS로 토이 프로젝트를 만들어보면서 간단한 기능 개발은 해보았지만 정작 NestJS가 무엇이냐고 물어보는 질문에 제대로 답하지 못했었다. 그래서 이번 시간에는 NestJS가 무엇이고 어떤 특징을 가지고 있는지, Express.js와는 어떤 점이 다른지 등을 다뤄보려고 한다.
Node.js 덕분에 JavaScript는 프런트엔드 및 백엔드 애플리케이션 모두에서 웹의 "공통어"가 되었습니다 ... 그러나 Node(및 서버측 JavaScript)를 위한 우수한 라이브러리, 도우미 및 도구가 많이 존재하지만 그 중 어느 것도 아키텍처 의 주요 문제를 효과적으로 해결하지 못합니다.
기존의 Node.js 진영의 서버 측 프레임워크(Express.js 등)은 단순하고 자유도가 높다는 장점이 있지만, 필요한 라이브러리를 찾기 위해 직접 발품을 팔아야 하며, 개발자들이 직접 애플리케이션의 아키텍쳐를 설계해야만 했다. 이러한 작업은 번거로울 뿐만 아니라, 구조를 제대로 설계하지 않았을 경우 애플리케이션의 확장성과 유지 보수성이 떨어지게 된다. 이러한 문제점을 해결하기 위해 NestJS가 등장했다.
그렇다면 NestJS란 무엇일까? 공식 문서에서는 이렇게 소개하고 있다.
Nest(NestJS)는 효율적이고 확장 가능한 Node.js 서버 측 애플리케이션을 구축하기 위한 프레임워크입니다.
NestJS는 TypeScript로 구축되어 있으며, Express 또는 Fastify 프레임워크를 래핑하여 동작한다. Express.js와 비교하여 아래와 같은 특징과 장점을 가지고 있다.
팀 프로젝트를 진행하면서 Express.js를 사용한 적이 있었는데, Express.js 자체 기능은 빠르게 학습하고 사용할 수 있었지만 프로젝트 구조에 대한 설계가 제대로 이루어지지 않은 채 기능 개발을 하다가 코드의 중복, 가독성 등 여러 문제점이 발견되어 리팩토링을 한 적이 있다. 구조 설계에 대해 학습하는데 시간이 소요되었고, 이에 필요한 라이브러리를 찾아서 학습하고 적용하는데도 시간이 많이 소요되었다.
나중에 NestJS를 알게 되고 토이 프로젝트에서 사용해보았는데, 학습에는 조금 더 시간이 걸렸지만 Express.js에서 기본적으로 제공하지 않는 여러 기능들을 내장하고 있었고, 애플리케이션 구조도 잘 설계되어 있어 편리했다.
아무래도 간단하고 가벼운 서비스라면 단순하고 빠르게 기능을 구현할 수 있는 Express.js가 좋을 것 같고, 규모가 크고 복잡한 애플리케이션이라면 NestJS가 좋을 것 같다는 생각이 들었다.