브라우저 자바스크립트에서 onClick 같은 이벤트를 다루듯, Node.js 서버 내부에서도 "파일 읽기가 끝났어!", "DB 접속이 끊어졌어!" 같은 상황을 이벤트(Event) 기반으로 소통합니다. 이를 총괄하는 가장 중요한 내장 클래스가 바로 EventEmitter입니다.
EventEmitter 동작 모식도
🚨 주의: Error 이벤트의 특별함
EventEmitter에서 'error'라는 이름의 이벤트는 특별하게 취급됩니다. 에러 이벤트가 발생(emit)되었는데, 이를 처리할 리스너(.on('error', ...))가 하나도 없다면 Node.js 프로그램 자체가 강제로 멈추고 종료(Crash)되어 버립니다.
EventEmitter 코드와 실행 결과
이벤트를 수신 대기(Listen)하고, 특정 타이밍에 이벤트를 방출(Emit)하는 과정을 콘솔에서 확인해 보세요.
logger.js
const EventEmitter = require('events');
// 1. 커스텀 이벤트 방출기 생성
const myEmitter = new EventEmitter();
// 2. 이벤트 리스너(Listener) 등록 (수신 대기)
myEmitter.on('userLogin', (username) => {
console.log(`[이벤트 수신!] 환영합니다, ${username}님! DB 로그인을 기록합니다.`);
});
myEmitter.on('error', (err) => {
console.error(`[에러 이벤트 수신!] 시스템 경고: ${err.message}`);
});
// 3. 이벤트 방출(Emit) - 특정 상황 발생 시 호출
console.log('--- 1. userLogin 이벤트 발생 ---');
myEmitter.emit('userLogin', '홍길동');
console.log('\n--- 2. error 이벤트 발생 ---');
myEmitter.emit('error', new Error('알 수 없는 DB 연결 오류!'));