이벤트 루프(Event Loop)
Node.js는 이벤트(Event)를 기반으로 비동식 방식으로 처리하기 때문에, 객체 간에 이벤트를 전달한다. Node.js를 기반으로 한 웹 서버는 이벤트를 대기하는 메인 루프가 있고, 이벤트가 감지되면 콜백함수를 호출하는 형태를 띈다.
Node.js에서의 이벤트
이벤트를 단순하게 말하자면 한쪽에서 다른 쪽으로 알림 메시지를 보내는 것과 비슷하다. 콜백함수는 비동기 함수에서 결과 값을 반환할 때 호출되는 반면에, 이벤트는 옵저버 패턴에 의해 작동된다. 이벤트 리스너(Event Listener)가 이벤트가 발생하기를 기다리다가, 이벤트가 발생하면 이벤트 핸들링 함수를 실행한다.
Node.js에는 이런 이벤트를 보내고 받을 수 있도록 EventEmitter 클래스가 정의되어 있다.
객체들은 EventEmitter를 상속받아, on()과 emit() 메소드 등을 사용하여 이벤트를 주고 받는다.
메소드 이름 | 설명 |
on(eventName, listener) | 지정한 이벤트의 리스너를 추가한다. |
once(eventName, listener) | 지정한 이벤트의 리스너를 추가하지만 한 번 실행한 후에는 자동으로 리스너가 제거된다. |
removeListener(eventName, listener) | 지정한 이벤트에 대한 리스너를 제거한다. |
emit(eventName, [,...args]) | 이벤트를 다른 쪽에 전달한다. |
이벤트 구현
process 객체는 Node.js에서 사용할 수 있는 객체이며 내부적으로 EventEmitter를 상속받은 상태이므로 on()과 emit() 메소드를 사용할 수 있다.
미리 정의되어 있는 이벤트(exit)
process.on('exit', () => {
console.log('exit 이벤트 발생');
});
console.log('3초 후 프로세스 종료');
setTimeout(() => {
process.exit();
}, 3000);
직접 만든 이벤트(custom)
process.on('custom', (param) => {
console.log(`custom 이벤트 발생 (param: ${param})`);
});
console.log('3초 후 custom 이벤트 발생');
setTimeout(() => {
process.emit('custom', 'Hello World');
}, 3000);
참고
'웹 > Node.js' 카테고리의 다른 글
[Node.js] Express 4: 라우터(Router) (1) | 2021.02.20 |
---|---|
[Node.js] Express 3: 미들웨어(Middleware) (0) | 2021.02.20 |
[Node.js] Express 2: 요청 객체와 응답 객체 (req & res) (0) | 2021.02.20 |
[Node.js] Express 1: app 객체 (0) | 2021.02.19 |
[Node.js] PM2 설치 및 실행 (0) | 2021.02.03 |