- [Node.js] date-fns 모듈로 크론 작업의 날짜 계산 오류 방지하기2025년 03월 21일 18시 31분 43초에 업로드 된 글입니다.작성자: DandyNow728x90반응형
date-fns 모듈로 크론 작업의 날짜 계산 오류 방지하기
JavaScript에서 날짜와 시간을 다루는 것은 생각보다 까다로운 작업이다. 특히 크론 작업과 같이 자동으로 실행되는 작업에서는 예상치 못한 날짜 계산 오류가 발생할 수 있다.
date-fns
모듈을 사용해야 하는 이유가 여기에 있다.1. 문제 상황: 크론 작업의 월 변경 시 날짜 계산 오류
다음과 같은 크론 작업을 예로 들어보겠다.
const jobSeven = new CronJob("30 31 0 * * *", async function () { // ... const today = new Date(); const year = today.getFullYear(); const month = String(today.getMonth() + 1).padStart(2, "0"); // 월은 0부터 시작하므로 +1 const day = String(today.getDate() - 1).padStart(2, "0"); let query = `?start_date=${year}${month}${day}&end_date=${year}${month}${day}2300`; // ... });
이 크론 작업은 매일 0시 31분 30초에 실행되며, 어제 날짜를 기준으로 데이터를 처리한다. 문제는 월의 첫 번째 날에 이 작업이 실행될 때 발생한다. 예를 들어, 3월 1일에 작업이 실행되면
day
변수는 "00"이 되고, 2월의 마지막 날짜가 아닌 "00"을 사용하게 되어 잘못된 데이터를 처리할 수 있다.2. 해결책: date-fns 모듈 사용
date-fns
모듈의subDays
함수를 사용하면 월 변경 시 날짜 계산 오류를 방지할 수 있다.subDays
함수는 주어진 날짜에서 특정 일 수를 뺀 새로운Date
객체를 반환하며, 월 변경을 자동으로 처리해 준다.const { subDays, format } = require("date-fns"); const jobSeven = new CronJob("30 31 0 * * *", async function () { // ... const yesterday = subDays(new Date(), 1); // 어제 날짜 계산 const formattedDate = format(yesterday, "yyyyMMdd"); // 날짜 포맷팅 const query = `?start_date=${formattedDate}&end_date=${formattedDate}2300`; // ... });
subDays(new Date(), 1)
은 현재 날짜에서 하루를 뺀 날짜를 정확하게 계산해 준다. 따라서 월이 변경되더라도 이전 달의 마지막 날짜를 정확하게 얻을 수 있다. 또한,format
함수를 사용하여 날짜를 원하는 포맷으로 간편하게 변환할 수 있다.3. date-fns 사용시 이점
- 정확성:
date-fns
는 월 변경, 윤년 등 복잡한 날짜 계산을 정확하게 처리하여 오류 발생 가능성을 줄여준다. - 안정성: 크론 작업은 자동으로 실행되므로 안정성이 매우 중요하다.
date-fns
를 사용하면 예외 상황에서도 안정적으로 날짜를 계산할 수 있다. - 가독성:
subDays
,format
과 같은 직관적인 함수를 사용하여 코드의 가독성을 높일 수 있다. - 유지보수성: 복잡한 날짜 계산 로직을 직접 구현할 필요가 없어 코드 유지보수가 용이하다.
4. 결론
크론 작업에서 월 변경 시 날짜 계산 오류는 심각한 문제를 일으킬 수 있다.
date-fns
모듈을 사용하면 이러한 문제를 효과적으로 해결하고, 안정적인 크론 작업을 구현할 수 있다. 따라서 크론 작업과 같이 날짜 계산이 중요한 작업에서는date-fns
모듈을 적극적으로 활용하는 것이 좋겠다.728x90반응형'언어·프레임워크 > Node.js' 카테고리의 다른 글
[Node.js] cron-cluster: 분산 환경에서의 크론 작업 관리 이해하기 (0) 2025.04.11 [Node.js] Redis 데이터베이스를 활용한 Node.js cron-cluster 동시 실행 문제 해결하기 (0) 2025.04.11 [Node.js] "객체에서 배열 VS 배열에서 객체" 변환, 누가 더 빠를까? (0) 2025.02.27 [Node.js] DB 데이터 변경 비교 방법(직접 비교, 해시값 비교) (0) 2025.02.26 [Node.js] macOS에서 nvm 설치 (1) 2025.02.10 다음글이 없습니다.이전글이 없습니다.댓글 - 정확성: