종료 signal에서 진행 요청과 자원을 안전하게 정리합니다.
enableShutdownHooks는 종료 signal을 Nest 생명주기 Hook과 연결합니다. DB pool, queue consumer와 telemetry flush를 제한 시간 안에 정리합니다.
orchestrator의 termination grace period와 애플리케이션 최대 처리 시간을 맞춥니다.
readiness를 먼저 내려 새 요청을 막고 진행 중 작업을 완료합니다.
종료 Hook에서 무기한 대기하면 배포가 강제 종료로 끝납니다.
로컬 프로젝트에서 확인해보세요OnApplicationShutdown provider에서 정리 로그를 남기세요.
import "reflect-metadata";
import {
Controller,
Get,
Injectable,
Module,
OnApplicationShutdown,
} from "@nestjs/common";
import { NestFactory } from "@nestjs/core";
@Injectable()
class ResourceService implements OnApplicationShutdown {
onApplicationShutdown(signal?: string) {
console.log("자원 정리", signal ?? "manual");
}
}
@Controller()
class AppController {
@Get() home() {
return { status: "running", shutdownHooks: true };
}
}
@Module({ controllers: [AppController], providers: [ResourceService] })
class AppModule {}
async function bootstrap() {
const app = await NestFactory.create(AppModule);
app.enableShutdownHooks();
await app.listen(4173, "0.0.0.0");
}
bootstrap();