[241118 TIL] AI 검증 비즈니스 프로젝트
Soft Delete 적용 - IsDeletedFalse 활용
Soft Delete 수정
✔️ BaseEntity & IsDeletedFalse 활용
- 수정 전 예시
@SQLDelete(sql = "UPDATE p_reviews SET is_deleted = true WHERE id = ?")
@Where(clause = "is_deleted = false")
reviewRepository.deleteById(reviewId);
- 수정 후
public void delete(Long userId) {
this.deletedAt = LocalDateTime.now();
this.deletedBy = userId;
this.isDeleted = true;
}
review.delete(user.getId());
Optional<Review> findByIdAndIsDeletedFalse(UUID id);
List<Review> findAllByUserIdAndIsDeletedFalse(Long userId);
Page<Review> findAllByStoreIdAndIsDeletedFalse(UUID storeId, Pageable pageable);
- @SQLDelete ➡️ BaseEntity 활용
- deleteById ➡️ delete 함수 생성 후 Soft Delete 적용
- @Where ➡️ IsDeletedFalse 활용
Soft Delete 구현
1) 어려웠던 점
- 논리적 삭제 처리: 데이터를 물리적으로 삭제하지 않고 isDeleted 컬럼을 활용해 논리적으로 삭제 상태를 관리하고자 했습니다. 이는 삭제된 데이터 복구와 조회를 가능하게 하지만, 모든 조회 쿼리에 삭제 상태를 고려해야 한다는 어려움이 있었습니다.
- 테이블 간 연관 관계: 테이블 간 연관 관계가 설정된 상태에서, 삭제된 데이터를 제외하고 연관 데이터를 조회하거나 처리하는 데에 복잡함이 있었습니다.
2) 해결 방안
- isDeleted 컬럼 추가
- 각 테이블에 isDeleted컬럼을 추가하여 논리적 삭제 여부를 관리했습니다.
- 삭제 시 데이터를 물리적으로 제거하지 않고, 해당 컬럼 값을 true로 설정하여 삭제 상태를 표시하도록 구현했습니다.
- JPA 메서드 조건 활용
- JPA의 Spring Data 메서드 쿼리를 활용하여, isDeleted가 false인 데이터만 조회되도록 구현하였습니다.
- 예: findByIdAndIsDeletedFalse
- 연관 데이터 처리
- 연관된 테이블 간 Soft Delete를 고려하여 데이터 무결성을 유지하였습니다.
- 예: 리뷰 평점 계산 시 삭제 상태인 리뷰 데이터를 제외하고 평점을 계산하도록 구현
3) 더 효율적으로 하려면
- 공통 처리 메서드화: Soft delete를 처리하는 로직을 각 엔티티의 서비스에서 반복적으로 작성하기보다, 공통적인 로직을 **AOP(Aspect-Oriented Programming)**나 BaseRepository를 사용 중복을 최소화할 수 있을 것 입니다.
'[내일배움캠프] AI 를 활용한 백엔드 아카데미 심화 과정 > TIL' 카테고리의 다른 글
MA(Monolithic Architecture), MSA(Microservice Architecture), Spring Cloud (1) | 2024.11.20 |
---|---|
AI 검증 비즈니스 프로젝트 마무리 (0) | 2024.11.19 |
EC2 + Docker + Github Action 이용해서 자동 배포 (0) | 2024.11.15 |
[JAVA] StringUtils.hasText - 공백, null 체크 (1) | 2024.11.14 |
[트러블슈팅] 중복된 값이 삽입 시 발생 오류 해결 (1) | 2024.11.13 |