노드에서 Event란?

노드에서는 대부분의 이벤트를 비동기 방식으로 처리합니다. 또한, 비동기 방식으로 이벤트를 전달합니다. 이벤트는 한쪽에서 다른 쪽으로 알림 메시지를 보내는 것과 비슷합니다. 노드에는 이런 이벤트를 보내고 받을 수 있도록 EventEmitter라는 것이 만들어져 있습니다.  노드의 객체는 EventEmitter를 상속받을 수 있으며, 상속받은 후에는 EventEmitter 객체의 on()과 emit() 메소드를 사용할 수 있습니다. on() 메소드는 이벤트가 전달될 객체에 이벤트 리스너를 설정하는 역할을 하는데 이 리스너 함수는 객체로 전달된 이벤트를 받아 처리할 수 있습니다.

 메소드 이름 

 설명 

 on(event, listener) 

 지정한 이벤트의 리스너를 추가

 once(event, listener) 

 지정한 이벤트의 리스너를 추가하지만 한 번 실행한 후에는 자동으로 리스너 제거

 removeListener(event, listener) 

 지정한 이벤트에 대한 리스너를 제거합니다. 


시스템 이벤트 생성 예제 코드

process 객체는 노드에서 언제든지 사용할 수 있는 객체인데 이미 내부적으로 EventEmitter를 상속받도록 만들어져 있어 on()과 emit() 메소드를 바로 사용할 수 있습니다. process() 객체의 on() 메소드를 호출하면서 이벤트 이름을 exit로 지정하면 내부적으로 프로세스가 끝날 때를 알 수 있습니다. 그 아래 코드에서는 setTimeout() 메소드를 호출하여 2초 후 프로그램을 끝냅니다. 
process.on('exit', function(){
console.log('exit 이벤트 실행');
});

setTimeout(function(){
console.log('2초 후 시스템 종료');
process.exit()
}, 2000);
2초 후 시스템 종료
exit 이벤트 실행


사용자 정의 이벤트 생성 예제 코드

tick 이벤트를 직접 만들고 2초 후에 setTimeout() 메소드를 사용해 process.emit() 메소드를 호출하면서 tick 이벤트를 process 객체로 전달했습니다. process.on() 메소드를 호출하여 이벤트를 등록하면 이 메소드를 호출하면서 파라미터로 전달한 tick 이벤트가 발생했을 때 그 다음에 나오는 콜백 함수가 실행됩니다. 

process.on('tick', function(count){
console.log('tick 이벤트 발생 : %s', count);
});

setTimeout(function(){
console.log('2초 후에 tick 이벤트 실행');

process.emit('tick', '777');
}, 2000);

2초 후에 tick 이벤트 실행

tick 이벤트 발생 : 777

콘솔 창에 출력되는 문자열을 통해 tick 이벤트를 받았는지 확인할 수 있습니다.


References

  • Do it! Node.js 프로그래밍


+ Recent posts