본문 바로가기
Programming

Nest.js TypeORM 2.0에서 3.0으로

by 개발자 염상진 2022. 10. 14.

Nest.js에서는 built-in ORM으로 TypeORM을 사용합니다. 하지만 typeorm 2.0에서 3.0으로 업그레이드 되면서 대규모 코드 변경이 진행되었습니다. 

대표적으로 Repository의 주입성을 관리해주는 @EntityRepository()가 deprecated됩니다. 이 문제를 해결하기 위해 동적 모듈을 생성하고, 자체적으로 데코레이터를 생성하면서 땜빵식으로 해결하는 방법이 Stack Overflow에 떠돌아 다니는데, 적합한 방법은 아닌 것으로 보입니다.

비단 이 문제 뿐만 아니라 import module이 지원이 안된다던지,

[Error] TypeOrmModule Unable to connect to the database. Retrying...

entity 연결이 아예 안되는 문제가 발생합니다.

[Error] ExceptionHandler No repository for "BoardReopsitory" was found. Looks like this entity is not registered in current "default" connection?
RepositoryNotFoundError: No repository for "BoardReopsitory" was found. Looks like this entity is not registered in current "default" connection?

 

심지어 typeorm 버전을 2.x.x대로 내려서 package.json을 다시 구성하면 dependency conflict가 발생합니다. @nestjs/typeorm과 typeorm 모듈간 버전 충돌이 발생하고 있습니다.

 

이 문제들을 접해본 결과 그냥 typeorm 3.0 version을 사용하는게 맞다는 결론에 도달합니다. Nest.js 프로젝트를 최초 시작하면 @nestjs/common @nestjs/core 등 모든 버전이 9.0.0버전으로 맞춰지고 typeorm 최신버전을 설치해도 3.0로 시작됩니다.

Nest.js 공식 홈페이지에 들어가도 기존에 controller => service => Repository로 이어지는 계층간 통신을 사용하지 않는 걸 보면 Nest.js에서도 typeorm 3.0 버전으로 유도하고 있는 상황입니다.

 

 

댓글