일기/TIL

TIL: Today I Learned 91일차 [ 최종프로젝트 21일차 ]

표자 2023. 3. 28. 00:05
728x90
반응형

1. 문제

회원정지시 3일,7일,30일로 하려고 할때, 자동화하여

정지 풀어주는 로직을 고민하고 있었다.


2. 시도해본 것들

처음에는 타이머를 생각했으나, 서버가 꺼지면 자동으로 초기화되는 등

실제 서비스 제공하기는 어렵다.


3. 해결과정

타이머의 대체제를 찾던 도중 'node-cron'이라는 기능을 알게 되었다.

실제 서비스에서도 사용할 수 있고, 사용하는 방법도 간단했다.

 

4. 알게 된 점

타이머와 node-corn의 차이점을 알게 되었고,

corn의 경우, 서비스 코드에서 작성하는것이 아니라

app.module.ts 또는 main.ts 같은 곳에 작성해야 서비스가 사용될때마다 주기적으로

이벤트를 줘서 작동시킬 수 있다.

 

import * as cron from 'node-cron';
import { AdminModule } from './apis/administrator/admin.module';
import { AdminService } from './apis/administrator/admin.service';

@Module({
  imports: [
    ConfigModule.forRoot({ isGlobal: true }),
    TypeOrmModule.forRootAsync({
      useClass: TypeOrmConfigService,
    }),

    AuthModule,

  ],
})
export class AppModule implements OnModuleInit {
  constructor(private adminService: AdminService) {}
  onModuleInit() {
    cron.schedule('* * * * *', async () => {
      await this.adminService.liftBanOnExpiredUsers();
    });
  }
}
728x90
반응형