ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • nest의 hello world!
    typescript+nestjs 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
Designed by Tistory.