탈퇴 시 modifiedAt을 update하는 것으로 탈퇴일 저장
BaseEntity에서 modifedAt을 protected로 선언
User의 deleteSoftly 메서드에서 this.moifiedAt = LocalDateTime.now()로 구현
// BaseEntity
@CreatedDate
@Column(updatable = false)
private LocalDateTime createdAt;
@LastModifiedDate
protected LocalDateTime modifiedAt;
// User
public void deleteSoftly() {
this.modifiedAt = LocalDateTime.now();
}
이 방법은 편하지만 자식클래스에서 자유롭게 수정이 가능하여 캡슐화 위반
modifiedAt이 잘못 수정될 위험이 있음
따라서 BaseEntity에 삭제 관련 메서드를 추가하여 변경 로직을 캡슐화
modifiedAt 변경을 제한하여 불필요한 수정 방지
// BaseEntity
@CreatedDate
@Column(updatable = false)
private LocalDateTime createdAt;
@LastModifiedDate
private LocalDateTime modifiedAt;
public void markDeletedAt() {
this.modifiedAt = LocalDateTime.now();
}
// User
public void deleteSoftly() {
markDeletedAt();
}