🗑️ NestJS + Cron로 구현한 휴지통 시스템 개발기
카테고리
프로그래밍/소프트웨어 개발
서브카테고리
웹 개발
대상자
- *NestJS로 백엔드를 개발하는 개발자**
- 난이도: 중급 (Cron 스케줄링 및 데이터 정리 로직 이해 필요)
핵심 요약
- 휴지통 시스템 구현:
isTrashed
플래그와trashedAt
타임스탬프로 삭제된 데이터를 휴지통으로 이동 - Cron 기반 자동 정리:
@Cron(CronExpression.EVERY_DAY_AT_MIDNIGHT)
로 매일 00시에 30일 이상 휴지통에 머문 데이터를softRemove
- 자동 정리 기능: 3일 이상 읽지 않은 링크를
autoTrashUnreadLinks
설정에 따라 자동 휴지통 이동
섹션별 세부 요약
1. 휴지통 시스템 구현
- 삭제 로직:
PATCH /api/links/:id/trash
및PATCH /api/folders/:id/trash
엔드포인트로isTrashed: true
,trashedAt: new Date()
설정 - UI 분리:
isTrashed
상태에 따라 휴지통 전용 뷰 표시 - 영구 삭제: 30일 경과 시
softDelete
처리 (deletedAt
기록)
2. Cron 기반 자동 정리
- Cron 설정:
npm install @nestjs/schedule
설치 후ScheduleModule.forRoot()
등록 - 정리 로직:
trash-cleanup.service.ts
에서@Cron(CronExpression.EVERY_DAY_AT_MIDNIGHT)
로 30일 이상된 데이터 정리 - softRemove 활용:
linkRepo.softRemove(oldLinks)
로 물리 삭제 대신deletedAt
기록
3. 자동 정리 기능 (3일 미리보기)
- 조건:
isRead: false
,createdAt < 3일 전
,autoTrashUnreadLinks: true
- 동작: 3일 이상 읽지 않은 링크를
isTrashed: true
,trashedAt: now
로 자동 이동 - 사용자 피드백: 자동 정리 시 모달로 사용자에게 확인 요청
결론
- Cron 활용 팁:
@Cron(CronExpression.EVERY_DAY_AT_MIDNIGHT)
로 정기 정리 작업 자동화 - 사용자 경험 개선: 30일 유예 기간과 자동 정리 기능으로 실수 삭제 방지 및 보관함 정리 촉진
- 핵심 구현:
softRemove
와isTrashed
플래그를 통해 데이터 정리 및 복구 가능성을 확보함