Node.js | 이벤트(events module)

trevor1107·2021년 2월 18일
0

이벤트 이해하기

이벤트(event)란 프로그램에 의해 감지되고 처리될 수 있는 동작이나 사건을 말한다. 대체로 이벤트는 프로그램 동작 과정과 함께 동시에 처리되도록 되어 있다.

Node.js의 on('data', callback) 또는 on('end', callback)의 경우를 예를 들어 설명한다.
data라는 이벤트와 end라는 이벤트가 발생할 때 콜백 함수를 호출하도록 이벤트를 등록한 것이다.

createReadStream 같은 경우는 내부적으로 알아서 data와 end라는 이벤트를 호출하지만, 우리가 직접 이벤트를 만들 수도 있다.

이벤트 생성, 호출, 삭제 함수

  • 이벤트 생성
    addListener(eventName, listener), on(eventName, listener)
  • 이벤트 호출
    emit(eventName)
  • 이벤트 삭제
    Single : removeListener(eventName, listener)
    All : removeAllListeners(eventName)

이벤트를 생성, 호출, 삭제하는 예제를 살펴보자

const EventEmitter = require('events');

const eventEmitterObj = new EventEmitter();
eventEmitterObj.addListener('event1', () => {
	console.log('event 1 실행');
});
eventEmitterObj.on('event2', () => {
	console.log('event 2 실행');
});
eventEmitterObj.on('event2', () => {
	console.log('event 2의 두번째 이벤트 실행');
});
// once의 경우 한번만 실행된다.
eventEmitterObj.once('event3', () => {
	console.log('event 3');
});

// 이벤트를 호출한다
eventEmitterObj.emit('event1');
eventEmitterObj.emit('event2'); // 'event2'에 해당되는 이벤트 모두 실행
eventEmitterObj.emit('event3');
eventEmitterObj.emit('event3'); // once로 설정되어 있어서 실행되지 않는다

eventEmitterObj.on('event4', () => {
	console.log('event 4');
});
// 'event4'로 설정된 이벤트들을 모두 삭제한다
eventEmitterObj.removeAllListeners('event4');
// 'event4'는 삭제되어 실행되지 않는다.
eventEmitterObj.emit('event4');

const listener = () => {
	console.log('event 5');
};
eventEmitterObj.on('event5', listener);
eventEmitterObj.removeAllListeners('event5', listener);
eventEmitterObj.emit('event5'); // 삭제되어 실행 안됨

console.log(`'event2' listenerCount :`, eventEmitterObj.listenerCount('event2'));

결과

event 1 실행
event 2 실행
event 2의 두번째 이벤트 실행
event 3
'event2' listenerCount : 2

어떻게 활용하면 좋을까?

이벤트를 활용하는 부분을 보니 옵저버 패턴이 제일 먼저 생각났다.
이벤트를 발생시키는 주체인 subject와 객체의 상태변화를 관찰하는 observer!
이메일, sns 등등 활용 범위는 무궁 무진한 것 같다..
문제는 어느정도의 퍼포먼스를 보여줄 수 있을지 기대가 된다.

profile
프론트엔드 개발자

0개의 댓글