※해당 글은 "NestJS로 배우는 백엔드 프로그래밍"(한용재 저)를 토대로 공부한 것을 정리한 것임을 밝힙니다.
NestJS란..
NestJS는 Express, Fastify 등과 같은 Node.js의 인기 있는 웹 프레임워크들을 기반으로 개발된 Node.js에 기반을 둔 웹 API 프레임워크이다.
Node.js는 손쉽게 사용할 수 있고 뛰어난 확장성을 가지고 있지만, 과도한 유연함으로 인해 결과물의 품질이 일정하지 않고, 알맞은 라이브러리를 찾기 위해 사용자가 많은 시간을 할애해야 한다.
하지만 NestJS는 데이터베이스, ORM(object-relational-mapping), 설정(구성), 유효성 검사 등 수많은 기능을 기본 제공한다. 그러면서도 필요한 라이브러리를 쉽게 설치하여 기능을 확장할 수 있는 Node.js의 장점은 그대로 가지고 있다.
NestJS는 Node.js의 서버 사이드 애플리케이션 개발을 위한 프레임워크이다. NestJS는 Angular의 구조와 철학을 차용하여 개발되었으며, 모듈/컴포넌트 기반으로 프로그램을 작성함으로써 재사용성을 높이고, 제어 반전(IoC), 의존성 주입(DI), 관점 지향 프로그래밍(AOP) 같은 객체 지향 개념을 도입했다. 프로그래밍 언어는 TypeScript를 기본으로 채택하여 TypeScript가 가진 Type시스템의 장점을 누릴 수 있다.
Nest.JS의 장점은 다음과 같다.
1. 구조화된 코드: Nest.js는 모듈, 컨트롤러, 서비스, 미들웨어, 파이프, 가드 등의 개념을 도입하여 코드의 구조화와 모듈화를 도와준다.
2. TypeScript 지원: TypeScript를 사용하여 개발되므로 코드의 가독성과 유지보수성이 높아진다.
3. 다양한 기능 지원: Express, Fastify 등과 같은 Node.js의 웹 프레임워크를 기반으로 개발되어 다양한 기능을 지원한다.
4. 커뮤니티 활동: 커뮤니티가 활발하며, 다양한 패키지와 라이브러리를 사용할 수 있다.
5. 테스트 용이성: CLI를 제공하여 프로젝트 구조를 자동으로 생성하고, 테스트를 쉽게 작성하고 실행할 수 있다.
Express 와의 비교
Express와 NestJS는 Node.js 기반 웹 프레임워크이다. Express는 이미 많은 회사가 채택해 운용하고 있는 검증된 프레임워크이지만, 비교적 늦게 등장한 NestJS는 아직 사용 경험은 저조하다(State of JS 2021 설문).
NestJS는 Express의 아키텍처를 기반으로 하고 있으며, Express의 기능을 대부분 포함하고 있다. 둘을 간단히 비교하면 다음 표와 같다.
구분 | Express | NestJS |
유연함/확장성 | Express는 가볍게 테스트용 서버를 띄울수 있습니다. 아이디어를 빠르게 검증하는 데에는 좋겠지만 단순하고 자유도가 높은 만큼 자기에게 맞는 라이브러리를 찾기 위해 발품을 팔아야 합니다. 보일러 플레이트를 미리 얹어 놓은 깃허브 리포지토리들이 있으니 이를 활용해도 좋습니다. | 미들웨어, IoC, CQRS 등 이미 많은 기능을 프레임워크 자체에 포함하고 있습니다. 사용자는 문서를 보고 쉽게 따라할 수 있습니다. 원하는 기능이 없다면 다른 라이브러리를 적용해서 사용하면 됩니다. |
Typescript 지원 | 추가 설정을 통해 사용가능합니다. | 기본 설정입니다. 바닐라 자바스크립트로도 작성 가능합니다. |
커뮤니티 | 가장 큽니다. | 꾸준히 증가하고 있습니다. |
출처: NestJs로 배우는 프로그래밍 p.3
Express는 상용 제품을 만들기까지 시간이 오래 걸릴 수 있다. NestJS는 백엔드 서버가 갖춰야 하는 많은 필수 기능을 프레임워크 내에 내장하고 있고 추가로 필요한 기능을 설치하고 적용하는 방법을 문서로 제공한다. 또한 제어 반전(IoC), 의존성 주입(DI)을 채용하여 객체지향 프로그래밍과 모듈화를 쉽게 할 수 있다. Express를 사용한다면 이 모든 것들을 npm에서 찾아서 검토하는 과정이 필요하다. 필요한 기능들을 하나씩 검토하고 선택하는 노력도 무시할 수 없다.
'NestJS' 카테고리의 다른 글
NestJS에서 openAI API 연동으로 ChatGPT 활용하기 (0) | 2023.08.30 |
---|---|
Throttler를 사용한 Rate Limiting (0) | 2023.08.24 |
Provider (0) | 2023.07.24 |
Controller (0) | 2023.07.20 |
NestJS의 프로젝트 구조 (0) | 2023.07.18 |