기본 패턴
javascript
import { EventEmitter } from "node:events";
const bus = new EventEmitter();
bus.on("ready", (name) => {
console.log(`ready: ${name}`);
});
bus.emit("ready", "worker-1");설명
EventEmitter는 어떤 일이 발생했음을 이름 붙은 이벤트로 알리고, 등록된 리스너가 그에 반응하도록 만드는 패턴입니다.- "작업 완료", "연결 종료", "데이터 수신"처럼 시점 중심의 알림 흐름을 코드로 표현할 때 자주 등장합니다.
on()은 반복 구독,once()는 한 번만 실행되는 구독을 등록합니다.emit()은 해당 이벤트를 즉시 발생시키며, 같은 이벤트에 등록된 리스너는 등록 순서대로 실행됩니다.- Node 생태계의 많은 내장 객체가 이 모델 위에서 동작하므로,
EventEmitter를 이해하면 Node API를 읽기가 훨씬 쉬워집니다.
짧은 예제
javascript
import { EventEmitter } from "node:events";
const emitter = new EventEmitter();
emitter.once("connected", () => {
console.log("only once");
});
emitter.emit("connected");
emitter.emit("connected");빠른 정리
| 메서드 | 역할 |
|---|---|
on(name, listener) | 이벤트 리스너 등록 |
once(name, listener) | 한 번만 실행되는 리스너 등록 |
emit(name, ...args) | 이벤트 발생 |
off(name, listener) | 리스너 제거 |
주의할 점
error 이벤트는 특별합니다. 적절한 리스너 없이 error를 발생시키면 프로세스가 종료될 수 있습니다.
오류를 이벤트로 흘릴 때는 누가 반드시 받는지 먼저 설계하는 편이 좋습니다.
참고 링크
1 sources