[NestJS] - 11. TypeORM Delete, 실제 삭제와 소프트 삭제

2023. 2. 23. 04:26
반응형

바로 이어서 데이터베이스에서 로우를 삭제하고, 선택해보는 것까지 알아보자!

 

 


Delete

 

remove()

▶ products.service.ts

  async remove(id: number): Promise<Product> {
    const product = await this.productRepository.findOne({
      where: { id: id },
    });
    const result = await this.productRepository.remove(product)
    return result
  }
  • remove(삭제할 모델)는 데이터베이스 테이블에서 인수로 전달받은 모델과 일치하는 로우를 삭제한다.
  • 해당 메서드는 삭제한 엔터티 모델을 반환한다.

 

delete()

▶ products.service.ts

  async delete(id: number): Promise<boolean> {
    const result = await this.productRepository.delete({ id: id });
    return result.affected ? true : false; //행이 영향을 받았는지 확인
  }
  • delete(조건 모델)는 데이터베이스 테이블에서 조건에 해당하는 로우를 삭제한다.
  • 해당 메서드는 삭제 성공 여부 객체를 반환한다.

 

 

 


실제 삭제 vs 소프트 삭제

위의 ORM 기능들은 실제로 데이터베이스 테이블상의 로우를 삭제한다. 그렇지만 실무에서 하드하게 삭제하게 되면 사용 히스토리 추적이나 에러 트래킹이 어려워질 수 있다. 따라서 중요도가 떨어지거나, 저장공간 문제 등 필요에 따라서 실제로 삭제하는 경우도 있으나, 소프트 삭제를 주로 사용하게 된다.

 

소프트 삭제는 실제 삭제하는 것이 아닌 deletedAt 타임스탬프를 갱신하는 방식으로, TypeORM에서는 Select 등의 질의 시 deletedAt 여부를 판단하여 자동으로 제외하고 쿼리를 날리는 기능이 있다. 그래서 삭제된 것 처럼 보이나 실제 데이터는 남아있어 히스토리를 추적할 수 있는 것이다.

데이터 복원에도 유리하며, TypeORM에서 원한다면 deletedAt이 있더라도 쿼리 대상에 포함시킬 수도 있다.

 

 

 


SoftDelete

 

softRemove()

▶ products.service.ts

  async remove(id: number): Promise<Product> {
    const result = await this.productRepository.softRemove({id: id});
    return result
  }
  • softRemove(조건 모델)는 데이터베이스 테이블에서 인수로 전달받은 조건과 일치하는 로우를 소프트 삭제한다.
  • 해당 메서드는 삭제한 엔터티 모델을 반환한다.
  • 아래의 softDelete와 달리 PK 조건을 통해서만 삭제 가능하다.

 

softDelete()

▶ products.service.ts

  async delete(id: number): Promise<boolean> {
    const result = await this.productRepository.softDelete({ id: id });
    return result.affected ? true : false; //행이 영향을 받았는지 확인
  }
  • softDelete(조건 모델)는 데이터베이스 테이블에서 조건에 해당하는 로우를 삭제한다.
  • 해당 메서드는 삭제 성공 여부 객체를 반환한다.
  • 위의 softRemove와 달리 다른 조건을 통해서도 삭제 가능하다.

 

 

 


위와 같이 소프트삭제 결과 DELETE문이 실행되는 것이 아닌 UPDATE문이 실행되는 것을 로그상으로 확인할 수 있으며,

타임스탬프가 갱신되었다는 것을 확인할 수 있었다.

 

다음 장에서는 Select에 대해서 포스팅해보겠다.

 

 

 

 

 


해당 강의를 들으면서 학습한 내용을 바탕으로 저만의 프로젝트를 만드는 과정을 기록하여 남기는 것을 목표로 하고 있습니다.

주관적인 생각이 들어가 있을 수 있으므로 혹시 틀린 내용이 있다면 피드백 부탁드립니다.

https://www.inflearn.com/course/%EB%B6%80%ED%8A%B8%EC%BA%A0%ED%94%84-%EB%B0%B1%EC%97%94%EB%93%9C-%EA%B3%A0%EB%86%8D%EC%B6%95-%EC%BD%94%EC%8A%A4/dashboard

 

[인프런x코드캠프] 부트캠프에서 만든 고농축 백엔드 코스 - 인프런 | 강의

코딩과 사랑에 빠져버린 8년차 풀스택 개발자 Captain의 사심이 가득 담긴 커리큘럼이에요. 백엔드의 모든 것을 다 알려주고 싶은 Captain의 마음이 녹아있죠! 이 강의를 듣다보면 '이렇게까지 알려

www.inflearn.com

반응형

BELATED ARTICLES

more