Dandy Now!
  • [Node.js] date-fns 모듈로 크론 작업의 날짜 계산 오류 방지하기
    2025년 03월 21일 18시 31분 43초에 업로드 된 글입니다.
    작성자: DandyNow
    728x90
    반응형

    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 사용시 이점

    1. 정확성: date-fns는 월 변경, 윤년 등 복잡한 날짜 계산을 정확하게 처리하여 오류 발생 가능성을 줄여준다.
    2. 안정성: 크론 작업은 자동으로 실행되므로 안정성이 매우 중요하다. date-fns를 사용하면 예외 상황에서도 안정적으로 날짜를 계산할 수 있다.
    3. 가독성: subDays, format과 같은 직관적인 함수를 사용하여 코드의 가독성을 높일 수 있다.
    4. 유지보수성: 복잡한 날짜 계산 로직을 직접 구현할 필요가 없어 코드 유지보수가 용이하다.

    4. 결론

    크론 작업에서 월 변경 시 날짜 계산 오류는 심각한 문제를 일으킬 수 있다. date-fns 모듈을 사용하면 이러한 문제를 효과적으로 해결하고, 안정적인 크론 작업을 구현할 수 있다. 따라서 크론 작업과 같이 날짜 계산이 중요한 작업에서는 date-fns 모듈을 적극적으로 활용하는 것이 좋겠다.

    728x90
    반응형
    댓글