sitelink1 | https://nodei.co/npm/express-sse |
---|---|
sitelink2 | https://blog.naver.com/jdub7138/221034236810 |
sitelink3 | |
extra_vars4 | |
extra_vars5 | |
extra_vars6 |
* express-sse란? (출처는 sitelink1)
expres-sse는 단순함을 유지한다는 의미를 가지고 있다.
많은 복잡도와 오류 없이 server-sent 이벤트를 보내야 할때를 위한 라이브러리이다.
EventEmitter의 사용을 편리하게 해준다.
* 설치 : npm install --save express-sse
* EventEmitter란?
이벤트이미터는 사전적인 의미로 이벤트 발행자이다.
node.js에 내장되어 있는 옵저버 패턴으로써
emit을 통해 이벤트를 발생시키고 on을 통해 해당 이벤트에 관한 콜백함수를 발동시키는 형식이다.
이는 node.js의 event driven programming이라는 개념에 해당하는 방법이다.
특정 이벤트가 발생되면 그 이벤트에 매핑 되어 있는 함수가 발동 된다.
* EventEmitter를 이해하기 위한 학습 (출처는 sitelink2)
System Event vs Custom Event
프로그래밍에서 이벤트란, 어플리케이션 안에서 발생한 어떤 사건으로서 respond 할 수 있는 것을 말합니다.
NodeJS에서는 이벤트를 2가지로 구분할 수 있는데 하나는 System Event이고 다른 하나는 Custom Event입니다.
System Event는 외부에서 파일 가져오기 등과 같이 컴퓨터 시스템 단에서 처리하는 lower level, closer to the machine한 이벤트들을 말합니다.
이러한 System Event들은 NodeJS의 libuv 라이브러리(C++로 작성)가 담당합니다.
NodeJS의 또다른 이벤트의 형태는 Custom Event, 즉, 임의의 이벤트를 말합니다.
이 부분은 NodeJS의 EventEmitter가 담당하며 JavaScript로 작성되었습니다.
사실 JavaScript에는 Event 개념이 없기 때문에, NodeJS가 제공하는 이 EventEmitter를 활용해서 Event처럼 꾸며주는 것입니다.
Custom Event Emitter 설계
위에서 언급하였듯이, JavaScript는 Event 개념이 없습니다.
이에 JavaScript 환경에서 Event를 생성하고 다루기 위해서는 NodeJS가 제공하는 EventEmitter를 사용하게 됩니다.
NodeJS의 EventEmitter를 활용하기 전에 이 EventEmitter가 어떻게 작동하는지 Custom Event Emitter를 만들어서 이해해보도록 하겠습니다.
참고로 Event를 Emit(방출, 발산)한다는 것은 그냥 Event를 발생시킨다는 의미이며, Event Listener나 Handler는 이렇게 발생(Emit)한 Event를 인지하고 처리하는 역할을 하게 됩니다.
먼저 아래와 같이 emitter.js 파일을 만들고 그 안에 임의의 Emitter를 만들어줍니다.
이 Emitter는 function constructor로서 event들을 저장해두는 object들을 찍어내는 역할을 합니다.
이제 이 function constructor가 찍어낼 object들이 공유할 on 메서드와 emit 메서드를 만들어줍니다.
on 메서드는 특정 이벤트가 발생하면 이를 인지하고 수행할 메서드들을 정의하는 역할을 합니다.
Emitter의 event property object에 새로 'type' property를 Array로 만든 다음, 여기에 수행할 메서드들을 집어넣을 수 있게 합니다.
그리고 emit 메서드는 'type' 이벤트를 발생시키는 역할을 하는 것으로서, on 메서드를 통해 생성된 'type' property Array 안의 메서드들을 실행시키게 됩니다.
이제 이렇게 만든 Emitter를 아래처럼 app.js에서 불러와 활용해봅니다.
on 메서드를 통해 greet라는 이벤트가 발생하면 호출할 함수를 event.greet(또는 event['greet']의 Array에 저장해둡니다.
그리고 emit 메서드를 통해 greet 이벤트를 발생시킵니다.
NodeJS EventEmitter 활용
NodeJS의 events 라이브러리가 제공하는 EventEmitter는 위에서 살펴본 Custom Event Emitter와 거의 흡사합니다.
사실 위에서 작성한 app.js에서 require가 가져오는 파일만 events.js로 바꿔만 주면 됩니다.
이 events.js는 NodeJS의 라이브러리로서 EventEmitter가 담겨져 있습니다.
.
댓글 0
번호 | 제목 | 글쓴이 | 날짜 | 조회 수 |
---|---|---|---|---|
4 | req, res 객체 | 황제낙엽 | 2021.01.14 | 92 |
3 |
google oatuh passport
![]() | 황제낙엽 | 2020.11.12 | 81 |
2 |
google oauth 인증 (구글 로그인)
![]() | 황제낙엽 | 2020.11.12 | 146 |
» | express-sse 모듈과 EventEmitter | 황제낙엽 | 2020.09.20 | 359 |