[Node.js] 이벤트 이해하기

EventEmitter

노드는 대부분 이벤트를 기반으로 하는 비동기 방식으로 처리한다. 그리고 비동기 방식으로 처리하기 위해 서로 이벤트를 전달한다. 노드에는 이런 이벤트를 보내고 받을 수 있도록 EventEmitter라는 것이 만들어져 있다.

노드의 객체는 EventEmitter를 상속받을 수 있으며, 상속 후에는 on(), emit() 메소드를 사용할 수 있다.

on(event, listener): 지정한 이벤트의 리스너 추가
once(event, listener): on()과 같지만 한 번 실행한 후에는 리스너가 삭제됨
removeListener(event, listener): 지정한 이벤트에 대한 리스너 제거

이벤트 리스너 사용하기

우선 미리 정의되어 있는 이벤트 리스너를 사용해보자.

process.on('exit'function(){
    console.log("exit 이벤트 발생");
});
 
setTimeout(function(){
    console.log('2초 후에 시스템 종료 시도');
    
    process.exit();
}, 2000);
cs

process 객체는 언제든지 사용할 수 있는 객체이고 이미 내부적으로 EventEmmitter를 상속받도록 만들어져 있어 on()과 emit() 메소드를 바로 사용할 수 있다.

process 객체의 on() 메소드를 호출하면서 이벤트 이름을 exit로 지정하면 프로세스가 끝날 때를 알 수 있다. 그 아래 코드에서는 setTimeout() 메소드를 호출하여 2초 후 프로그램을 끝낸다.

직접 만든 이벤트 처리하기

이번에는 미리 정의된 이벤트(exit)가 아닌 직접 만든 이벤트를 처리해보자.

process.on('tick'function(count){
    console.log("tick 이벤트 발생: %s", count);
});
 
setTimeout(function(){
    console.log('2초 후에 tick 이벤트 전달 시도');
    
    process.emit('tick''2');
}, 2000);
cs

앞서 실행한 코드와 비슷하지만 직접 만든 이벤트의 경우 process.emit() 메소드를 호출하면서 tick 이벤트를 process 객체로 전달했다. process.on() 메소드를 호출하여 이벤트를 등록하면 이 메소드를 호출하며 파라미터로 전달한 tick 이벤트가 발생했을 때 그다음에 나오는 콜백 함수가 실행된다.

댓글 없음:

Powered by Blogger.