Nest.js를 공부하며 조그만한 프로젝트를 진행하였고, 중간 점검에서 받은 피드백 중 update 로직이 비효율적이라는 지적을 받았다. 이를 수정한 내용을 기록한다.
inventory.entity.ts
: 인벤토리 엔티티는 아래와 같이 작성되었다.inventory.controller.ts
와 inventory.service.ts
inventory
의 속성 값을 바꾸는 도메인이 모두 분리되어 있다.service
를 보면 update
로직에서 코드의 중복이 남발하는 것이 보인다.Body
에서 받은 컬럼값들을 DTO로 포장하고, 수정이 필요해 입력이 들어온 속성들만 값을 변경해보자!UserEtcUpdateDto
: 속성에는 ?
를 붙여 필수가 아니도록 하였다.inventory.controller.ts
와 inventory.service.ts
service
에서는 매개 변수로 받은 DTO로부터 비구조화 할당으로 속성 값들을 저장하고, null
이 아니면 값을 수정하도록 하였다.Body
에 작성한 속성 값만 수정됨을 확인할 수 있다.다만, 이 코드도 비효율적이다.
만약inventory
의 컬럼들이 100개가 넘는다면? DTO의 컬럼도 100개가 될 뿐더러,
null
임을 체크하는 조건문도 100개가 되니 코드의 중복이 엄청나다.→ 따라서 typeORM의 쿼리 빌더를 이용해 작성해보자!
UpdateInventoryDto
에 generateChanges()
추가import { InventoryStatus } from '../inventory-status.enum';
export class UpdateInventoryDto {
status?: InventoryStatus;
description?: string;
manufacturer?: string;
generateChanges(): object {
return {
status: this.status.toString(),
description: this.description,
manufacturer: this.manufacturer,
};
}
}
inventory.service.ts
에서 update
로직을 아래와 같이 수정하였다.if
문으로 null
을 체크하지 않는다.createQueryBuilder()
를 이용해 쿼리 빌더를 생성하고, update
를 시행한다.generateChanges()
메소드로 입력한다.id
를 비교하여, 변경할 인벤토리를 선별한다.execute()
로 변경 로직을 시행한다.아직 한참 부족한 실력인게, 강의 영상에 나오지 않은 방법들을 혼자 해내지 못하는 데에 있어서 많이 느낀다.
물론 급하게 배운 감도 있을지라도, 모르는 게 있을 때 검색을 잘 하는 방법도 꽤나 필요한 능력인 것 같다. 기죽지 말고 열심히 해보자.
잘보고갑니다~