NestJS + Cron으로 구현한 휴지통 시스템 개발기
AI Store에서 AI코딩으로 만들어진 앱을 만나보세요!
지금 바로 방문하기

🗑️ NestJS + Cron로 구현한 휴지통 시스템 개발기

카테고리

프로그래밍/소프트웨어 개발

서브카테고리

웹 개발

대상자

  • *NestJS로 백엔드를 개발하는 개발자**
  • 난이도: 중급 (Cron 스케줄링 및 데이터 정리 로직 이해 필요)

핵심 요약

  • 휴지통 시스템 구현: isTrashed 플래그와 trashedAt 타임스탬프로 삭제된 데이터를 휴지통으로 이동
  • Cron 기반 자동 정리: @Cron(CronExpression.EVERY_DAY_AT_MIDNIGHT)로 매일 00시에 30일 이상 휴지통에 머문 데이터를 softRemove
  • 자동 정리 기능: 3일 이상 읽지 않은 링크를 autoTrashUnreadLinks 설정에 따라 자동 휴지통 이동

섹션별 세부 요약

1. 휴지통 시스템 구현

  • 삭제 로직: PATCH /api/links/:id/trashPATCH /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일 유예 기간과 자동 정리 기능으로 실수 삭제 방지 및 보관함 정리 촉진
  • 핵심 구현: softRemoveisTrashed 플래그를 통해 데이터 정리 및 복구 가능성을 확보함