typescript+nestjs

nest의 hello world!

인계동ADHD환자 2025. 1. 15. 15:21
728x90
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가 나오기 까지의 과정을 설명함

728x90