본문 바로가기
Today I Learned/DevCamp

데브캠프 1일차

by 아보_ 2024. 3. 4.
반응형
스파르타 데브캠프를 통해 하루하루 공부한 내용을 정리합니다.

 

NestJS 

 

의존성 주입(Dependency Injection, DI)

의존성 주입(Dependency Injection, DI)은 객체 지향 프로그래밍에서 널리 사용되는 디자인 패턴 중 하나로, 객체가 직접 의존성(다른 객체)을 생성하지 않고, 외부(예: 프레임워크)에서 생성된 의존성을 주입받아 사용하는 방식입니다. NestJS는 이 패턴을 적극적으로 활용하여 모듈 간의 결합도를 낮추고, 유지보수성과 테스트 용이성을 향상시킵니다.

의존성 주입의 장점

  • 낮은 결합도: 객체가 자신의 의존성을 생성하거나 관리하지 않기 때문에, 구성 요소 간의 결합도가 낮아집니다. 이는 코드의 재사용성과 유지보수성을 높여줍니다.
  • 유연성 및 확장성 향상: 의존성을 외부에서 주입받기 때문에, 다른 구현으로 쉽게 교체할 수 있어 애플리케이션의 유연성과 확장성이 향상됩니다.
  • 테스트 용이성: 의존성을 목 객체(mock object)나 스텁(stub)으로 교체할 수 있어, 단위 테스트가 용이해집니다.

예시코드

import { Injectable } from '@nestjs/common';

@Injectable()
export class MessageService {
  getMessage(): string {
    return 'This is a message from the service';
  }
}

 

import { Controller, Get } from '@nestjs/common';
import { MessageService } from './message.service';

@Controller()
export class AppController {
  constructor(private messageService: MessageService) {}

  @Get()
  getMessage(): string {
    return this.messageService.getMessage();
  }
}

 

이렇게 의존성 주입을하여 AppController에서 MessageService를 사용할 수 있습니다.


오늘의 구현내용

ConfigModule을 통해 env파일 불러오기

 

1. 모듈 설치

yarn add @nestjs/config

 

2. app.module imports 추가

import { Module } from '@nestjs/common';
import { AppController } from './app.controller';
import { AppService } from './app.service';
import { ConfigModule } from '@nestjs/config';

@Module({
  imports: [
    ConfigModule.forRoot({
      envFilePath: `.env.${process.env.NODE_ENV}`,
      isGlobal: true,
    }),
  ],
  controllers: [AppController],
  providers: [AppService],
})
export class AppModule {}

 

3. package.json 실행 스크립트 수정

"start:local": "NODE_ENV=local nest start --watch",
"start:prod": "NODE_ENV=production nest start",

 

4. .env.local 파일과 .env.production 파일을 생성 후 작성

  • .env.local에서는 TEST=local
  • .env.production에서는 TEST=prod

5. 테스트

import { Controller, Get } from '@nestjs/common';
import { AppService } from './app.service';
import { ConfigService } from '@nestjs/config';

@Controller()
export class AppController {
  constructor(
    private readonly appService: AppService,
    private configService: ConfigService,
  ) {}

  @Get()
  getHello(): string {
    const test = this.configService.get<string>('TEST');
    console.log(test);
    return this.appService.getHello();
  }
}

 

localhost:3000에 접속하여
yarn start:local 로 서버실행을 하였을땐 console에 local, yarn start:prod 로 서버실행을 하였을땐 console에 prod가 찍히는 것으로 확인하였습니다!!


데이터베이스 연결 구현

 

1. 모듈 설치

yarn add @nestjs/typeorm typeorm mysql2

 

2. app.module imports 추가

import { Module } from '@nestjs/common';
import { AppController } from './app.controller';
import { AppService } from './app.service';
import { ConfigModule } from '@nestjs/config';
import { TypeOrmModule } from '@nestjs/typeorm';

@Module({
  imports: [
    ConfigModule.forRoot({
      envFilePath: `.env.${process.env.NODE_ENV}`,
      isGlobal: true,
    }),
    TypeOrmModule.forRoot({
      type: 'mysql',
      host: process.env.DB_HOST,
      port: parseInt(process.env.DB_PORT),
      username: process.env.DB_USERNAME,
      password: process.env.DB_PASSWORD,
      database: process.env.DB_DATABASE,
      entities: [__dirname + '/**/*.entity{.ts,.js}'],
      synchronize: true,
    }),
  ],
  controllers: [AppController],
  providers: [AppService],
})
export class AppModule {}

 

3. 서버를 실행하여 정상 연결확인

 

 

반응형

'Today I Learned > DevCamp' 카테고리의 다른 글

20240309(토)  (0) 2024.03.10
데브캠프 5일차  (0) 2024.03.09
데브캠프 4일차  (0) 2024.03.08
데브캠프 3일차  (0) 2024.03.07
데브캠프 2일차  (0) 2024.03.05