Nest는 효율적이고 확장 가능한 Node.js 서버 사이드 애플리케이션을 구축하기 위한 프레임워크입니다.
TypeScript를 완벽하게 지원합니다.(바닐라 자바스크립트로도 가능)
OOP(객체지향 프로그래밍)개념, FP(함수형 프로그래밍) 및 FRP(함수 반응형 프로그래밍) 등을 사용합니다.
내부적으로 Nest는 HTTP 서버 프레임워크(Express가 기본값임)를 사용하며, Fastify로도 선택적으로 구성할 수 있습니다. 즉, Express, Fastify 프레임워크를 래핑해서 동작합니다.
Node.js에서는 전통적으로 Express 프레임워크가 오랜 시간 높은 점유율을 차지해왔습니다.
하지만 워낙 경량 프레임워크라 핵심적인 기능 외에 다른 기능들은 직접 라이브러리를 찾거나 만들어야 했습니다. 이는 자유로운 아키텍처 구조를 갖는 Express의 장점이자 단점이었습니다. 일정한 수준 이상의 코드 품질을 지키기 어렵기 때문입니다..
하지만 NestJS는 ORM, 유효성 검사, 설정 등 많은 기능들을 기본으로 제공하고, 필요한 라이브러리를 쉽게 설치해서 기능을 확장할 수도 있습니다.
TypeScript를 기본으로 지원하고 IoC, DI, AOP 같은 객체지향 개념도 도입하였기 때문에 타입스크립트의 타입 시스템의 장점과 객체지향의 장점까지 누릴 수 있습니다.
npm i -g @nestjs/cli
nest new project-name
다음과 같이 Nest CLI를 통해 스캐폴딩 된 새로운 프로젝트를 생성할 수 있습니다.
저는 nest-practice라는 프로젝트 이름으로 생성했습니다.
중간에 패키지 매니저를 사용할 거냐고 물어보는데 저는 npm을 사용하겠습니다.
그러면 다음과 같은 구조의 보일러 플레이트가 생성됩니다.
main.ts
파일을 살펴보면 다음과 같이 되어있습니다.
import { NestFactory } from '@nestjs/core';
import { AppModule } from './app.module';
async function bootstrap() {
const app = await NestFactory.create(AppModule);
await app.listen(3000);
}
bootstrap();
Nest 애플리케이션 인스턴스를 생성하는 앱의 시작점 파일입니다.
Nest 애플리케이션 인스턴스를 생성하기 위해서 핵심인 NestFactory
클래스를 사용합니다.
NestFactory
클래스는 Nest 애플리케이션 인스턴스를 생성하기 위한 몇 가지 정적 메서드를 제공하고 있는데 create()
메서드는 INestApplication
인터페이스를 구현한 애플리케이션 객체를 반환합니다.
Nest는 플랫폼 종속직이지 않은 프레임워크를 지향합니다. 기본적으로는 Express를 래핑해서 동작하며, 필요하다면 Fastify를 사용할 수도 있습니다.
Nest CLI를 통해 프로젝트를 만들면 eslint와 prettier가 자동으로 설치되어 있으며 각각의 설정 파일 또한 만들어져 있습니다.
가볍고 빠르고 간단하게 서버를 띄울 수 있는 Express는 핵심적인 기능만 포함하고 있었습니다.
자유로운 구조의 Express의 장점이 분명히 존재했지만, 다른 기능을 사용하고 싶다면 직접 개발하거나, 이에 맞는 라이브러리를 찾고, npm trends등을 살펴보며 검증하기도 해야하는 불편함이 있었습니다.
NestJS는 이미 IoC/DI, CQRS등 많은 기능등을 프레임워크 자체에 포함하고 있으며, 공식문서를 통해 쉽게 따라할 수 있습니다.
NestJS에 대해서 알아보며 간단한 유저서비스를 만드는 실습을 포스팅 할 예정입니다.
다음 시간에는 NestJS의 컨트롤러에 대해 알아보겠습니다.
잘 읽었습니다. 좋은 정보 감사드립니다.