logo

JEONGGON

    블로그
github
mode
목 차
down-arrow

Node.js Event Emitter

2024.03.11.

post-thumbnail

Event Emitter

1. event-driven 시스템

  • 브라우저(클라이언트)에서 JavaScript의 경우, 클릭, 키보드 누르기, 마우스 움직임 등의 이벤트를 통해 사용자와 상호작용을 처리함
  • 백엔드 측에서 Node.js도 event-driven 시스템을 이용해서 작동됨
  • 즉, Node.js도 어떠한 이벤트 발생 시, 그에 따른 액션을 실행시킬 수 있음
About Node.js

As an asynchronous "event-driven" JavaScript runtime

출처 : Node.js 공식 사이트 - About Node.js


1-1. Observer Design Pattern

  • 이러한 event-driven 시스템을 이용하는 것을 Observer Design Pattern이라고 부름
  • Observer Design Pattern은 Node.js에 국한된 것이 아닌 개발 전역에서 이용되는 패턴임
  • 이 패턴은 특정 Subject를 관찰하는 Observer가 있고, Observer는 Subject의 변경사항에 대한 알림 받음

1-2. Event Emitter 클래스

// Event 모듈의 Event Emitter Class 사용 예시

// events의 EventEmitter 클래스 가져오기
const EventEmitter = require('events');

// 이 객체는 on(등록) 및 emission(사용) 메서드를 사용할 수 있음
const celebrity = new EventEmitter();

// on은 이벤트 이름과 이벤트가 트리거 될 때, 실행할 콜백함수를 지정

// Observer1의 on 등록
celebrity.on('update post', () => {
  console.log('This post is so awesome!');
});

// Observer2의 on 등록
celebrity.on('update post', () => {
  console.log('I like this post!');
});

// emit으로 해당 이름의 이벤트 트리거(발생)
celebrity.emit('update post');

  • emit()에 추가 argument를 통해 해당 argument를 on에서 받아 실행할 수 있음
// emit()으로 추가 argument 보내기

...
celebrity.on('update post', (type) => {
  console.log(`I like this ${type} post!`);
});

celebrity.emit('update post', 'image');

1-3. Process 모듈

// process 모듈 사용 --> 여러 이벤트 중 beforeExit, exit 사용

const process = require('node:process');

process.on('beforeExit', (code) => {
  console.log('Process beforeExit event with code: ', code);
});

process.on('exit', (code) => {
  console.log('Process exit event with code: ', code);
});

console.log('This message is displayed first.');

// 출력
// This message is displayed first.
// Process beforeExit event with code: 0
// Process exit event with code: 0
nodejsprogrammingjavascripteventevent_emitter
profile

조정곤

주니어 프론트엔드 개발자

github
linkedin
instagram
email

< 이전글

Node.js Blocking, Non-blocking

다음글 >

Node.js 프로세스, 스레드

Nodejs 포스트 (8)

down-arrow
Node.js 소개Node.js Blocking, Non-blockingNode.js Event EmitterNode.js 프로세스, 스레드Node.js 모듈Node.js 패키지Node.js index.js 파일Node.js 웹 서버 생성