[TypeORM] 버전 0.3.X 업그레이드로 인한 변경사항

주형(Jureamer)·2022년 12월 23일
2
post-custom-banner

프로젝트를 오랜만에 리팩토링하다보니 typeORM이 0.3.X로 업그레이드 되면서 사용하던 Repository 어노테이션deprecated되어 변경해야할 부분이 좀 생겼습니다. 이 외에도 어떤 변경사항이 있는 지 궁금하여 살펴보게 되었습니다.

Connection -> DataSource

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되었습니다.


Custom Repository 생성 구문 삭제

@EntityRepository가 삭제 되었습니다. 이 부분 때문에 변경해야할 부분이 꽤 있었는데 NestJS에서와 NodeJS/Express에서 변경하는 게 조금 다르긴 합니다. 이 부분은 나중에 차차 업로드 해 볼 생각입니다.

<새로운 커스텀 레포지토리 문법>

export const UserRepository = myDataSource.getRepository(UserEntity).extend({
    findUsersWithPhotos() {
        return this.find({
            relations: {
                photos: true
            }
        })
    }
})

Find 메소드에서 신규 Select 타입 등장

기존의 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을 안쓰고있다보니 이러한 변경점들을 놓쳤는데 이 기회에 좋은 공부가 되었습니다.

profile
작게라도 꾸준히 성장하는게 목표입니다.
post-custom-banner

0개의 댓글