본문 바로가기

nodejs

typeorm multiple database

ormconfig.json 파일로 다중 디비 설정을 하자 !

📢 ormconfig.json 파일 작성

[
  {
    "name": "default",  // 반드시 하나의 db name 이 default 여야 한다!!!
    "type": "postgres",
    "host" : "127.0.0.1",
    "post" : 5432,
    "username" : "username",
    "password" : "password",
    "database" : "db_01",
    "entities": [
      "dist/**/*.entity.js"
    ]
  },
  {
    "name": "db_02",
    "type": "postgres",
    "host" : "127.0.0.1",
    "post" : 5432,
    "username" : "username",
    "password" : "password",
    "database" : "db_02",
    "entities": [
      "dist/**/*.entity.js"
    ]
  }
  ...
]

하나의 db name을 'default'로 해주는 것 외에는 각자에 맞는 속성을 부여해 주면 된다.

📢 app.module.ts 에 반영

@Module({
  imports: [
    TypeOrmModule.forRoot(),
    TypeOrmModule.forRoot({ 
    	name: 'db_02',
        type :'postgres',
        host : '',
        ...
    }),
  ],
})

이런 식으로 ormconfig.json 파일에 지정한 name을 통해 db 내용을 전달한다.

이때 이유를 모르겠으나, default가 아닌 db의 정보는 ormconfig.json에서 읽어오지를 않았다. 

그래서 직접 작성해줬다.  (forRootAsync로 하면 될려나?)

📢 application module 에 적용

// module
@Module({
  imports: [TypeOrmModule.forFeature([User, Board], 'db_02')],
  
// service
@Injectable()
export class MallService {
  constructor(
    @InjectRepository(User, 'db_02')
    private userRepository: Repository<User>,
  ) {}
    ...

그리고 default가 아닌 db에 있는 테이블의 entity에 접근할때는 이렇게 connect name 을 명시해 줘야 한다.

 

 

 

수많은 삽질을 하다가, 이 글에서 해답을 찾았당..
https://stackoverflow.com/questions/51994541/nestjs-typeorm-use-two-or-more-databases

 

📢 + 다른 경로의 json파일 적용하기

적용할 json 파일을 직접 적용할 수도 있다.

// ormconfig.ts
module.exports = require(적용할 파일 위치);

 

package.json 파일과 같은 위치에 ormconfig.ts 이름의 파일로 다음처럼 적용하고자 하는 json 파일을 불러오면 된다.

나의 경우, 사용하는 db가 여러개였고, dev,qa,prod 별로 내용이 달랐으며, 이 경우 이렇게 처리했다.

 

// ormconfig.ts
const node_env = process.env.NODE_ENV.trim();
module.exports = require(`./src/config/${node_env}/ormconfig.json`);

 

📢 master/slave 설정

type:'postgresql',
replication: {
  master: {
    "host" : "127.0.0.1",
    "post" : 5432,
    "username" : "username",
    "password" : "password",
    "database" : "db_01"
  },
  slaves: [{
    "host" : "127.0.0.2",
    "post" : 5432,
    "username" : "username",
    "password" : "password",
    "database" : "db_01"
  }],
},
...



반응형

'nodejs' 카테고리의 다른 글

또 사용할것 같은 custom 함수들  (0) 2022.12.07
redis connect  (0) 2022.06.09
typescript 꿀팁  (0) 2022.03.03
typeorm repository 뿌수기  (0) 2022.02.15
aws s3 endpoint 적용기  (0) 2022.02.04