[Clone Coding] What I Learn 1 : TypeORM 설정 on NestJS

먹보·2023년 1월 26일
0

MUK_BO's Clone Coding

목록 보기
1/7
post-thumbnail

오늘부터 클론 코딩을 시작하였다.

단순한 클론 코딩이 아닌 다음과 같은 방식으로 클론코딩을 진행하려고 한다.

  1. 클론코딩을 하며, 배우게 되는 설정 및 정보 Daily Basis로 공유
  2. 클론코딩을 완성 후, 내 아이템을 접목시켜 수정
  3. 클론코딩을 완성 후, 진행하며 추가 기능을 생각하고 추가

✍ <기술 스택>

  • Programming Language
    TypeScript
  • Framework
    NestJS
  • API 설계
    GraphQL and Apollo
  • Database & Relevant
    PostgresQL & TypeORM

✍ TypeORM Set Up

📝 TypeORM and DataBases (Import 내부 적용)

@Module({
  imports: [
    GraphQLModule.forRoot<ApolloDriverConfig>({
      driver: ApolloDriver,
      autoSchemaFile: true,
    }),
    TypeOrmModule.forRoot({
      type: 'postgres',
      host: 'localhost',
      port: 5432,
      username: 'postgres',
      password: 'password',
      database: 'DatabaseName',
      synchronize: true, //typeorm 데이터베이스를 너의 모듈의 현재 상태로 마이그래이션 한다는 뜻
      logging: true, //database에 무슨 일이 일어나는지 콘솔에 표시
    }),
  ],
  controllers: [],
  providers: [],
})

상기 코드처럼 app.module.ts에 직접 import해주어도 되지만, 비밀번호와 같이 숨기고 싶은 데이터가 있으니 아래와 같이 dotenv 설정을 해주면 된다.

    ConfigModule.forRoot({
      isGlobal: true,
      envFilePath: process.env.NODE_ENV === 'dev' ? '.env.dev' : '.env.test',
      ignoreEnvFile: process.env.NODE_ENV === 'prod',
      validationSchema: Joi.object({
        NODE_ENV: Joi.string().valid('dev', 'prod').required(),
        DB_HOST: Joi.string().required(),
        DB_PORT: Joi.string().required(),
        DB_USERNAME: Joi.string().required(),
        DB_PASSWORD: Joi.string().required(),
        DB_NAME: Joi.string().required(),
      }),
    }),
    TypeOrmModule.forRoot({
      type: 'postgres',
      host: process.env.DB_HOST,
      port: +process.env.DB_PORT,
      username: process.env.DB_USERNAME,
      password: process.env.DB_PASSWORD,
      database: process.env.DB_NAME,
      synchronize: true, //typeorm 데이터베이스를 너의 모듈의 현재 상태로 마이그래이션 한다는 뜻
      logging: true, //database에 무슨 일이 일어나는지 콘솔에 표시
    }),
  • dotenv : 일반적으로 dotenv에 숨기고 싶은 데이터를 여러 두고 config 잡는 방법 (백엔드 DB를 연결한 사람이라면 한 번쯤을 했을 법한 방법)
    => Express라면 dotenv 패키지만을 설치하여 적용하면 되지만 NestJS에서는 @nestjs/config와 같이 dotenv의 상위호환인 패키지를 제공한다.
  • @nestjs/config : NestJS에서 제공하는 configuration module (dotenv위에서 nestjs가 합쳐져서 작용한다)
    - isGlobal : 프로젝트 내 어디서나 모듈에 접근 할 수 있도록 설정
    - envFilePath : 상황에 따른 env 경로 설정
    - ignoreEnvFile : 상황에 따른 env 사용 무시
    - validationSchema : Joi라는 스키마 관리 Node 패키지를 설치 받아 각 각의 dotenv 요소들의 타입 및 필요 여부를 관리 해 줄 수 있다.

추 후에 모듈 형식으로 전환하여 파일 이름만 import에 넣는 것으로 변경하면 그 코드도 공유 할 예정이다.

profile
🍖먹은 만큼 성장하는 개발자👩‍💻

0개의 댓글