[TypeORM] QueryBuilder의 limit 과 take의 차이

개발/TypeORM 2021. 12. 11. 22:00

CreateQueryBuilder를 사용하여 API를 구성하다가 .leftJoin으로 현재 QueryBuilder가 위치한 Entity외에 다른 JOIN Table에서 정보를 가져와서 필터링을 해야하는 경우가 생겼다. 해당 API 실행 계획은 다음과 같았다. 카테고리 스토리 JOIN 테이블에서 스토리 ID로 카테고리 리스트를 찾은 다음, 카테고리 리스트의 ID로 카테고리 스토리 JOIN 테이블를 조회하여 현재 스토리를 제외한 나머지 스토리 리스트를 전달한다. 위의 실행 계획을 createQueryBuilder에 해당 JOIN테이블을 leftJoin하는 방식으로 구현하였는데 .limit(n)을 추가하면, 쿼리가 고장나서 예상과 다른 쿼리를 2번을 날리고 스토리가 2개만 들어있는 Array가 2번 리턴되는 ..

Article Thumbnail
[TypeORM] SubScriber 활용하여 User Role 변경 감지 알림 보내기

개발/TypeORM 2021. 12. 1. 11:45

어드민이 유저의 등급을 일반 유저에서 Prime 혹은 특별 유저로 변경 시, 해당 유저에게 알림이 가야되는 로직을 TypeORM의 SubScriber를 통해 구현하였다. afterUpdate를 사용하여 유저 테이블에 변경이 생기면 이를 감지하여 알림 테이블에 지정된 알림 데이터를 저장하는 방식으로 하였는데 유저가 유저 정보를 수정해도 해당 afterUpdate가 작동하는 문제가 발생하였다. 이 문제를 해결하기 위해서는 유저 테이블의 변경이 생기기 이전의 정보와 변경 이후의 정보의 특정 칼럼을 활용하여 예외처리를 해야하는데 TypeORM의 공식 Subscriber 문서를 찾아보면 따로 존재하는 것 같지 않았는데 TypeORM 깃헙 이슈에서 event.databaseEntity를 통해 변경이전의 정보를 가져..

.ssh/config를 활용하여 ssh 원격 접속하기

개발/AWS 2021. 11. 28. 01:00

기존의 경우, ssh를 통해 AWS 또는 다른 컴퓨터에 접속할 때, 매번 ip 주소를 아래와 같이 입력하였었다. $ ssh "사용자 계정"@"IP 주소" 매번 위와 같이 명령어를 [사용자 계정]@[IP 주소]를 입력하는 것은 번거롭고, IP 주소를 기억해야된다는 단점이 있다. ~/.ssh내에 있는 config 파일에 호스트 이름, IP 주소, 사용자 계정을 등록하고, "$ ssh 호스트 이름" 과 같이 사용하면 위와 같은 불편함을 해소할 수 있다. $ vi ~/.ssh/config vim을 통해 ~/.ssh/config 파일을 아래와 같은 형태로 수정한다. Host "원하는 호스트 이름" HostName "Ip 주소" User "사용자 계정 이름" 저장한 후엔 아래와 같이 ssh 접속을 할 수 있다. $..

[TypeORM] QueryFailedError: column "relation_Id" does not exist

개발/TypeORM 2021. 11. 25. 08:20

아래와 같이 creaeteQueryBuillder를 통해 Join 테이블에서 'storyId' 칼럼의 값만을 가져오는 쿼리를 구성하는데 QueryFailedError: column "storyId" does not exist와 같이 QueryFailed가 발생하였는데 typeorm 깃헙에도 이슈로 남아있다. const likeList = await this.connection .createQueryBuilder(Like, 'like') .where('like.userId = :userId', { userId: user.id }) .select(['storyId']); const filter = await this.repository .createQueryBuilder('story') .where('sto..