반응형
스파르타 데브캠프를 통해 하루하루 공부한 내용을 정리합니다.
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 |