이벤트란 무엇입니까?
이벤트는 작업이나 상태 변경이 발생했음을 나타내는 신호 또는 알림입니다. 애플리케이션 컨텍스트에서 이벤트를 사용하면 시스템의 여러 부분이 비동기적이고 분리된 방식으로 통신할 수 있습니다. 이는 독립적으로 작동하는 구성 요소가 필요하지만 여전히 시스템의 다른 곳에서 발생하는 변경 사항을 "수신"하고 대응할 수 있는 마이크로서비스 아키텍처에 특히 유용합니다.
NestJS의 이벤트
NestJS에서는 더 많은 기능을 갖춘 기본 Node.js EventEmitter의 확장인 EventEmitter2 라이브러리를 사용하여 간단하고 직관적인 방식으로 이벤트 구현이 수행됩니다. 다음으로 NestJS에서 이벤트를 구성하고 사용하는 방법을 살펴보겠습니다.
NestJS에서 이벤트 구성
먼저 EventEmitter2와 NestJS의 완전한 통합을 제공하는 @nestjs/event-emitter 패키지를 설치해야 합니다.
npm install @nestjs/event-emitter
패키지를 설치한 후 EventEmitterModule 모듈을 애플리케이션의 기본 모듈로 가져옵니다.
import { Module } from '@nestjs/common'; import { EventEmitterModule } from '@nestjs/event-emitter'; @Module({ imports: [ EventEmitterModule.forRoot(), // Importando o EventEmitterModule // outros módulos ], }) export class AppModule {}
모듈이 구성되면 애플리케이션에서 이벤트 생성 및 처리를 시작할 수 있습니다.
이벤트 생성 및 발행
새 사용자가 생성되면 이벤트가 발생하는 기본 예제를 만들어 보겠습니다.
1. 이벤트 만들기:
먼저 이벤트를 나타내는 클래스를 정의합니다.
export class UserCreatedEvent { constructor( public readonly userId: string, public readonly email: string, ) {} }
2. 이벤트 내보내기:
사용자 생성 로직이 구현된 서비스에서는 사용자가 생성된 후 이벤트를 내보낼 수 있습니다.
import { Injectable } from '@nestjs/common'; import { EventEmitter2 } from '@nestjs/event-emitter'; import { UserCreatedEvent } from './events/user-created.event'; @Injectable() export class UserService { constructor(private readonly eventEmitter: EventEmitter2) {} async createUser(email: string) { // Lógica para criar o usuário const userId = '12345'; // Exemplo de ID gerado // Emitir o evento const event = new UserCreatedEvent(userId, email); this.eventEmitter.emit('user.created', event); } }
여기서 user.created 이벤트는 새 사용자가 생성될 때마다 발생합니다.
이벤트 듣기 및 응답
발생된 이벤트에 반응하기 위해 해당 이벤트가 트리거될 때 호출되는 함수 또는 메서드인 리스너를 생성할 수 있습니다.
1. 리스너 생성:
리스너는 특정 이벤트에 반응하는 클래스입니다.
import { OnEvent } from '@nestjs/event-emitter'; import { Injectable } from '@nestjs/common'; import { UserCreatedEvent } from './events/user-created.event'; @Injectable() export class UserCreatedListener { @OnEvent('user.created') handleUserCreatedEvent(event: UserCreatedEvent) { console.log('Usuário criado com sucesso:', event.userId, event.email); // Lógica adicional, como enviar um e-mail de boas-vindas } }
2. 리스너 등록:
NestJS가 리스너를 인식하려면 해당 모듈에 등록되어야 합니다.
import { Module } from '@nestjs/common'; import { UserService } from './user.service'; import { UserCreatedListener } from './listeners/user-created.listener'; @Module({ providers: [UserService, UserCreatedListener], }) export class UserModule {}
이제 user.created 이벤트가 발생할 때마다 handlerUserCreatedEvent 메소드가 호출됩니다.
고급 이벤트 애플리케이션
이벤트는 애플리케이션 아키텍처를 개선하기 위해 다양한 시나리오에서 사용할 수 있습니다.
결론
NestJS에서 이벤트를 사용하는 것은 모듈식이고 확장 가능하며 유지 관리가 쉬운 시스템을 만드는 강력한 방법입니다. EventEmitter2와의 통합을 통해 NestJS를 사용하면 이벤트를 쉽게 생성, 방출 및 수신할 수 있으므로 이벤트 기반 아키텍처를 간단하고 효과적으로 구현할 수 있습니다. 마이크로서비스 간의 통신이든 비동기 처리이든 이벤트는 NestJS 개발자의 무기고에 필수적인 도구입니다.
부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.
Copyright© 2022 湘ICP备2022001581号-3