Nest 프로젝트를 생성하면 node modules와 몇 가지 boilerplate 파일들이 설치된다. 그리고 src/
디렉토리가 생성되는데, 이 디렉토리는 몇 가지 핵심 파일로 구성된다.
핵심 파일들의 개요는 아래와 같다.
app.controller.spec.ts
app.controller.ts
app.module.ts
app.service.ts
main.ts
NestFactory
핵심 함수를 사용해서 Nest 애플리케이션 인스턴스를 생성한다.main.ts
파일은 비동기 함수를 포함하는데, 이 함수는 애플리케이션을 bootstrap한다.
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
클래스를 사용해 Nest 애플리케이션 인스턴스를 생성한다. NestFactory
클래스는 애플리케이션 인스턴스를 생성하기 위한 몇 가지 정적 메서드를 노출하고 있다. create()
메서드는 INestApplication
인터페이스를 충족하는 애플리케이션 객체를 반환한다.
위 main.ts
예제에서는, 애플리케이션이 HTTP 요청을 기다리게 하도록 HTTP 리스너를 시작한다.
Nest는 플랫폼에 구애 받지 않는 프레임워크를 지향한다. 플랫폼 독립은 개발자가 여러 타입의 애플리케이션에서 사용할 수 있는, 재사용 가능한 로직들을 생성할 수 있게 해준다. Nest는 어떤 Node HTTP 프레임워크와도 잘 작동한다. 기본적으로 express
와 fastify
HTTP 플랫폼을 지원한다.
platform-express
platform-fastify
어떤 플랫폼을 선택하던지, 선택된 플랫폼은 자신만의 애플리케이션 인터페이스를 노출시킨다. 각각 NestExpressApplication
과 NestFastifyApplication
이 있다.
아래 코드처럼 NestFactory.create()
메서드에 타입을 전달하면, app
객체는 플랫폼에 맞는 메서드를 갖게 된다.
const app = await NestFactory.create<NestExpressApplication>(AppModule);
아래 명령을 실행하면 애플리케이션이 HTTP 요청을 기다리기 시작한다.
npm run start
이 명령은 애플리케이션을 실행한다. 애플리케이션은 src/main.ts
파일에서 정의된 포트에서 HTTP 요청을 기다리는 HTTP 서버를 포함하고 있다.
파일 변화를 감지하려면, 아래 명령을 사용해 애플리케이션을 실행하면 된다.
npm run start:dev
이 명령은 파일 변화를 감지해 자동으로 서버를 재컴파일하고 재시작한다.