Node.js
(Node.js) node-cron 라이브러리
JJeongHyun
2024. 2. 23. 15:17
반응형
● 순서
1. 라이브러리 설치
2. node-cron 설정
3. node-cron 실행 및 적용
1. 라이브러리 설치
npm i -D node-cron
으로 라이브러리를 설치해 준다
npm i -D node-cron
2. node-cron 설정
- 서버가 작동하면서 실행되는
server.ts
라는 최상단 서버파일에 라이브러리를 실행해 준다
import cron from 'node-cron';
cron.schedule('0 0 * * *', () => {
console.log("실행")
});
schedule
메서드를 호출해서 첫 번째 인자에 실행할 주기를 설정할 수 있다- 설정 주기 순 - 초(옵션)/분/시/날짜/월/요일
- 현재 기준은 매일 0시 00분에 실행하는 주기로 설정했다
- 만약 매초 마다 하고 싶다면
* * * * * *
처럼 6개를 설정하면 된다
3. node-cron 실행
- Ex)
- 특정 플랫폼에서 회원탈퇴 기능을 추가
- 회원탈퇴 시 90일 동안 다시 회원가입을 할 수 없으며, 매일 일일이 수동으로 확인하고 회원정보를 지울 수 없다
- 따라서
node-cron
이라는 라이브러리를 사용해 매일 0시 00분에 90일이 지난 회원정보들을 지워버린다
3-1. server.ts
// server.ts
import cron from 'node-cron';
import connectToDB from './utils/connectToDB';
import isWithdrawDB from './utils/withdrawDB';
/*
... 생략 ...
*/
connectToDB(false);
cron.schedule('0 0 * * *', () => isWithdrawDB());
// ... 생략 ...
3-2. withDrawDB
import { Op } from 'sequelize';
import WithdrawDetail from '../../models/withdrawDetail';
import User from '../../models/user';
const KOREA_OFFSET = 9 * 60 * 60 * 1000;
const isWithdrawDB = async () => {
try {
const korNow = new Date(new Date().getTime() + KOREA_OFFSET);
korNow.setDate(korNow.getDate() - 90);
const isExpire = await WithdrawDetail.findAll({
where: {
updatedAt: {
[Op.lt]: korNow,
},
},
attributes: ['id', 'userId'],
});
if (isExpire.length)
isExpire.forEach(async (item) => {
await WithdrawDetail.destroy({ where: { id: item.id } });
await User.destroy({ where: { id: item.userId } });
});
} catch (error) {
console.log(error);
}
};
export default isWithdrawDB;
- 탈퇴내역 테이블에서 90일이 지난 데이터가 있으면 해당하는 유저의 정보와 탈퇴정보들을 삭제한다