[Spring] 인터넷 강의 클론 4 - Soft Delete방식 사용하기

춤인형의 개발일지·2025년 2월 20일

Spring실습

목록 보기
31/40

강의 삭제

  1. 강의 Entity에 deleted를 추가하고, fasle로 지정을 해놓는다.
    private boolean deleted = false;
    왜냐하면 처음 강의가 생성될 때, delete가 true이게 되면 안보이기 때문이다.
  2. 그리고 삭제가 되었다면 deleteBy라는 함수를 호출해 true로 변경해준다.
public void deleteBy(){
        this.deleted=true;
    }

이 함수를 아래처럼 호출해준다.

public void delete(Long lectureId) {
        Lecture lecture = lectureRepository.findById(lectureId)
                .orElseThrow(() -> new NoSuchElementException("찾는 강의가 없습니다."));

        lecture.deleteBy();
        lectureRepository.save(lecture);
    }

그럼, 조회, 수정할 때도 삭제되지 않은 것만 보여주게 하고 싶다.

❓쿼리 method vs 쿼리 dsl
둘다 구현은 가능하지만, 어떤게 더 좋은가?

  • 조건이 길어질 수록 쿼리dsl을 사용하는게 좋지만, 간단한 조건들은 쿼리 method 을 사용해도 좋다!

현재 요구사항으로 봤을 때,
➡ 삭제되지 않은 ID만 찾는다면, "쿼리 메서드"가 더 간단하고 유지보수하기 쉬움.
➡ 조건이 많아질 경우에는 QueryDSL이 더 유연하게 확장 가능함.

그래서 쿼리method로 작성했다.
Optional<Lecture> findByIdAndDeletedFalse(Long id);

이걸 토대로

Lecture lecture = lectureRepository.findByIdAndDeletedFalse(lectureId)
                .orElseThrow(() -> new NoSuchElementException("강의가 존재하지 않습니다."));

로 삭제되지 않은 강의를 보내주면 된다.

이렇게 작성해주면 삭제된 강의는 조회, 수정 등등에서 다 사용할 수 있게 된다.

0개의 댓글