회원 탈퇴시로 부터 3개월 지나면 db에서 제거 하는 로직 구현 node-cron을 사용함
const cron = require('node-cron');
const dayjs = require('dayjs');
const task = cron.schedule(
'* * * * * *',
async () => {
try {
const user = await User.findAll({
where: {
deletedAt: {
[Op.ne]: null, //not null ( !null 값을 뽑아옴)
},
},
});
for (let i = 0; i < user.length; i++) {
const stopdate = dayjs(user[i].deletedAt);
// db안에 저장되있는 회원 탈퇴시 시간
const startdate = dayjs(new Date());
// 현재 시간
if (
// 현재 시간 === db안에 삭제되어 있는시간에 3달이 더한 값이 일치 할때
startdate.format('YYYY-MM-DD HH:mm:ss') ===
stopdate.add(3, 'M').format('YYYY-MM-DD HH:mm:ss')
) {
await User.destroy({ where: { userId: user[i].userId } });
// db안에서 삭제 하는 스케줄 작성
}
return true;
}
} catch (error) {
console.log(error);
}
},
{
scheduled: false,
}
);
task.start();
1초마다 서버에 요청을 보내서 삭제하는 록직을 구현, 이렇게 로직을 짜고나니 서버에 과부화 오지 않겠냐는 피드백을 받아서
const task = cron.schedule(
'* 0 * * *', // 수정
async () => {
try {
const user = await User.findAll({
where: {
deletedAt: {
[Op.ne]: null,
},
},
});
for (let i = 0; i < user.length; i++) {
const stopdate = dayjs(user[i].deletedAt);
const startdate = dayjs(new Date());
if (
startdate.format('YYYY-MM-DD HH:mm:ss') > // 수정
stopdate.add(3, 'M').format('YYYY-MM-DD HH:mm:ss')
) {
await User.destroy({ where: { userId: user[i].userId } });
}
return true;
}
} catch (error) {
console.log(error);
}
},
{
scheduled: false,
}
);
task.start();
수정 부분을 매일 00:00(12시) 기준으로 3개월 지난 회원을 일괄적으로 하루에 한번 삭제 하는 로직으로 변경했다