import { NestFactory } from '@nestjs/core';
import { AppModule } from './app.module';
async function bootstrap() {
// AppModule이라는 모듈을 루트 모듈로 사용하는 Nest.js 어플리케이션 인스턴스를 생성해줘
const app = await NestFactory.create(AppModule);
await app.listen(3000);
}
bootstrap();
import { Module } from '@nestjs/common';
import { AppController } from './app.controller';
import { AppService } from './app.service';
@Module({
imports: [],
controllers: [AppController],
providers: [AppService],
})
export class AppModule {}
🙋♀️ service(only) + provider VS module exports + imports
service(only) + provider | module exports + imports | |
---|---|---|
사용 시점 | 서비스가 특정 모듈 내에서만 사용되고, 다른 모듈에서 사용되지 않을 때 | 여러 모듈에서 공통으로 사용할 때 |
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();
}
}
import { Injectable } from '@nestjs/common';
@Injectable() // <- 난 Inject(주입)될 수 있어! 라고 선언하는 것이에요.
export class AppService {
getHello(): string {
return 'Hello World!';
}
}
this.appService = new AppService();
constructor(private readonly appService: AppService) {}
constructor(private readonly appService: AppService)
- AppService의 인스턴스는 Nest.js의 DI 컨테이너에 의해 생성되고 관리
개발자는 직접 new AppService()와 같이 객체를 생성하거나 관리할 필요가 없다.
코드의 결합도를 낮추고, 유연성과 테스트 용이성을 향상시킨다.