nest의 hello world!
import { NestFactory } from '@nestjs/core';
import { AppModule } from './app.module';
async function bootstrap() {
const app = await NestFactory.create(AppModule);
await app.listen(process.env.PORT ?? 3000);
}
bootstrap();
시작하면 main.ts가 실행된다
main.ts는 ./app.module에 존재하는 AppModule class를 실행시킨다
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안에는
app.controller와 app.service가 등록이 되어있다
이걸 main.ts에서 이 어플리케이션을 생성하고 await app.listen(3000)으로 실행을 한거다

요청을 서버로 준거다
클라이언트: 브라우저
서버: nest앱
get으로 요청 : app.controller로 보낸건데 컨트롤러를 봐보자
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();
}
}
저기서 get을 받은건데 원래는
@Get('/') 이런식으로 되어있다
근데 또 이 컨트롤로에서 get을 받으면 get은 app.service를 부른다
컨트롤러는 비즈니스 로직을 수행하지 않는다
컨트롤러에 연결된 appService에서 수행한다
app.service로 가보면
import { Injectable } from '@nestjs/common';
@Injectable()
export class AppService {
getHello(): string {
return 'Hello World!';
}
}
얘가 진짜 hello world를 주는 애다
아마 나중에 여기서 데이터들의 객체들을 만들어 퍼나를 것 같음(내 추측임)
@Injectable 데코레이터가 궁금해서 찾아봤다
AppService 클래스에서 이 데코를 선언함으로써 다른 어떤 Nest 컴포넌트에서도 주입할 수 있는 프로바이더(공급자;;)가 됨
별도의 scope를 지정해주지 않으면 일반적인 싱글턴 인스턴스가 생성이된다
번역이 좀 거지같지만

대부분의 사용 사례에 싱글톤 범위를 사용하는 것이 좋다.
소비자와 요청 간에 공급자를 공유한다는 것은 인스턴스를 캐시할 수 있고 초기화가 애플리케이션 시작 중에 한 번만 발생한다는 것을 의미.
근데 머 이것저것 다른 블로그 읽어봤는데 걍 싱글톤 말고는 쓴적이 없다고 한다
그래프큐엘에서 요청별 캐싱, 요청별 추적을 할라면 멀티태넌시가 필요하고 그럴때 쓴다 한다
이상 hello world가 나오기 까지의 과정을 설명함