1. NestJS란?

 

웹, 앱 서버를 위한 서버 프레임워크 중 최근까지 가장 사랑받고 있는 것은 Node.js이다. 높은 성능을 갖고, 빠른 개발이 가능하며, 동시에 많은 연결을 다루는 데 적합한 점 덕분이다. Node.js는 사용자가 많은 덕분에 커뮤니티가 활성화되고 다양한 라이브러리가 제공된다.

하지만 모든 것이 완벽하지는 않다. 그 중 크게 지적받았던 부분이 바로 로직 구성이 너무 자유롭다는 점이다. 정해진 아키텍처가 없기에 개발자마다 다른 구조로 작성하게 된다. 아키텍처가 잘 구조화된 프로젝트일지라도 코드 작성자 이외의 사람이 코드를 분석할 때는 아키텍처부터 파악해야 하기에 코드의 가독성이 좋지 않다. 그렇기에 협업이나 유지 보수에 어려움을 겪게 된다.

이러한 점을 보완하기 나온게 "Nest.js"이다. NestJS는 NodeJS환경에서 동작하는 프레임워크로, NodeJS를 기반으로 만들어졌다. NodeJS의 Express 위에서 구축된 프레임워크로, Express의 기능을 확장하여 보다 체계적이고 모듈화된 구조를 제공한다. 또한 HTTP 요청 및 응답을 처리하고, 미들웨어를 사용하여 요청, 응답 주기를 조작할 수 있도록 하는 역할을 한다. 이러한 이점 때문에 카카오, 네이버, 쿠팡, 직방, 토스, 배달의 민족 등에서 NestJS를 활용하고 있다.

 

 

2. NestJS를 사용하는 이유

 

NestJS는 TypeScript 언어 기반으로 작성되어 있어 TypeScript의 강력한 정적 타입 검사, 객체지향 프로그램 기능 등 최신 주류의 언어들이 사용하는 기능을 제공한다. 이는 개발 단계에서 버그를 사전에 방지하고, 코드 재사용 및 유지 보수성을 높여준다.

뿐만 아니라 강력한 의존성 주입과 모듈 기반의 구조로 체계적인 방식으로 코드를 구성할 수 있다. 아키텍처가 정의되어 있어 정의된 아키텍처에 따라 개발해야 하며, 이렇게 개발된 프로젝트는 여러 개발자 간 협업하기 좋다. 이로 인해 프로젝트의 확장이 용이하며, 대규모 엔터프라이즈 애플리케이션을 개발할 때 더욱 빛을 발한다.

 

 

3. 장점

   1) 사용하기 쉽다

cli를 전역적으로 설치 후 nest라는 명령어를 통해 프로젝트를 만들거나 서비스, 모듈 파일 및 테스트 파일을 생성해줌으로써 간편하게 프로젝트를 사전에 설정할 수 있다.

 

   2) 개발하는데에 자주 사용하는 기능들을 NestJS에서는 내장되어 있다.

IoC나 유효성 검사를 해주는 기능들은 기존에 Express에서는 Joi, typeDI를 통해 설치를 해야 했지만 NestJS는 이러한 기능들이 데코레이터를 통해 사용할 수 있다.

 

   3) 오픈소스이며 매년 사용자들이 증가하고 있다.

2022년에 들어서는 현재 120만에 가까운 다운로드 수치를 보여주고 있으며 이는 2021년 대비 3배가량 상승했다.

사용자가 증가할 수록 관련 커뮤니티들이 활성화되고 NestJS에 관한 자료들을 쉽게 찾을 수 있다.

 

 

4. 단점

   1) Express에 비해 배우기 어려운 프레임워크

NestJS는 Express에 비해 상대적으로 배우기 어렵다. 자유도가 높은 express에 비해 미리 정의된 아키텍처를 따라서 개발을 진행해야 하는 NestJS는 사용 전에 이에 대한 지식을 학습해야하기 때문이다. 하지만 미리 정의된 아키텍처에 대한 지식 없이 자유로운 Express내에서 아키텍처를 고려하지 않고 사용했다가는 프로젝트가 커지며 엉망이 된 구조를 갖게 될 수 있다. 아키텍처는 프로젝트 확장과 유지보수에 매우 중요하기에 꼭 학습하고 프로젝트를 진행하는 것이 좋다.

 

   2) 성능 오버헤드

NestJS의 추상화 및 추가 계층을 도입하므로 Express와 같은 최소 프레임워크에 비해 성능 오버헤드가 발생할 수 있다. NestJS는 아키텍처를 추상화하여 특정 계층을 필수로 사용하도록 강제하고 있다.

이는 기능상에서는 보이지 않는 계층 간 호출 및 데이터 처리 과정이 추가적으로 발생하기에 약간의 오버헤드가 발생할 수 있다. 때문에 매우 간단한 기느을 제공하는 작은 규모의 서버거나, 통신사 서버와 같이 서버 성능을 최대한으로 끌어올려야 하는 서비스라면 NestJS는 적절하지 않을 수 있다.

하지만 계층을 나누어 아키텍처를 관리하는 작업은 테스트 및 유지보수를 효과적으로 할 수 있기 때문에 관리 측면에서 매우 필요한 작업이다. 

 

+ Recent posts