본문 바로가기
개발/nest.js

[nestjs] nestjs : typeorm : 데이터베이스 연동

by 아크투어 2023. 8. 21.
반응형

nestjs config 설정

"nestjs typeorm3 postgresql 연동"

 

nestjs typeorm 개념

TypeORM은 TypeScript와 JavaScript를 위한 ORM(Object-Relational Mapping) 라이브러리 이다.
데이터베이스 레코드를 일반 TypeScript 오브젝트인 것처럼 작업할 수 있도록 하여 관계형 데이터베이스와의 상호 작용을 단순화합니다.

 

nestjs typeorm 설치

아래와 같이 typeorm 모듈과 pg 모듈을 설치한다.

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

 

Tip!

설치시 반응이 없거나 아래 이미지와 같은 오류가 발생한다면 아래 내용을 확인바란다.

인터넷이 KT망일경우 현재까지 ts-jest가 설치되지 않는다. registry의 미러서버를 변경해야 한다.

nestjs npm 502 Bad Gateway
nestjs npm 502 Bad Gateway

방법1번

# npm 캐시 clean
npm cache clean --force

# registry 정보를 아래정보로 변경
npm config set registry https://registry.npmjs.org/

 

방법2번

# npm 캐시 clean
npm cache clean --force

# registry 정보를 아래정보로 변경
npm config set registry https://registry.npmjs.cf/

#프로젝트 생성
nest new ./  
or
nest new 프로젝트명

# postgresql 관련패키지 설치후 아래 registry 주소로 재변경
npm config set registry https://registry.npmjs.org/

 

nestjs typeorm postgresql 연동

1.폴더구조

nestjs typeorm 폴더구조
nestjs typeorm 폴더구조

 

2. 소스코드정보

src > config > database > typeorm.config.ts

 

import { ConfigModule, ConfigService } from '@nestjs/config';
import {
  TypeOrmModuleAsyncOptions,
  TypeOrmModuleOptions,
} from '@nestjs/typeorm';

export default class TypeOrmConfig {
  static getOrmConfig(configService: ConfigService): TypeOrmModuleOptions {
    return {
      type: configService.get<any>('db.postgres.type'),
      host: configService.get<string>('db.postgres.host') || 'localhost',
      port: configService.get<number>('db.postgres.port') || 5432,
      username: configService.get<string>('db.postgres.username'),
      password: configService.get<string>('db.postgres.password'),
      database: configService.get<string>('db.postgres.database'),
      //entities: [User],
      migrations: ['src/config/database/migrations/*.ts'],
      migrationsTableName: 'migrations',
      synchronize:
        configService.get<boolean>('db.postgres.synchronize') || false,
      logging: true,
    };
  }
}

export const typeOrmConfigAsync: TypeOrmModuleAsyncOptions = {
  imports: [ConfigModule],
  useFactory: async (
    configService: ConfigService,
  ): Promise<TypeOrmModuleOptions> => TypeOrmConfig.getOrmConfig(configService),
  inject: [ConfigService],
};

 

src > config > profile > dev.yaml

server:
  port: 3001
  url: '서버주소'

db:
  postgres:
    type: 'postgres'
    host: '서버주소'
    port: 5432
    username: '아이디'
    password: '비밀번호'
    database: '스키마명'
    synchronize: false

 

src > config > profile > prod.yaml

server:
  port: 3000
  url: '서버주소'

db:
  postgres:
    type: 'postgres'
    host: '서버주소'
    port: 5432
    username: '아이디'
    password: '비밀번호'
    database: '스키마명'
    synchronize: false

 

src > app.module.ts

import { Module } from '@nestjs/common';
import { ConfigModule } from '@nestjs/config';
import { TypeOrmModule } from '@nestjs/typeorm';
import { typeOrmConfigAsync } from './config/database/typeorm.config';
import configuration from './config/profile/profile.config';

@Module({
  imports: [
    ConfigModule.forRoot({ load: [configuration] }),
    TypeOrmModule.forRootAsync(typeOrmConfigAsync),
  ],
})
export class AppModule {}

 

npm run start:dev 명령어로 실행하면 아래와 같이 실행된다.

nestjs typeorm postgresql
nestjs typeorm postgresql

 

3. 프로젝트생성 및 yaml 설정

nestjs-cli를 통하여 프로젝트를 생성하고 configuration 설정하기위한 소스는 아래 글에 작성되어 있다.
프로젝트 폴더구조및 전체소스정보가 필요하다면 아래 포스팅을 참고바란다.

https://arckwon.tistory.com/entry/nestjs-nestjs-typeorm-configuration-%EC%84%A4%EC%A0%95

 

[nestjs] nestjs : typeorm : configuration 설정

nestjs config 설정 "nestjs configuration yaml 사용" nestjs configuration nestjs의 configuration는 쉽게말해서 개발환경과 운영환경 분리를 위한 것이다. 흔히 Spring에서 profile 서버스 같은것이다. local, dev, prod 처럼

arckwon.tistory.com

 

반응형