TypeOrm, ConfigService, DBconnect

김종민·2022년 6월 24일
0

Nuber-Server

목록 보기
2/34

들어가기
typeOrm은 DB와 연결 및 통신 하는 언어임,
Nuber에서는 postgres사용할 것입니다.

1. TypeOrm

https://typeorm.io/

https://typeorm.io/supported-platforms
지원되는 Platform

nestJs에서 database연결
https://docs.nestjs.com/techniques/database
https://github.com/typeorm/typeorm

$ npm install --save @nestjs/typeorm typeorm pg

2. Configuration

.env위에 존재하는 설정모듈

https://docs.nestjs.com/techniques/configuration

$ npm i --save @nestjs/config

$ npm i cross-env
=>가상변수를 설정하게 해줌(cross-env NODE_ENV=dev 등등..)

https://www.npmjs.com/package/joi
https://www.npmjs.com/package/@types/joi
$ npm i joi
=>데이터 유효성 검사~

3. app,module.ts

import { ApolloDriver, ApolloDriverConfig } from '@nestjs/apollo';
import * as Joi from 'joi'; ///유효성검사를 위해서 Joi import함~
import { Module } from '@nestjs/common';
import { GraphQLModule } from '@nestjs/graphql';
import { RestaurantModule } from './restaurant/restaurant.module';
import { TypeOrmModule } from '@nestjs/typeorm';  ///TypeOrm사용을 위한 import
import { ConfigModule } from '@nestjs/config';  ///Config사용을 위한 import
import { CommonModule } from './common/common.module';
import { UsersModule } from './users/users.module';
import { User } from './users/entities/user.entity';

@Module({
  imports: [
    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(),
      }),
    }),
     ///ConfingModule 사용을 위한 setting, isGlobal을 true로 하고,
     ///envFilePath와, ignoreEnvFile은 package.json에서 추가로 setting한다.
     ///validationsSchema는 Joi로 유효성검사를 한다, DB들은 .env.dev에 내용임
    
    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,
      logging: true,
      entities: [User],
    }),
    ///DB랑 연결 및 통신하기 위해 TypeOrmModule사용, 여기에 type, host등을
    ///적어도 되지만, .env.dev파일에 기록한다.
    ///synchronize는 사직시, DB를 연결함.
    ///entities는 Model. 나중에, 만드는 Entity를 연결해 줌.
    
    GraphQLModule.forRoot<ApolloDriverConfig>({
      driver: ApolloDriver,
      autoSchemaFile: true,
    }),
    RestaurantModule,
    CommonModule,
    UsersModule,
  ],
  controllers: [],
  providers: [],
})
export class AppModule {}

4. package.json

start, start:dev, start:prod 부분만 참고해서 볼것!!

    "prebuild": "rimraf dist",
    "build": "nest build",
    "format": "prettier --write \"src/**/*.ts\" \"test/**/*.ts\"",
    "start": "cross-env NODE_ENV=prod nest start",
    "start:dev": "cross-env NODE_ENV=dev nest start --watch",
    "start:debug": "nest start --debug --watch",
    "start:prod": "node dist/main",
    "lint": "eslint \"{src,apps,libs,test}/**/*.ts\" --fix",
    "test": "jest",
    "test:watch": "jest --watch",
    "test:cov": "jest --coverage",
    "test:debug": "node --inspect-brk -r tsconfig-paths/register -r ts-node/register node_modules/.bin/jest --runInBand",
    "test:e2e": "jest --config ./test/jest-e2e.json"
  },

5. .env.dev

DB_HOST=localhost
DB_PORT=5432
DB_USERNAME=postgres
DB_PASSWORD=
DB_NAME=nuber-eats

DB연결 내용을 따로 빼서 담아줌,,

!!!이제 Entity를 만들어 주면 자동적으로 DB(postgres)와 연결됨.

profile
코딩하는초딩쌤

0개의 댓글