20240126 (금) BackOffice 프로젝트 마무리

2024. 1. 26. 20:04TIL

마무리단계에선 우리조는 HardDelete에서 SoftDelete로 바꿔보기로 했다.

 

HardDelete란?

DeleteMapping 실행시에 쿼리로 delete명령어를 날려서 DB상에서 행이 하나가 완전히 사라지는 것

SoftDelete란?

DeleteMapping 실행시에 행이 완전히 사라지는 것 대신 is_deleted 같은 컬럼을 하나 추가해 true로 변경되는 식으로 데이터는 남아 있지만 조회가 되지 않도록 하는 것

 

일단 우리는 공통적으로 is_deleted 컬럼을 추가해줬고 기본값으로 false를 줬다.

그리고 구현하는 방법으론 2가지를 생각해냈는데,

  1. 직접 코드에서 Entity.isDeleted = true 를 추가해줘서 수동으로 하기
  2. 자동으로 Delete 매핑 이용시에 쿼리문이 update로 날라가게 수정하기

이 중에서 우리는 2번으로 하기로 정하고 튜터님에게 물어본 결과 @SQLDelete 와 @OnDelete 어노테이션을 발견했다.

 

@SQLDelete (대체할 명령어)

delete 쿼리를 날리는 대신에 다른 명령어를 날리도록 수정하는 어노테이션

@OnDelete

상위객체에서 딜리트매핑 수행시에 하위객체에선 어떤식으로 반응을 할지 정하는 어노테이션 

 

결과적으론 어노테이션이 3개가 들어갔다.

@Where(clause = "is_deleted = false")
@SQLDelete(sql = "UPDATE posts SET is_deleted = true WHERE id = ?")
@OnDelete(action = OnDeleteAction.CASCADE)

여기서 Where은 is_deleted가 false 인 것들만 조회하도록 하는 것이다.

 

이후에는 자잘한 오류들을 수정해나가며 완성해갔다.

 

오늘의 한마디 : 우리조는 원래 계획대로는 필수구현을 빠르게 끝내고 남은시간에 추가구현을 하려했지만 생각보다 필수구현쪽에 시간이 많이 소모됐다. 앞으론 조금더 세세한 계획을 세울 필요가 있겠다.