Node.js비동기와 런타임

EventEmitter 기본

Node.js 이벤트 기반 설계의 핵심인 `EventEmitter`로 알림을 등록하고 발생시키는 기본 흐름을 정리합니다.

마지막 수정 2026년 3월 20일

기본 패턴

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