Medium - Using Event Emitter in Node.js for event driven programming (For beginners).

원문 - Akhil Goyal

Trend 파악을 Medium 기고문 요약 포스팅 - Node.js에서 event driven programming을 위한 Event emitter 사용하기

Node.js를 사용할 때 가장 큰 장점은 Event driven programming에 적합하다는 것입니다. 이 기사에서는 이벤트 드리븐 프로그래밍이 뭔지, 가장 쉬운 사용법을 보여주는 예제를 통해 알아보겠습니다. 그나저나 이벤트 드리븐 접근법은 무엇일까요? 어서 알아봅시다.

Node.js에서는 fs.ReadStream()과 같이 파일이 열릴 때마다 이벤트를 배출하는 객체들이 많이 있습니다. 모든 객체가 배출하는 이벤트들은 EventEmitter 클래스의 인스턴스입니다. 이제 우리가 어떻게 우리의 Node.js 응용프로그램에 이벤트를 가져올 수 있는지 알아봅시다.

var events = require(“events”)

그리고 EventEmitter 클래스를 초기화 하는 방법은

var eventsEmitter = new events.EventEmitter()

꽤나 간단하지 않습니까? 다음의 예제에서는 Node.js 파일시스템을 사용할 것입니다. 만약 파일시스템을 어떻게 사용하는지 모른다면 여기에서 확인해보세요. 매우 작인 예제부터 시작해봅시다.

A simple example of using Event Emitter in Node.js

이 예제에서는 ‘/’route가 주어질 때마다 이벤트를 발생시킵니다. .emit()를 사용해서 이벤트를 초기화하고 이벤트의 이름을 처음 매개변수로 넘겨줄 수 있습니다. 이제 .on()메소드르 ㄹ사용해서 특정 이벤트가 발생할 때마다 캐치할 수 있게합니다. 결과를 확인해봅시다.

Output for a simple event emitter.

쉽죠? 좋습니다. 다음으로는 event emitter를 사용해서 파일시스템에 파일을 읽도록 해봅시다.

Example of reading a file

이 예제에서는 우리는 .emit() 메소드를 사용해서 이벤트를 발생하도록 했습니다. 첫번째 매개변수로 이벤트의 이름을 받고 두번째 매개변수로 해당 이벤트에서 사용할 객체를 넘겨줬습니다. 여기서는 textFile.txt를 넘겨줬는데 이벤트가 발생했을 때 읽어들이길 원하는 파일입니다. 우리는 이벤트의 이름과 파일이름을 매개변수로 전달했습니다. 출력은 다음과 같습니다.

Output for using Event Emitter to read a file.

보셨습니까? 방금 Event Emitter로 파일을 읽었습니다. 좋아요 이제 multiple events로 넘어갑시다. 다음 예제를 살펴봅시다.

An example showing the use of multiple events using Event Emitter.

이 에쩨에서 우리는 read와 show라는 두개의 이벤트를 선언했습니다. 얘네들은 각각 readFileContent와 ShowData 함수를 실행합니다. 이전의 예제와 같이 get(‘/’) 리퀘스트가 testFile.txt 파일을 읽어들이는 이벤트를 발생시킵니다. 여기서는 fileName 파라미터를 이용해서 readFileContent함수에 넘겨줬습니다. 파일시스템 모듈의 .readFile() 메소드가 파일데이터를 리턴하고 우리는 그것을 show event를 호출하며 두번째 매개변수로 넘겨줍니다. show 이벤트는 showData함수를 호출할 것입니다. showData의 매개변수로 파일데이터를 넘겨주고 그것을 보여주게 될 것입니다. 결과를 확인하시죠.

Output for using multiple events to read a file.

이제 이 방법으로 우리는 여러개의 이벤트를 더욱 우아하고 제어된 방식으로 순서에따라 실행하여 처리할 수 있게 되었습니다. 좋습니다 이제 이 예제를 또 다른 예제에 추가해서 조건을 기반으로 이벤트를 어떻게 처리해서 보여줄 수 있도록 합시다.

An example showing usage of multiple events.

한번에 너무 많이 늘렸나요? 진정하세요 무슨일이 일어났는지 순서에 따라서 분리해서 설명을 해드릴겁니다. 시작해봅시다.

  1. 먼저 get(‘/’) route가 발생하면 read 이벤트를 발생합니다. testFile.txt file name을 전달합니다. (53번째 줄)
  2. .on() 메소드를 사용해서 이제 각 발생한 이벤트마다 함수를 할당해줍니다. (7번쨰 줄부터 12번째 줄)
  3. 이전의 예제와 마찬가지로 showData 함수안에 data가 있습니다. 여기서 data를 전달해주며 check라는 또다른 이벤트를 발생합니다. (26번째 줄)
  4. checkData 함수에서는 주어진 data 파라미터 값으로 사용합니다. 이 함수에서는 읽기 완료된 파일에 단어가 존재하는지 확인합니다. 악성코드 탐지 프로그램처럼 간주하는 것이죠
  5. 자바스크립트의 .includes() 메소드를 사용해서 string에 하위문자열이 있는지 아닌지 체크합니다. data에 virus가 있는지 확인할 것입니다. (31번째 줄)
  6. 하위문자열(virus)이 string에 존재한다면 success 이벤트가 발생하고 그렇지 않으면 failed가 발생합니다. (32 ~ 34번째 줄)
  7. 위의 두 함수는 성공적으로 끝나게 되면 finish 이벤트를 호출합니다 (40&45번째 줄)
  8. finish 이벤트가 발생하면 finishedFunction을 실행하며 더이상 구독할 이벤트가 없는 것으로 간주하고 종료합니다.

위의 예제는 다음의 결과를 출력합니다.

Output for above stated example if the substring is not present in the string.

그리고 testFile.txt에 virus 단어가 있다면 다음과 같은 결과를 출력합니다.

center> </center> Output for above stated example if the substring is present in the string.

재밌지않나요? Event Emitters에는 다른 것도 엄청나게 많습니다만 초보들에게 가능하면 친숙하게 보여지길 바랬습니다. 자 그래서 이것이 여러분이 Node.js 프로세스와 개별적 이벤트&커넥트를 여러분이 원하는 대로 나누는 방법입니다. 이 기사가 많이 도움이 되었으면 좋겠네요.

Summary

  • Node.js에서 Event Driven programming 예제

© 2019. All rights reserved.

Powered by Hydejack v8.1.1