[TIL] NestJS 공부 21일차

정인교·2021년 6월 24일
0

TIL(Today I Learned)

목록 보기
32/67
post-thumbnail

마이그레이션

마이그레이션은 데이터베이스의 기존 데이터는 보존하되, 다른 데이터 모델과 동기화되도록 스키마를 점진적으로 업데이트하는 방법을 제공해준다.
그리고 TypeORM은 마이그레이션을 생성,실행,되돌리기가 가능하게 전용 CLI를 제공한다.

하지만 마이그레이션과 Nest는 다른 개념이고 마이그레이션의 라이프사이클은 TypeORM CLI에 의해 결정된다.

다중 데이터베이스

프로젝트 진행 시 다중 데이터베이스를 사용해야 할 때가 있는데
이것을 모듈을 통해서 할 수 있다.

const defaultOptions = {
  type: 'postgres',
  port: 5432,
  username: 'user',
  password: 'password',
  database: 'db',
  synchronize: true,
};

@Module({
  imports: [
    TypeOrmModule.forRoot({
      ...defaultOptions,
      host: 'user_db_host',
      entities: [User],
    }),
    TypeOrmModule.forRoot({
      ...defaultOptions,
      name: 'albumsConnection',
      host: 'album_db_host',
      entities: [Album],
    }),
  ],
})
export class AppModule {}

UserAlbum을 연결에 가입시키는 코드다.
그리고 TypeOrmModule.forFeature()메서드를 쓰고 @InjectRepository()를 연결해야하는 부분에 사용해주면 된다.

테스트

사용자 정의 제공자를 통해서 mock repository를 만들 수 있다.
등록된 리포지토리는 자동으로 엔티티 클래스의 EntityName이 있는 <EntityName>Repository토큰을 대표한다.
getRepositoryToken()을 이용하여 준비된 토큰을 반환할 수 있다.

@Module({
  providers: [
    UsersService,
    {
      provide: getRepositoryToken(User),
      useValue: mockRepository,
    },
  ],
})
export class UsersModule {}

이제 어느 클래스에서 UserRepository 중 @InjectRepository() 사용을 요청하면 Nest에서는 mock Repositrory를 사용할 것이다.

profile
백엔드 개발자 정인교입니다!

0개의 댓글

관련 채용 정보