Skip to main content

Nest.js Basic

nestjs

Nest의 기본적인 개념을 정리해두려 한다.


Nest의 철학

Nest provides an out-of-the-box application architecture which allows developers and teams to create highly testable, scalable, loosely coupled, and easily maintainable applications. The architecture is heavily inspired by Angular.

JavaScript 환경에서 가지고 있던 고질적인 문제인, Architecture를 해결해보겠다는 것이다. 특히 자유분방한 ExpressJS와 같은 Node.js 프레임워크보다 추상화 되어 있다.


Nest의 core

Nest Instance

$ npm i -g @nestjs/cli
$ nest new myproject

우선 위 명령어를 실행하게 되면, 몇 가지 보일러플레이트 파일과 함께 아래의 파일이 생성된다.

src
├── app.controller.spec.ts
├── app.controller.ts
├── app.module.ts
├── app.service.ts
└── main.ts

이때, main.ts 파일이 Entry 파일이며, 내부는 다음과 같이 구성 돼 있다.

import { NestFactory } from "@nestjs/core";
import { AppModule } from "./app.module";

async function bootstrap() {
const app = await NestFactory.create(AppModule);
await app.listen(3000);
}
bootstrap();

NestFactory라는 core class에서 create() 메서드를 통해 INestApplication 인터페이스 타입의 인스턴스를 반환한다.

그리고 애플리케이션 인스턴스는 3000번 포트에서 인바운드 HTTP 요청을 기다리게 된다.

재미있는 점은, Nest는 플랫폼 독립적이기 때문에, Express 또는 Fastify 두 가지의 HTTP Platform을 사용할 수 있다. 이때, 아래와 같이 <NestExpressApplication>처럼 타입을 명시한다면, Express라는 HTTP Platform 내부의 API를 사용할 수 있다. 하지만 그럴 필요가 없다면 타입을 명시하지 않아도 된다.

$ const app = await NestFactory.create<NestExpressApplication>(AppModule);
Related Links