[Nest.js 에러] - 'cronTime' 속성의 형식이 호환되지 않습니다.

Seung Hyeon ·2024년 2월 19일
0

Issues

목록 보기
5/5

Nestjs에서 Cron을 활용하여 동적 스케줄링 작업을 구현하던 중 this.schedulerRegistery.addCronJob(name, job);의 addCronJob의 두번째 인수(job) 부분에서 아래와 같은 에러가 발생했다.

import { Injectable, Logger, Inject, LoggerService } from '@nestjs/common';
import { SchedulerRegistry } from '@nestjs/schedule';
import { CronJob } from 'cron';

@Injectable()
export class TaskService {
  constructor(
    @Inject(Logger)
    private readonly logger: LoggerService,
    private schedulerRegistery: SchedulerRegistry,
  ) {
    this.insert();
  }

  insert() {
    const name = 'test';

    const job = new CronJob('* * * * * *', () => {
      this.logger.warn(`run! ${name}`);
    });

    this.schedulerRegistery.addCronJob(name, job);
    this.logger.warn('job added');
  }
}

import("c:/Users/USER/Documents/OHA-Common-Service/node_modules/cron/dist/job").CronJob<null, null>' 형식의 인수는 'import("c:/Users/USER/Documents/OHA-Common-Service/node_modules/@nestjs/schedule/node_modules/cron/dist/job").CronJob<null, null>' 형식의 매개 변수에 할당될 수 없습니다. 'cronTime' 속성의 형식이 호환되지 않습니다. 'import("c:/Users/USER/Documents/OHA-Common-Service/node_modules/cron/dist/time").CronTime' 형식은 'import("c:/Users/USER/Documents/OHA-Common-Service/node_modules/@nestjs/schedule/node_modules/cron/dist/time").CronTime' 형식에 할당할 수 없습니다. 형식에 별도의 프라이빗 속성 'second' 선언이 있습니다.ts(2345) const job: CronJob<null, null> 빠른 수정을 사용할 수 없음

예제를 보고 그대로 따라 쳤는데 왜 저런 에러가 나왔을까 의아했다. 구글링을 해도 해결방법을 전혀 찾지 못했다.

에러를 자세히 읽어보니 두 개의 서로 다른 모듈에서 CronJob을 가져와서 혼동이 발생하고 있는 것으로 보였다. 한 모듈에서는 @nestjs/schedule/node_modules/cron에서 가져온 CronJob을 사용하고 있고, 다른 모듈에서는 직접 cron에서 가져온 CronJob을 사용하고 있는 것 같았다.

즉, cron 라이브러리의 CronJob 인스턴스와 nestjs/schedule의 schedulerRegistery가 서로 호환이 되지 않아 나온 문제인 듯 싶었다.

yarn add @types/cron
yarn add @types/cron --dev

모두 다시 설치해봐도 해결되지 않았다.

그러다 문득, 이 문제를 해결하려면 모듈을 통일하면 되지 않을까 라는 생각이 들었다. 즉 모든 곳에서 동일한 CronJob을 가져와야 서로 호환이 되지 않을까 싶었다.

pacakage.json에서 @nestjs/schedule모듈과 @types/cron모듈의 버전을 확인해보니 각각 4.0.0, 2.4.0이어서 두 모듈의 버전을 일치시켜보기로 하였다.

맨 처음에는 @types/cron의 제일 최신 버전인 2.4.0버전에 맞춰 @nestjs/schedule도 2.4.0으로 맞추려고 했으나, @nestjs/schedule은 2.4.0을 지원하지 않았다. 따라서 둘 다 2.2.0버전으로 수정 후, 모듈 업데이트를 위해 yarn install 을 실행해보았다.

다행히 해결되었다.

profile
안되어도 될 때까지

0개의 댓글