728x90

postgresql 을 사용할 것이고 postgresql 이 설치되어 있따는 가정하에 진행 합니다.

실행 환경은 MAC OS 입니다.

nestjs 에서 typeorm 을 사용하기 위해서 다음과 같이 설치합니다.

 

 

npm i --save @nestjs/typeorm typeorm pg

 

 

 

 

 

 

app.module.ts

import { Module } from '@nestjs/common';
import { ConfigModule } from '@nestjs/config';
import { GraphQLModule } from '@nestjs/graphql';
import { TypeOrmModule } from '@nestjs/typeorm';
import { RestaurantsModule } from './restaurants/restaurants.module';

@Module({
  // Graphql 의 root 모듈을 설정
  imports: [
    ConfigModule.forRoot({
      isGlobal: true,
      envFilePath: process.env.NODE_ENV === 'dev' ? '.env.dev' : '.env.test',
      // production 환경일 때는 configModule이 환경변수 파일을 무시합니다.
      ignoreEnvFile: process.env.NODE_ENV === 'prod',
    }),
    TypeOrmModule.forRoot({
      type: '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_NAME,
      // typeorm 이 db에 연결할때 데이터베이스를 모듈의 현재 상태로 마이그레이션 한다는
      synchronize: true,
      logging: true,
    }),
    RestaurantsModule,
    GraphQLModule.forRoot({
      // autoSchemaFile: join(process.cwd(), 'src/schema.gql'), // 경로에 gql 파일을 생성
      autoSchemaFile: true, // 메모리가 파일을생성하도록 설정
    }),
  ],
  controllers: [],
  providers: [],
})
export class AppModule {}

 

 

 

ConfigModule 과 TypeOrmModule 이 추가되었습니다.

 

 

TypeOrmModule

 

 

TypeOrmModule 의 forRoot 에서 postgres 의 host, port, username 등의 정보를 입력합니다.
synchronize 의 옵션은 typeorm 이 db에 연결할때 데이터베이스를 모듈의 현재 상태로 마이그레이션 한다는 뜻입니다.

product 환경과 dev, test 환경을 각각 구성해주기 위해서 .env 파일을 사용합니다.
Nestjs 에서는 .env 파일 최상위에서 실행되는 nestjs config 를 사용할게요
가상 변수를 설정하기위해 cross-env도 설치합니다.

 

 

npm i --save @nestjs/config
npm i cross-env

 

.env.dev, .env.prod, .env.test 파일을 만든뒤 package.json 으로 이동합니다.

 

 

 

 

"start": "cross-env NODE_ENV=prod nest start",
"start:dev": "cross-env NODE_ENV=dev nest start --watch",

 

 

test 환경은 제외한 product 와 dev 를 설정 입니다.

cross-env 는 MACOS Linux window 에서 모두 돌아가게 하기 위함이고 NODE_ENV는 process.env.NODE_ENV 를 사용하기위한 변수 입니다.

 

 

ConfigModule.forRoot({
      isGlobal: true,
      envFilePath: process.env.NODE_ENV === 'dev' ? '.env.dev' : '.env.test',
      // production 환경일 때는 configModule이 환경변수 파일을 무시합니다.
      ignoreEnvFile: process.env.NODE_ENV === 'prod',
    }),

 

 

그런뒤 ConfigModule 을 셋업 하면 정상적으로 서버가 실행됩니다.

 

 

npm run start:dev

 

 

github 참고

728x90

'Side > uber-eats' 카테고리의 다른 글

Nestjs - User model  (0) 2021.06.01
Nestjs - Typeorm Repository 사용하기  (0) 2021.05.31
NestJs Validating ArgsTypes  (0) 2021.05.23
Nestjs - InputTypes and ArgumentTypes  (0) 2021.05.22
NestJs - Arguments  (0) 2021.05.22