ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 20221229목_공부일지
    > Backend/NestJS 2022. 12. 30. 08:06

    1. 모듈 : 여러 컴포넌트를 조합해  좀 더 큰 작업을 수행할 수 있게 하는 단위. 

       -> NestJS에서는 하나의 루트 모듈이 존재하고, 이 루트 모듈(AppModule)를 다른 모듈로 쪼개서 구성 

       -> 이유: 각기 맡은 바 책임을 나누고 응집도를 높임 => MSA

       -> @Module Decorator 사용

       -> params 설명: imports :  해당 모듈에서 사용하기 위한 provider를 가지고 있는 다른 모듈 가져옴 ,

       -> params 설명: exports :  해당 모듈을 어디에서나 가져다 쓸수 있게 선언

     

    2. 전역 모듈 (Static Module): 공통 기능이나 DB 연결과 같은 전역으로 쓸수 있어야 할 경우 전역 모듈로 선언

       -> @Global decorator로, 선언하고, Root Module에 한번만 등록하여 사용 

     

    3. Module 로 분리 

       -> UserModule > Provider(Service) 에 있던, EmailService 제거 후, EmailModule 생성하고, 해당 모듈에서 사용

       -> UserModule > Controller에서 사용할 예정이기 떄문에, imports 진행 

    import { Module } from '@nestjs/common';
    import { UsersService } from './users.service';
    import { UsersController } from './users.controller';
    import {EmailModule} from "../email/email.module";
    
    @Module({
      imports: [EmailModule],
      controllers: [UsersController],
      providers: [UsersService]
    })
    export class UsersModule {}
    

     

    nest g mo Email 

     

    => EmailModule 는 다른 module (UserModule에서 사용할 예정이기 때문에,  exports )

    import { Module } from '@nestjs/common';
    import {EmailService} from "./email.service";
    @Module({
        providers: [EmailService],
        exports: [EmailService]
    })
    export class EmailModule {}
    

     

     

     

    4. 동적 모듈을 활요한 환경 변수 구성 (p 99 ~)

       => 호스트 모듈 (UserModule && EmailModule) 을 가져다 쓰는 소비모듈에서 호스트 모듈을 생성할 때, 동적으로 어떤한 변수 / 값을 설정해서 사용하는 방식 

     

       1) .env (dotenv) 를 이용한 방식 

           env 파일을 생성해, 해당 파일에 중요 데이터를 설정하고, .gitIgnore 파일에 넣어주기 (중요) 

          => .env 파일은 시크릿 키와 같이 민감한 정보가 저정되는 경우가 많기 떄문

       2) 순서

          => 2-1) npm i --save dotenv

          => 2-1) npm i --save-dev @types/dotenv

          => 각 환경 변수를 .env 확장자를 가진 파일에 저장하고, 서버가 구동될 때이 파일을 읽어 해당 값을 환경 변수로 설정

          => 2-2) .env 파일 생성  (.development.env ) 

          => 2-2)  비슷한 형식으로 stage 및 prod 도 생성할 것

    DATABASE_HOST = local
    GOOGLE_EMAIL = EmailService에서 개인 구글 이메일
    GOOGLE_PW = EmailService에서 개인 구글 비밀번호

     

          => 2-3) package.json 내, start:dev 수정 

     "scripts": {
        "prebuild": "rimraf dist",
        "build": "nest build",
        "format": "prettier --write \"src/**/*.ts\" \"test/**/*.ts\"",
        "start": "nest start",
        "start:dev": "npm run prebuild && NODE_ENV=development nest start --watch",
        ...
       // 생략
      },

     

          => 2-4) main.ts  수정 

     

    import { NestFactory } from '@nestjs/core';
    import { AppModule } from './app.module';
    import * as dotenv from 'dotenv';
    import * as path from 'path';
    
    dotenv.config({
      path: path.resolve(
          (process.env.NODE_ENV === 'production') ? './env/.production.env'
              :(process.env.NODE_ENV === 'stage') ? './env/.stage.env' : './env/.development.env'
      )
    })
    
    // console.log(`ENV CHECK:::: ${ '/Users/heath/Desktop/personal_work/NestJS/NestJS-Book/01.nestjs101/env/.development.env' === path.resolve('./env/.development.env')}` )
    // console.log(`ENV CHECK:::: ${path.resolve('./env/.development.env')}` )
    
    async function bootstrap() {
      const app = await NestFactory.create(AppModule);
      await app.listen(3000);
    }
    bootstrap();

     

     

          => 2-4) AppController 테스트 함수 만들고,  터미널에서  테스트 

    @Get('/hello')
    // 경로중에 / 는 생략할 수 있다.
    getHello(): any {
      console.log('Hello::: ', process.env.DATABASE_HOST)
      // return this.appService.getHello();
      return process.env.DATABASE_HOST
    }

     

    input::: curl -X GET http://localhost:3000/hello                                                                                                                                 

    output:: local%            

     

    '> Backend > NestJS' 카테고리의 다른 글

    230105목_공부일지  (0) 2023.01.05
    230102월_공부일지  (0) 2023.01.02
    221228수_공부일지  (0) 2022.12.29
    20221227화_공부 일지  (0) 2022.12.28
    20221222Thu_공부 일지  (0) 2022.12.23

    댓글

Designed by Tistory.