[NestJS] Cron을 이용한 Task Scheduling

전은평·2023년 5월 23일
2

현재 스터디 카페 관련 서비스 개발 프로젝트를 진행하고 있다. 처음 해보는 프로젝트라 부딪히는 난관이 많았지만, 오늘 이야기하고자 하는 주제는 그 중 하나다!

그건 바로!
좌석 상태를 업데이트 해주는 것이다!!

좌석을 이용중인지, 이용을 끝난 좌석인지 상태를 체크해주어야 한다!!
좌석의 남은 시간을 매번 데이터 베이스에 저장하고 남은 시간이 종료되면 해당 데이터를 지워서 빈 좌석으로 갱신시켜줘야 하는데.. 어떻게 할 수 있을까 걱정되는 마음으로 프로젝트를 시작했지만, 실무에서는 이런 방법으로 안할 것 같긴 한데 생각보다 간단했다.

어떻게 하면 좌석을 업데이트를 할 수 있을까 구글링을 해본 결과 여러 방법을 찾을 수 있었다. 새로운 VM 인스턴스를 하나 만들어서 반복적으로 좌석 상태 업데이트 API에 요청을 보내주거나, 이를 조금 더 편리하게 하기 위해 구글 스케줄러를 이용하거나.. 등등 여러 방법이 있었다.

나는 그중 가장 간단하게 처리할 수 있는 방법을 선택했다.
바로 Nestjs에서 Cron기능을 사용 하는 것이다.

일단 사용하기 위해선 해당 모듈을 설치해야 한다.

$ npm install --save @nestjs/schedule
$ npm install --save-dev @types/cron
or
yarn add @nestjs/schedule
yarn add --dev @types/cron

설치한 뒤에는 아래의 사진처럼 app.modul 파일에 주입시켜준다!

이제 벌써 반이나 끝났다. 다음으로는 원하는 service에 해당 모듈을 사용하면 된다.

정말 간단했다.. 걱정했던 것과는 다르게
하지만 나중에 서비스 규모가 커지면 서버에 부하가 많이 올 것 같아 실무에선 다른 방법을 사용할 것 같다.

나중에 프로젝트가 끝이 나면 다른 방법으로 개선시켜보도록 하고, 이번에는 이렇게 진행하기로 했다~

cron()은 모든 표준 cron 패턴을 지원하고 있다고 한다. cron() 안의 표기는 아래와 같은 의미를 가지는데, 나는 1분마다 자리 좌석을 업데이트하기 위해 cron("* * * * *")를 사용했다.

나중에 더 나은 방법으로 리팩토링하기로 하고.. 오늘은 이만.. 여기까지~

출처:
https://docs.nestjs.com/techniques/task-scheduling#declarative-cron-jobs

profile
`아는 만큼 보인다` 라는 명언을 좋아합니다. 많이 배워서 많은 걸 볼 수 있는 개발자가 되고 싶습니다.

0개의 댓글