더북(TheBook)

events 모듈을 사용하면 됩니다. myEvent라는 객체를 먼저 만듭니다. 객체는 이벤트 관리를 위한 메서드를 갖고 있습니다.

on(이벤트명, 콜백): 이벤트 이름과 이벤트 발생 시의 콜백을 연결합니다. 이렇게 연결하는 동작을 이벤트 리스닝이라고 합니다. event2처럼 이벤트 하나에 이벤트 여러 개를 달아줄 수도 있습니다.

addListener(이벤트명, 콜백): on과 기능이 같습니다.

emit(이벤트명): 이벤트를 호출하는 메서드입니다. 이벤트 이름을 인수로 넣으면 미리 등록해뒀던 이벤트 콜백이 실행됩니다.

once(이벤트명, 콜백): 한 번만 실행되는 이벤트입니다. myEvent.emit('event3')을 두 번 연속 호출했지만 콜백이 한 번만 실행됩니다.

removeAllListeners(이벤트명): 이벤트에 연결된 모든 이벤트 리스너를 제거합니다. event4가 호출되기 전에 리스너를 제거했으므로 event4의 콜백은 호출되지 않습니다.

removeListener(이벤트명, 리스너): 이벤트에 연결된 리스너를 하나씩 제거합니다. 리스너를 넣어야 한다는 것을 잊지 마세요. 역시 event5의 콜백도 호출되지 않습니다.

off(이벤트명, 콜백): 노드 10 버전에서 추가된 메서드로, removeListener와 기능이 같습니다.

listenerCount(이벤트명): 현재 리스너가 몇 개 연결되어 있는지 확인합니다.

이제는 스트림에서 봤던 on('data')on('end')에 대해서도 어느 정도 감이 올 겁니다. 겉으로 이 이벤트를 호출하는 코드는 없지만, 내부적으로는 chunk를 전달할 때마다 data 이벤트를 emit하고 있습니다. 완료되었을 경우에는 end 이벤트를 emit한 것입니다.

이제 직접 이벤트를 만들 수 있으므로 다양한 동작을 직접 구현할 수 있으며, 웹 서버를 구축할 때 많이 사용됩니다.

지금까지 배운 개념들만으로도 서버를 만들기에 충분합니다. 하지만 서버를 운영할 때 코드에 에러가 발생하는 것은 치명적이므로, 마지막으로는 에러를 처리하는 방법을 배워보겠습니다. 다음 절에서 알아봅시다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.