더 이상 tistory 블로그를 운영하지 않습니다. glanceyes.github.io에서 새롭게 시작합니다.

새소식

Back-End

[RepositoryNotFoundError] TypeORM에서 Entity를 찾지 못하는 문제 해결 방법

  • -

TypeORM에서 Entity를 읽어오지 못하는 현상 발생 시 해결 방안

 

 

TypeORM은 RDS(관계형 데이터베이스)의 데이터를 객체와 매핑(mapping)시켜서 데이터를 객체지향적으로 정의하고 관리할 수 있도록 하는 라이브러리이다.

개인적으로 Node.js로 RDS의 스키마를 정의해서 연결할 때 자주 사용한다.

그런데 정의한 Entity를 TypeORM으로 DB와 연결할 때 다음과 같은 문제가 발생할 수 있다.

 

{
	"name": "RepositoryNotFoundError",
	"message": "No repository for [Entity명] was found. Looks like this entity is not registered in current 'default' connection?"
}

 

예를 들어, 사용자(Users)에 관한 Entity를 정의했는데 TypeORM이 이를 찾지 못하는 경우 다음과 같이 Error가 뜰 것이다.

Image 2022-05-16 오후 5.44.33

"message": "No repository for 'Users' was found. Looks like this entity is not registered in current 'default' connection?"

 

TypeORM에서 entities의 경로를 제대로 읽지 못하는 현상으로 보이는 이 오류 때문에 꽤나 고생한 적이 있다.

 

 

DB 연결이 제대로 되었는지부터 확인한다.

 

오류 해결 전에 우선 정말 DB와 제대로 연결되었는지부터 확인하는 게 좋다. 무슨 초보적인 답변이냐고 할 수 있는데, 정말 중요한 점검사항이다.

이상하게 DB connection이 끊겼다고 뜨지 않고 entity를 못 가져온다고 Error가 떠서 괜히 entities 설정 문제인 줄 알고 며칠을 덤벼들었다가 큰 코 다쳤다... 😭

혹여 AWS CodeDeploy 배포 과정에서 이 오류가 뜨는 경우는 맨 아래 참조.

 

 

ormconfig.ts 또는 ormconfig.jsonentities 필드 수정하기

 

해결 방법은 대체로 아래 링크에 다 나와있는 것 같다.

https://github.com/typeorm/typeorm/issues/3017

 

Error: RepositoryNotFoundError: No repository for [Enitity] was found. Looks like this entity is not registered in current "defa

Issue type: [x] question [x] bug report [ ] feature request [ ] documentation issue Database system/driver: [ ] cordova [ ] mongodb [ ] mssql [x] mysql / mariadb [ ] oracle [ ] postgres [ ] sqlite ...

github.com

 

위 링크에서 나온 방법들을 정리하면 다음과 같다.

방법을 하나씩 실행해보고, 안되면 그 다음 걸 구현해보자.

 

  1. entities: ["{src,dist}/database/entity/**/*{.ts,.js}"]
  2. entities: [__dirname + "/{src,dist}/database/entity/**/*{.ts,.js}"]
  3. entities: [${process.env.NODE_ENV === 'development' ? 'src/' : 'dist/'}database/entity/**/*{.js,.ts}]

 

즉, ts-node 또는 tsc해서 TypeScript를 Javascript로 트랜스파일해도 정의한 entities 파일을 읽을 수 있도록 해야 하고, 위치한 root 디렉토리를 잘 인식하지 못한다면 2번의 방법처럼 __dirname을 앞에 붙인다.

개발 환경과 배포 환경에서 인식하는 것을 다르게 명시적으로 지정하려면 3번처럼 한다.

 

 

아래는 혹시나 안 된다면 시도해볼 만한 사항이다.

문제 해결에 직접 도움이 된다고 말하긴 그렇지만, 현업자분들께 질문을 드리면서 얻었던 피드백이다.

 

 

tsconfig.jsoninclude 필드 고치기

 

include": ["src/**/*"]"include": ["src/**/*", "dist/**/*"]

 

 

Local에서는 되는데 AWS CodeDeploy 배포 시에만 문제가 된다?

 

이 원인인지 모르고 뻘짓을 거하게 했다... 🥵

위의 오류가 뜨는데 혹시 DB 연결을 할 때 환경변수를 사용한다면? 의심해 볼 만한 사항이다.

AWS CodeDeploy에서는 배포할 때 ~/.bashrc에서 정의한 환경변수를 읽어오지 못한다.

그래서 Entity 파일 경로 설정 문제가 아니라 shell에서 사전에 정의한 환경변수를 쓰지 못하는 것이다.

 

/etc/.profile.d/codedeploy.sh에 환경변수를 등록하면 된다는데, 예전 방법인 건지 적용이 안 된다.

그래서 AWS parameter store에서 직접 파라미터를 등록하고 이를 배포할 때 가져오는 방법으로 해결했다.

 

이에 관한 자세한 내용은 다음 포스팅에서 설명하고자 한다.

https://glanceyes.tistory.com/entry/AWS-CodeDeploy로-배포할-때-환경변수-사용하는-방법-Parameter-Store

 

AWS CodeDeploy로 배포할 때 환경변수 사용하는 방법, Parameter Store

AWS CodeDeploy 배포 과정에서 사전에 정의한 환경변수 사용하기 AWS CodeDeploy에서는 코드를 배포할 때 ~/.bashrc 에서 정의한 환경변수를 쓸 수 없다. 그래서 배포 시 로컬에서 기대한 것과 달리 오류가

glanceyes.tistory.com

 

Contents

글 주소를 복사했습니다

부족한 글 끝까지 읽어주셔서 감사합니다.
보충할 내용이 있으면 언제든지 댓글 남겨주세요.