전체 글 63

TypeORM - Custom Repository 개선안

이전 내용 사실 이전에 TypeORM이 0.3.x 버전 이상으로 올라가면서 @EntityRepository(User) export class UserRepository extends Repository { async customMethod(userId: number): Promise { ... } } 위와 같이 @EntityRepository() 데코레이터를 사용해서 CustomRepository를 구현하는 것이 불가능해졌었기 때문에 typeORM 0.3 버전 이후의 Custom-repository - hou27 TypeORM - Custom repository(사용자 정의 레포지토리) 데이터 베이스 작업 로직을 작성하던 중 내가 작성한 함수를 typeORM에 정의된 메서드처럼 사용할 수 있는 방법이 있..

Backend/NestJS 2023.05.01

[JS] Call by reference가 없는 Javascript

잘못된 생각 최근까지 javascript는 함수 호출 시 참조형이면 넘길 때도 call by reference로 넘겨지고, 원시형이면 call by value로 넘겨지는 줄 알고 있었다. 그러다 최근 질문이 들어와서 답해주려다 자세히 알아보니, 잘못 알고 있었다는 것을 깨달았다. Call by Value & Call by Reference 우선 흔히 알고 있는 두 가지 개념에 대해 살펴보자 Call by Value 호출자가 실제 매개 변수를 평가하고 그 값을 호출자에게 전달하는 관례 호출자에서 값 매개 변수의 수정 내용은 호출자에서 볼 수 없다. Call by Reference 설명을 좀 줄이자면, 호출자(caller)가 함수에 전달한 실제 매개변수(actual parameter)가 변수일 경우, 컴파일..

Dev 2023.04.23

where 대신 join을 사용하는 경우

최근 아는 개발자 분께 질문을 드리다 여러 데이터를 가져올 때는 where 문보다 join 문의 성능이 더 좋을 수 있다는 것을 알게 되었다. 기존 query 기존에 프로젝트를 진행하면서 특정 유저의 콘텐츠를 조회할 때, 해당 user와 content 테이블은 서로 1 : N의 관계로 연결되어있었기 때문에 user의 id를 where 조건문에 사용하여 content 테이블에 query를 날려 데이터를 조회하고 있었다. 코드의 일부분을 보여주자면 다음과 같다. await this.contents .createQueryBuilder('content') .where('content.userId = :userId', { userId: user.id }) .leftJoinAndSelect('content.cate..

Dev 2023.04.15

NestJS - Provider와 Nest IoC Container

왜 그랬는지는 모르겠지만 Typescript Type Challenge를 하다가 갑자기 Provider에 대한 궁금증이 생겼다. Provider NestJS의 Provider는 Providers are a fundamental concept in Nest. Many of the basic Nest classes may be treated as a provider – services, repositories, factories, helpers, and so on. The main idea of a provider is that it can be injected as a dependency; this means objects can create various relationships with each oth..

Backend/NestJS 2023.03.18

TypeORM - select distinct 이슈

문제 발견 혼자 작업하던 중 팀원과 성능 관련 얘기를 하던게 생각나서 로깅되던 Query문을 자세히 살펴봤는데, 작성한 쿼리보다 많은 쿼리문이 실행되고 있는 것을 발견하게 되었다. TypeORM 의도치 않은 중복 필터링 문제 개선 TypeORM 의도치 않은 중복 필터링 문제 개선 · Issue #168 · Quickchive/quickchive-backend 아래와 같은 코드 동작 시 const { categories } = await this.users.findOneOrFail({ where: { id: user.id }, relations: { categories: true, }, }); 쿼리가 2개 실행되는 현상 발생 메인 쿼리를 중복 필터링 쿼리로 래핑하여 수 github.com N + 1 문제 ..

Backend/NestJS 2023.02.21

TDD - 테스트 범위와 종류

이전 포스트 TDD - 테스트가 가능한 설계 TDD - 테스트가 가능한 설계 이전 포스트 https://hou27.tistory.com/entry/TDD-%EB%8C%80%EC%97%AD TDD - 대역 이전 포스트 https://hou27.tistory.com/entry/TDD-%ED%85%8C%EC%8A%A4%ED%8A%B8-%EC%BD%94%EB%93%9C%EC%9D%98-%EA%B5%AC%EC%84%B1 TDD - 테스트 코드의 구성 이전 포 hou27.tistory.com 실습 환경 - Java 17 - Spring Boot 3.0.1 - wsl 2 테스트 범위 테스트의 목적과 수행하는 사람에 따라 테스트의 범위는 달라진다. 기능 테스트 통합 테스트 단위 테스트 크게 위 3가지로 나눠볼 수 있는..

Study/TDD 2023.02.21

TDD - 테스트가 가능한 설계

이전 포스트 https://hou27.tistory.com/entry/TDD-%EB%8C%80%EC%97%AD TDD - 대역 이전 포스트 https://hou27.tistory.com/entry/TDD-%ED%85%8C%EC%8A%A4%ED%8A%B8-%EC%BD%94%EB%93%9C%EC%9D%98-%EA%B5%AC%EC%84%B1 TDD - 테스트 코드의 구성 이전 포스트 https://hou27.tistory.com/entry/TDD-JUnit-5-%EA%B8%B0%EC%B4%88 TDD - JUnit 5 hou27.tistory.com 실습 환경 - Java 17 - Spring Boot 3.0.1 - wsl 2 테스트가 어려운 코드 개발을 진행하다 보면 테스트할 수 없는 상황이 발생하게 된다...

Study/TDD 2023.02.14

TDD - 테스트 코드의 구성

이전 포스트 https://hou27.tistory.com/entry/TDD-JUnit-5-%EA%B8%B0%EC%B4%88 TDD - JUnit 5 기초 이전 포스트 https://hou27.tistory.com/entry/TDD-TDD-%E2%88%99-%EA%B8%B0%EB%8A%A5-%EB%AA%85%EC%84%B8-%E2%88%99-%EC%84%A4%EA%B3%84 TDD - TDD ∙ 기능 명세 ∙ 설계 이전 포스트 https://hou27.tistory.com/entry/TDD-%ED%85%8C%EC%8A%A4%ED%8A%B8-%E hou27.tistory.com 실습 환경 - Java 17 - Spring Boot 3.0.1 - wsl 2 기능에서의 상황 기능은 상황에 따라 다르게 동작한다..

Study/TDD 2023.02.03

TDD - JUnit 5 기초

이전 포스트 https://hou27.tistory.com/entry/TDD-TDD-%E2%88%99-%EA%B8%B0%EB%8A%A5-%EB%AA%85%EC%84%B8-%E2%88%99-%EC%84%A4%EA%B3%84 TDD - TDD ∙ 기능 명세 ∙ 설계 이전 포스트 https://hou27.tistory.com/entry/TDD-%ED%85%8C%EC%8A%A4%ED%8A%B8-%EC%BD%94%EB%93%9C-%EC%9E%91%EC%84%B1-%EC%88%9C%EC%84%9C TDD - 테스트 코드 작성 순서 이전 포스트 https://hou27.tistory.com/entry/TDD-TDD%EB%9E%80 TDD - TDD(Test- hou27.tistory.com 실습 환경 - Java 1..

Study/TDD 2023.01.25