2023 주니어 SRE 엔지니어 후레임

반응형

EventEmitter

EventEmitter는 이벤트를 만들고 작업할 수 있는 Node.js의 클래스다.

Node.js에 내장된 events 모듈의 일부이며, Node.js 애플리케이션에서 트리거되고 리스닝 가능한 이벤트를 만드는 데 사용 가능하다.

const EventEmitter = require('events');

class MyEmitter extends EventEmitter {}

const myEmitter = new MyEmitter();

myEmitter.on('event', () => {
  console.log('an event occurred!');
});

myEmitter.emit('event'); // prints 'an event occurred!'

EventEmitter를 상속받은 MyEmitter 클래스를 만들었다. 
그리고 MyEmitter의 인스턴스를 만들고, on 메소드를 사용한 event에 대한 리스너를 등록했다.
myEmitter 인스턴스의 emit 메소드가 호출(invoke)되면, 'event' 이벤트가 트리거되고 리스너가 호출된다.

기본적으로 Node.js에서는 10개의 이벤트 리스너를 가질 수 있는데, 이를 조절하기 위해 필요한 게 setMaxListnerers이다.

 

setMaxListeners

setMaxListeners는 EventEmitter에서 특정 이벤트에 대해 등록 가능한 최대 리스너 수를 설정하는 데 필요한 함수다.
기본적으로 EventEmitter는 특정 이벤트에 대해 최대 10개의 리스너를 가질 수 있지만, setMaxListeners로 조절 가능하다.

const EventEmitter = require('events');

class MyEmitter extends EventEmitter {}
const myEmitter = new MyEmitter();

myEmitter.setMaxListeners(20); // allow up to 20 listeners for each event

이렇게 하면 myEmitter가 가질 수 있는 최대 이벤트 리스너 개수는 10개에서 20개로 늘어난다.

0을 입력하면 리스너 제한을 비활성화 하는 것도 가능하지만,
리스너가 많아질 경우 메모리 누수 및 퍼포먼스 문제가 발생할 수 있으므로 권장되지는 않는다.

나같은 경우 스크래핑 모듈을 만들다가 10개 이상의 사이트를 동시에 스크래핑 해야할 때 관련 에러를 만난 적이 있다.

반응형

이 글을 공유합시다

facebook twitter googleplus kakaoTalk kakaostory naver band