nodejs

Event Emitter와 이벤트 큐, 핸들러

mmalmmizal 2024. 7. 29. 11:30

Event Emitter

Node.js가 제공하는 events 모듈을 통해 상호작용 처리

프로그램의 여러 부분이 메시지를 보내고 받음으로써 서로 통신할 수 있는 편리한 도구

 

The Node.js Event emitter

EventEmitter 클래스를 상속받은 객체를 만들고, on() 메서드를 통해 이벤트 리스너를 등록하면 이벤트가 발생할 때마다 등록한 콜백함수가 실행된다.

const EventEmitter = require('events');

const myEmitter = new EventEmitter();

이벤트를 발생시키고, 해당 이벤트에 대한 콜백이 실행되는 연산은 하나의 EventEmitter 객체 내에서만 이루어진다. EventEmitter 객체가 발생시키는 이벤트는 해당 객체 내에서만 유효하다.

 

메소드

  • on()

어떤 이벤트가 발생했을 때, 실행할 콜백을 등록하는 메소드

myEmitter.on('start', () => { //start 이벤트 발생시 콜백 
  console.log('started');
});
  • emit ()

인위적으로 이벤트를 발생시키는 메소드

myEmitter.emit('start');

이벤트를 emit 한다는 것은 발생시킨다는 의미이며, Event Listener나 Handler는 발생한 이벤트를 인지하고 처리하는 역할을 하게된다.

 

 

Event Loop

 

javascript 는 단일스레드로 call stack이 하나. 작업이 하나만 동시에 이루어짐.

Web API 는 브라우저에서 제공하는 API  비동기로 동작하는 핵심요소는 브라우저에서 제공한다.

브라우저는 Web APIsEvent TableCallback QueueEvent Loop 등으로 구성

 

Memory Heap : 메모리 할당 발생

Call Stack : 실행된 코드의 환경을 저장하는 자료구조, 함수 호출 시 Call Stack에 push

Callback queue : 비동기적으로 실행된 콜백함수가 보관 되는 영역

 

 

  • Event Loop의 역할

1. Call Stack과 Callback Queue를 감시

2. Call Stack이 비어있을 경우, Callback queue에서 콜백함수를 꺼내 Call Stack에 추가

 

Call Stack에서 실행된 비동기 함수는 Web API를 호출하고, Web API는 콜백함수를 Callback Queue에 밀어 넣는다

 

.

  • Web API와 Call Stack 동작 방식

setTimeout 함수가 실행되면서 Browser가 제공하는 timer Web API 를 호출한다. 그 후 Call Stack에서 제거

 

  • 이벤트 루프 동작을 시각적으로 설명해주는 사이트

 

 

setTimeout 함수에 전달한 0ms 시간이 지난뒤 Callback으로 전달한 cb 함수가 Callback Queue에 추가된다.

 

 

Event Loop는 Call Stack이 비어있는 것을 확인하고 Callback Queue를 확인한다. cb를 발견한 Event Loop는 Call Stack에 cb를 추가한다.

 

  • setInterval 
setInterval(() => {
  eventLoop.run();
}, 1000);

 

  • super()

부모-class의 생성자(constructor)를 참조한다. 코드의 재사용을 줄일 수 있다

References

 

이벤트 루프

https://velog.io/@thms200/Event-Loop-이벤트-루프

https://medium.com/sjk5766/javascript-비동기-핵심-event-loop-정리-422eb29231a8

https://medium.com/sessionstack-blog/how-does-javascript-actually-work-part-1-b0bacc073cf

event emmiter

https://nodejs.org/en/learn/asynchronous-work/the-nodejs-event-emitter

https://velog.io/@ktaewon98/Node-EventEmitter-객체에-대해서

https://www.linkedin.com/pulse/what-event-emitter-nodejs-korvage-vz5yf

https://blog.naver.com/jdub7138/221034236810

https://noodabee.tistory.com/entry/Nodejs-EventEmitter란-feat-Promise와의-차이점

queue 구현

https://velog.io/@longroadhome/자료구조-JS로-구현하는-.큐-Queue

문자열을 숫자배열로 반환 split,map

https://bo5mi.tistory.com/201