Skip to content

Node.js 이벤트 이미터

브라우저에서 JavaScript로 작업해 본 적이 있다면, 사용자 상호 작용이 이벤트(마우스 클릭, 키보드 버튼 누르기, 마우스 움직임에 대한 반응 등)를 통해 얼마나 많이 처리되는지 알 것입니다.

백엔드 측면에서 Node.js는 **events 모듈**을 사용하여 유사한 시스템을 구축할 수 있는 옵션을 제공합니다.

특히 이 모듈은 이벤트를 처리하는 데 사용할 EventEmitter 클래스를 제공합니다.

다음과 같이 초기화합니다.

js
import EventEmitter from 'node:events'
const eventEmitter = new EventEmitter()

이 객체는 많은 메서드 중에서도 onemit 메서드를 노출합니다.

  • emit은 이벤트를 트리거하는 데 사용됩니다.
  • on은 이벤트가 트리거될 때 실행될 콜백 함수를 추가하는 데 사용됩니다.

예를 들어 start 이벤트를 생성하고, 샘플을 제공하는 차원에서 콘솔에 로깅하여 해당 이벤트에 반응해 보겠습니다.

js
eventEmitter.on('start', () => {
  console.log('started')
})

다음과 같이 실행하면

js
eventEmitter.emit('start')

이벤트 핸들러 함수가 트리거되고 콘솔 로그가 출력됩니다.

emit()에 추가 인수를 전달하여 이벤트 핸들러에 인수를 전달할 수 있습니다.

js
eventEmitter.on('start', number => {
  console.log(`started ${number}`)
})
eventEmitter.emit('start', 23)

여러 인수:

js
eventEmitter.on('start', (start, end) => {
  console.log(`started from ${start} to ${end}`)
})
eventEmitter.emit('start', 1, 100)

EventEmitter 객체는 또한 다음과 같은 이벤트를 조작하기 위한 몇 가지 다른 메서드를 노출합니다.

  • once(): 일회성 리스너 추가
  • removeListener() / off(): 이벤트에서 이벤트 리스너 제거
  • removeAllListeners(): 이벤트에 대한 모든 리스너 제거

이러한 메서드에 대한 자세한 내용은 events 모듈 설명서에서 확인할 수 있습니다.