
nest.js는 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); // 3000번 포트 리스닝
}
bootstrap();
이 파일은 애플리케이션을 부트스트랩(초기화)하고 실행하는 역할을 합니다.
NestFactory를 사용하여 애플리케이션을 생성하고 실행
Module을 부트스트래핑, 서버 설정이나 글로벌 미들웨어를 추가할 수 있다.
그렇다면 첫 서버 구동 후 localhost:3000의 "Hello World"는 어디서 오는 걸까?
NestFactory.create(AppModule);
코드의 AppModule에 접속해보자
import { Module } from '@nestjs/common';
import { AppController } from './app.controller';
import { AppService } from './app.service';
@Module({
imports: [],
controllers: [AppController],
providers: [AppService],
})
export class AppModule {}
@Module이라는 데코레이터가 존재한다. 데코레이터는 클래스에 함수 기능을 추가할 수 있다.
모듈은 관련된 컨트롤러, 서비스, 프로바이더 등을 그룹화하는 역할을 한다. 애플리케이션의 루트 모듈은 일반적으로 AppModule이며, 이 모듈에서 다른 모듈을 임포트하여 애플리케이션을 구성한다.
controllers: [AppController]
의 AppController에 접속해보자
import { Controller, Get } from '@nestjs/common';
import { AppService } from './app.service';
@Controller()
export class AppController {
constructor(private readonly appService: AppService) {}
@Get()
getHello(): string {
return this.appService.getHello();
}
}
컨트롤러는 HTTP 요청을 처리하고 클라이언트에게 응답을 반환하는 역할을 한다 이곳에서 @Get, @Post, @Put, @Delete 등의 데코레이터를 사용하여 요청을 처리한다.
@Get 어노테이션이 아래와 같은 코드를 리턴하고 있다.
this.appService.getHello();
constructor의 AppService로 들어가면
import { Injectable } from '@nestjs/common';
@Injectable()
export class AppService {
getHello(): string {
return 'Hello World!';
}
}
@Injectable 안에 Hello World!가 리턴되어 있는걸 확인할 수 있다.
서비스는 비즈니스 로직을 처리하고 데이터베이스와 상호 작용하는 등 핵심 기능을 제공한다. @Injectable 데코레이터를 사용하여 서비스 클래스를 정의하고, 의존성 주입을 통해 컨트롤러나 다른 서비스에 주입할 수 있다.
간단하게 정리해보면 main.ts에서 module - controller - service와 같이 NestJS 애플리케이션을 체계적이고 효율적으로 구성할 수 있다. 각 요소는 특정 역할을 수행하며, 서로 연계되어 애플리케이션의 동작을 구성하게 된다!