최적화 이유

30일 이전의 데이터를 삭제하기 위해 구현된 스케줄링 코드에서는 매일 정각 00시 05분에 사용자 기록 데이터를 삭제합니다.

사용자가 게시글, 댓글, 투표, 좋아요 기능을 이용했다면 사용자 기록 데이터는 사용자 별 하나의 데이터를 가지게 됩니다.

즉, 사용자가 100명일 경우 게시글, 댓글, 투표, 좋아요 등 하나의 기능을 이용했다면 최대 100개의 데이터를 삭제해야합니다.

이처럼 매일 정각 00시 05분에는 대량의 데이터를 삭제하게 됩니다.

기존 코드

@Scheduled(cron = "0 5 0 * * *")
public void findByUser() {

    LocalDateTime localDateTime = LocalDateTime.of(LocalDate.now(), LocalTime.of(0, 0)).minusDays(29);
    
    List<UserHistory> userHistories = userHistoryRepository.findByActionDateTimeBefore(localDateTime);
    
    userHistories.stream().forEach(e -> System.out.println(e.getActionDateTime()));
    
    userHistoryRepository.deleteAllById(userHistories.stream().map(e -> e.getId()).toList());
}

변경 코드

@Scheduled(cron = "0 5 0 * * *")
public void findByUser() {

    LocalDateTime localDateTime = LocalDateTime.of(LocalDate.now(), LocalTime.of(0, 0)).minusDays(29);

    userHistoryRepository.deleteAllByActionDateTimeBefore(localDateTime);
}

설명

기존 코드

변경 코드