프로젝트를 오랜만에 리팩토링하다보니 typeORM
이 0.3.X로 업그레이드 되면서 사용하던 Repository 어노테이션
이 deprecated
되어 변경해야할 부분이 좀 생겼습니다. 이 외에도 어떤 변경사항이 있는 지 궁금하여 살펴보게 되었습니다.
connection
옵션이 사라지고 DataSource
로 대체되었습니다. 이젠 아래와 같이 변경하여 사용하면 됩니다.
export const dataSource = new DataSource({
// ... options ...
})
// load entities, establish db connection, sync schema, etc.
await dataSource.connect()
이 외에도 사용할 수 있었던 new Connection()
, createConnection()
, getConnectionManager().create()
도 deprecated
되었습니다.
@EntityRepository
가 삭제 되었습니다. 이 부분 때문에 변경해야할 부분이 꽤 있었는데 NestJS
에서와 NodeJS/Express
에서 변경하는 게 조금 다르긴 합니다. 이 부분은 나중에 차차 업로드 해 볼 생각입니다.
<새로운 커스텀 레포지토리 문법>
export const UserRepository = myDataSource.getRepository(UserEntity).extend({
findUsersWithPhotos() {
return this.find({
relations: {
photos: true
}
})
}
})
기존의 find
는 간단한 대신 전체 컬럼을 다 가져오는 불편함이 존재했는데 이제는 select
으로 골라서 가져올 수 있습니다.
userRepository.find({
select: {
id: true,
firstName: true,
lastName: true,
}
})
뿐만 아니라 관계된 테이블의 정보도 따로 뺄 수 있구요.
userRepository.find({
select: {
id: true,
firstName: true,
lastName: true,
photo: {
id: true,
filename: true,
album: {
id: true,
name: true,
}
}
}
})
그 외에도 관계를 nested
하게 작성할 수 있고, order에 대한 변경점도 있으니 자세한 부분은 공식문서에서 확인하실 수 있습니다.
0.3.0
이후에도 현재까지 0.3.11
버전까지 업데이트 됐습니다.
현업에선 ORM
을 안쓰고있다보니 이러한 변경점들을 놓쳤는데 이 기회에 좋은 공부가 되었습니다.