NestJS + Sequelize-typescript 연동 - Multi DB인 경우

어제에 이어 오늘은 Multi DB인 경우에 대해서 알아봅니다.


database.provider.ts

import { Sequelize } from 'sequelize-typescript';
import { Cat } from '../cats/cat.entity';

export const databaseProviders = [
  {
    provide: 'SEQUELIZE',
    useFactory: async () => {
      const sequelize = new Sequelize({
        dialect: 'mysql',
        host: 'localhost',
        port: 3306,
        username: 'root',
        password: 'password',
        database: 'nest',
      });
      sequelize.addModels([Cat]);
      await sequelize.sync();
      return sequelize;
    },
  },
];

database.module.ts

import { Module } from '@nestjs/common';
import { databaseProviders } from './database.providers';

@Module({
  providers: [...databaseProviders],
  exports: [...databaseProviders],
})
export class DatabaseModule {}

cats.providers.ts

  • cat entity를 하나 구성했다고 치고 cats providers를 만들어 봅니다.
import { Cat } from './cat.entity';

export const catsProviders = [
  {
    provide: 'CATS_REPOSITORY',
    useValue: Cat,
  },
];

cats.service.ts

import { Injectable, Inject } from '@nestjs/common';
import { CreateCatDto } from './dto/create-cat.dto';
import { Cat } from './cat.entity';

@Injectable()
export class CatsService {
  constructor(
    @Inject('CATS_REPOSITORY')
    private catsRepository: typeof Cat
  ) {}

  async findAll(): Promise<Cat[]> {
    return this.catsRepository.findAll<Cat>();
  }
}

cats.module.ts

import { Module } from '@nestjs/common';
import { CatsController } from './cats.controller';
import { CatsService } from './cats.service';
import { catsProviders } from './cats.providers';
import { DatabaseModule } from '../database/database.module';

@Module({
  imports: [DatabaseModule],
  controllers: [CatsController],
  providers: [
    CatsService,
    ...catsProviders,
  ],
})
export class CatsModule {}

위와 같이 구성을 하면 하나의 DB에 붙을 수 있게 되고, database.provider.ts 를 접속 할 여러 DB로 설정을 하고 필요한 곳에서 가져다가 쓰면 여러 DB에 접속 할 수 있는 환경이 갖추어집니다..!!

하나의 프로젝트에 너무 많은 프로그램이 있는게 꼭 좋지만은 않을 수도 있지만, nestjs는 module 단위로 떼어내기가 워낙 쉽기 때문에 만들어 보고 서버에 부하가 되는 경우 떼어내는 방식으로 하면 좋을 것 같네요!!

Authors get paid when people like you upvote their post.
If you enjoyed what you read here, create your account today and start earning FREE STEEM!
Sort Order:  

@happyberrysboy transfered 50 KRWP to @krwp.burn. voting percent : 100.00%, voting power : 20.03%, steem power : 1932269.38, STU KRW : 1200.
@happyberrysboy staking status : 13840 KRWP
@happyberrysboy limit for KRWP voting service : 13.84 KRWP (rate : 0.001)
What you sent : 50 KRWP (Voting Percent over 100 %)
Refund balance : 46.263 KRWP [62106301 - e902ec6f0aec978f15b259e1658b59e6b831b4ba]

image.png