패스트캠퍼스 환급챌린지 34일차 : 코드팩토리의 백엔드 아카데미 : 한 번에 끝내는 NestJS 패키지 - 기초부터 MSA까지 강의 후기
***본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성하였습니다
type orm을 사용하기 위해, 터미널에 명령어를 입력하여 설치하겠다.
pnpm i @nestjs/config joi @nestjs/typeorm typeorm pg
app.moudle.ts 변경사항과 이유
app.moudle.ts 파일을 아래처럼 변경한 이유를 알려줘
import { Module } from '@nestjs/common';
import { AppController } from './app.controller';
import { AppService } from './app.service';
import { MovieModule } from './movie/movie.module';
import { TypeOrmModule } from '@nestjs/typeorm';
import { ConfigModule } from '@nestjs/config';
@Module({
imports: [
ConfigModule.forRoot(),
TypeOrmModule.forRoot({
type : process.env.DB_TYPE as "postgres",
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 : [],
synchronize : true,
}),
MovieModule],
controllers: [AppController],
providers: [AppService],
})
export class AppModule {}
NestJS 애플리케이션에 데이터베이스 연동 (TypeORM) 및 환경 변수 관리 (ConfigModule) 기능을 추가하기 위함입니다. 각 변경 사항의 구체적인 이유는 다음과 같습니다.
1. import { TypeOrmModule } from '@nestjs/typeorm'; 추가:
- 이유: NestJS에서 데이터베이스와 상호작용하기 위해 공식적으로 지원하는 TypeORM 모듈을 사용하기 위함입니다. TypeORM은 다양한 관계형 데이터베이스를 ORM(Object-Relational Mapping) 방식으로 쉽게 다룰 수 있도록 해줍니다.
2. import { ConfigModule } from '@nestjs/config'; 추가:
- 이유: 애플리케이션의 환경 설정 (예: 데이터베이스 연결 정보, API 키 등)을 외부 파일이나 환경 변수를 통해 관리하고 NestJS 애플리케이션 내에서 쉽게 접근할 수 있도록 해주는 @nestjs/config 모듈을 사용하기 위함입니다. 이를 통해 설정 정보를 코드에 직접 하드코딩하는 것을 방지하고, 배포 환경별로 유연하게 설정을 관리할 수 있습니다.
3. imports: [...] 배열 내 변경 사항:
- ConfigModule.forRoot() 추가:
- 이유: @nestjs/config 모듈을 전역적으로 사용하기 위해 forRoot() 메서드를 호출하여 설정합니다. 이를 통해 애플리케이션 전체에서 환경 변수를 주입받아 사용할 수 있게 됩니다.
- TypeOrmModule.forRoot({...}) 추가:
- 이유: TypeORM을 사용하여 데이터베이스 연결을 설정하고 NestJS 애플리케이션과 통합하기 위함입니다. forRoot() 메서드 내의 객체는 데이터베이스 연결에 필요한 설정 정보들을 담고 있습니다.
- type: process.env.DB_TYPE as "postgres": 사용할 데이터베이스의 종류를 환경 변수 DB_TYPE에서 읽어와 설정합니다. 여기서는 "postgres"로 명시적으로 타입 캐스팅했습니다.
- host: process.env.DB_HOST: 데이터베이스 서버의 호스트 주소를 환경 변수 DB_HOST에서 읽어옵니다.
- port: parseInt("process.env.DB_PORT"): 데이터베이스 서버의 포트 번호를 환경 변수 DB_PORT에서 읽어와 정수형으로 변환하여 설정합니다.
- username: process.env.DB_USERNAME: 데이터베이스 접근 사용자 이름을 환경 변수 DB_USERNAME에서 읽어옵니다.
- password: process.env.DB_PASSWORD: 데이터베이스 접근 비밀번호를 환경 변수 DB_PASSWORD에서 읽어옵니다.
- database: process.env.DB_DATABASE: 사용할 데이터베이스 이름을 환경 변수 DB_DATABASE에서 읽어옵니다.
- entities: []: TypeORM이 관리할 엔티티(데이터베이스 테이블과 매핑되는 클래스)들을 정의하는 배열입니다. 현재는 비어 있지만, 데이터베이스 테이블과 상호작용하는 모델 클래스를 여기에 추가해야 합니다.
- synchronize: true: 개발 환경에서 데이터베이스 스키마를 자동으로 생성하거나 업데이트할지 여부를 설정합니다. 주의: 프로덕션 환경에서는 데이터 손실의 위험이 있으므로 false로 설정하는 것이 일반적입니다.
- 이유: TypeORM을 사용하여 데이터베이스 연결을 설정하고 NestJS 애플리케이션과 통합하기 위함입니다. forRoot() 메서드 내의 객체는 데이터베이스 연결에 필요한 설정 정보들을 담고 있습니다.
요약하자면, 위와 같은 app.module.ts 파일의 변경은 NestJS 애플리케이션이 다음과 같은 기능을 갖도록 하기 위함입니다.
- 데이터베이스 연동: TypeORM을 통해 PostgreSQL 데이터베이스와 연결하고 데이터를 저장하고 조회할 수 있습니다.
- 환경 변수 관리: dotenv와 같은 라이브러리를 사용하여 .env 파일 등에 정의된 환경 변수를 읽어와 애플리케이션 설정에 활용할 수 있습니다. 이를 통해 중요한 설정 정보를 코드에서 분리하고, 배포 환경별로 다른 설정을 적용할 수 있습니다.
따라서 이 변경 사항은 NestJS 애플리케이션이 데이터베이스를 사용하고 환경 설정에 따라 유연하게 동작하도록 기본적인 토대를 마련하는 중요한 단계라고 볼 수 있습니다. 이후에는 entities 배열에 데이터베이스 테이블과 매핑될 엔티티 클래스를 추가하고, MovieModule과 같은 다른 모듈에서 TypeORM을 사용하여 데이터베이스와 상호작용하는 로직을 구현하게 될 것입니다.
#패스트캠퍼스 #직장인자기계발 #직장인공부 #환급챌린지 #패스트캠퍼스후기 #오공완
https://bit.ly/4hTSJNB