Application
💡DemoApplication.java
feat: 문서 휴지통 자동 삭제 기능 추가 by hellonaeunkim · Pull Request #43 · jho951/Block-server
📝 Part (해당되는 것만 체크) BE FE Infra Docs Test #️⃣ 연관된 이슈 closes #41 🔎 작업 내용 1. 주요 변경 사항 요약 기존 문서 삭제 API를 soft delete에서 hard delete로 변경 문서를 휴지통으로 보내는 별
github.com
- Code
package com.documents;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.scheduling.annotation.EnableScheduling;
@SpringBootApplication
@EnableScheduling
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}
💡코드 해석
- @EnableScheduling
- Spring에서 @Scheduled가 붙은 메서드를 찾아서 주기적으로 실행하도록 켜는 설정
- Spring이 애플리케이션 시작 시 스케줄링 기능을 활성화하고, 예를 들어 아래 나오는 DocumentTrashPurgeScheduler.java 같은 Spring Bean 안의 @Scheduled 메서드를 등록해서 실행한다.
참고 자료
- Spring Javadoc : @EnableScheduling
Schedular
💡DocumentTrashPurgeScheduler.java
feat: 문서 휴지통 자동 삭제 기능 추가 by hellonaeunkim · Pull Request #43 · jho951/Block-server
📝 Part (해당되는 것만 체크) BE FE Infra Docs Test #️⃣ 연관된 이슈 closes #41 🔎 작업 내용 1. 주요 변경 사항 요약 기존 문서 삭제 API를 soft delete에서 hard delete로 변경 문서를 휴지통으로 보내는 별
github.com
- Code
package com.documents;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import com.documents.service.DocumentService;
import lombok.RequiredArgsConstructor;
@Component
@RequiredArgsConstructor
public class DocumentTrashPurgeScheduler {
private final DocumentService documentService;
@Scheduled(fixedDelay = 60000)
public void purgeExpiredTrash() {
documentService.purgeExpiredTrash();
}
}
💡코드 해석
- 이 클래스는 휴지통에 들어간 문서 중 만료된 문서를 주기적으로 정리하는 스케줄러 역할을 한다.
- Spring의 @Scheduled를 이용해서 일정 주기마다 휴지통 만료 문서를 자동 삭제하도록 만든 배치성 컴포넌트이다.
- 실행될 때 직접 삭제 로직을 구현하지 않고 documentService.purgeExpiredTrash()를 호출함
- 즉, 스케줄링 책임과 비즈니스 삭제 책임을 분리한 구조
💡코드 설명
- @Component : Spring이 관리하는 Bean
- @Scheduled(fixedDelay = 60000)
- 이전 실행이 끝난 뒤 60초 후 다시 실행
💡클래스를 따로 둔 이유
- 스케줄링은 실행 트리거 역할, 실제 정책 판단과 DB 삭제는 서비스 계층 역할로 구분하여 구현
- 이렇게 분리하면 테스트가 쉬워진다. 즉, 서비스는 스케줄러 없이도 단위 테스트가 가능해진다.
- 나중에 수동 실행(휴지통 비즈니스 로직 직접 호출), 관리자 API, 다른 배치 시스템으로 바꿔도 서비스 재사용 가능
💡fixedDelay
- ㅇ
참고 자료
documentService.purgeExpiredTrash()documentService.purgeExpiredTrash()
Service
💡DocumentServiceImpl.java
feat: 문서 휴지통 자동 삭제 기능 추가 by hellonaeunkim · Pull Request #43 · jho951/Block-server
📝 Part (해당되는 것만 체크) BE FE Infra Docs Test #️⃣ 연관된 이슈 closes #41 🔎 작업 내용 1. 주요 변경 사항 요약 기존 문서 삭제 API를 soft delete에서 hard delete로 변경 문서를 휴지통으로 보내는 별
github.com
- Code
@Override
@Transactional
public void purgeExpiredTrash() {
LocalDateTime expiredAt = LocalDateTime.now().minusMinutes(TRASH_RETENTION_MINUTES);
List<Document> expiredTrashRoots = documentRepository.findExpiredTrashRoots(expiredAt);
for (Document expiredTrashRoot : expiredTrashRoots) {
documentRepository.delete(expiredTrashRoot);
}
}
...
private void validateTrashRestoreAvailable(Document document) {
LocalDateTime restoreDeadline = document.getDeletedAt().plusMinutes(TRASH_RESTORE_AVAILABLE_MINUTES);
LocalDateTime restoreDeadline = document.getDeletedAt().plusMinutes(TRASH_RETENTION_MINUTES);
if (!LocalDateTime.now().isBefore(restoreDeadline)) {
throw new BusinessException(BusinessErrorCode.DOCUMENT_NOT_FOUND);
}
}
Repository
💡DocumentRepository.java
feat: 문서 휴지통 자동 삭제 기능 추가 by hellonaeunkim · Pull Request #43 · jho951/Block-server
📝 Part (해당되는 것만 체크) BE FE Infra Docs Test #️⃣ 연관된 이슈 closes #41 🔎 작업 내용 1. 주요 변경 사항 요약 기존 문서 삭제 API를 soft delete에서 hard delete로 변경 문서를 휴지통으로 보내는 별
github.com
- Code
@Query("""
select d
from Document d
left join d.parent p
where d.deletedAt is not null
and d.deletedAt <= :expiredAt
and (
p is null
or p.deletedAt is null
)
order by
d.deletedAt asc,
d.createdAt asc,
d.id asc
""")
List<Document> findExpiredTrashRoots(@Param("expiredAt") LocalDateTime expiredAt);
Github repo
https://github.com/jho951/Block-server/pull/43
feat: 문서 휴지통 자동 삭제 기능 추가 by hellonaeunkim · Pull Request #43 · jho951/Block-server
📝 Part (해당되는 것만 체크) BE FE Infra Docs Test #️⃣ 연관된 이슈 closes #41 🔎 작업 내용 1. 주요 변경 사항 요약 기존 문서 삭제 API를 soft delete에서 hard delete로 변경 문서를 휴지통으로 보내는 별
github.com
'Projects > block-server' 카테고리의 다른 글
| [block-server] 휴지통 자동 삭제 기능 구현 (1) : Spring Scheduling vs Spring Batch (0) | 2026.03.23 |
|---|---|
| [block-server] 프로젝트 구조 (0) | 2026.03.20 |
| [바이브 코딩] MacOS Codex CLI 설치 (0) | 2026.03.17 |
| [바이브 코딩] AGENTS.md 로 코딩 에이전트 활용하기 (0) | 2026.03.16 |