Event가 생겼을 때 이를 감지하고 소비하는 방향으로 프로그래밍하는 방식임. 기본적으로 Event Hander(Consumer)가 Event Emitter에 의존성을 가지지 않아도 되기에 MSA에서 자주 사용하는 방식임. 단 Broker에 의존성을 강하게 가지게 되어 서버가 터지면 말짱 꽝임.
자연스럽게 클라이언트와 서버는 서로를 몰라도 되기에 추상화된 형태로 브로커에 접근할 수 있고 비동기 처리나 확장성이 생김.
종류는 크게 2가지로 이벤트 리스너 방식과 이벤트 큐 방식이 있음.
이벤트 리스너 : EventEmitter가 이벤트를 채널로 보내면 이벤트 채널이 등록된 Event Listener의 Method를 확인하고 호출하는 방식임. 보통 UI 프레임웤이 많이 사용함.이벤트 큐 : 이벤트 큐에 이벤트를 쏘면, Event Loop가 이를 감지하고 Consumer에게 뿌려주는 방식임. Consumer가 이를 Pulling하고 있다가 받는 구조임.
보통 비동기 메세징 큐들이 이렇게 구현되어 있음.참고 : https://velog.io/@limprove89/이벤트-기반-프로그래밍-쓰레드#이벤트-드리븐-아키텍쳐
http://okminseok.blogspot.com/2019/04/event-driven-architecture.html
비동기 메세징 큐
https://medium.com/dtevangelist/event-driven-microservice-란-54b4eaf7cc4a
보통 대용량 트래픽을 처리할 때 메시지 큐를 이용한다.
메세지 큐가 중간에 Broker 역할을 해줘서 요청을 저장하고 있기에 만약 서버가 장애가 발생하여 Failover 처리만 되면 기존의 요청들을 처리할 수 있다.
2. 서버 부하를 예측가능하게 줄일 수 있음
클라이언트가 자원을 많이 필요로 하는 요청들을 한 번에 많이 남길 경우 메시지 큐가 없다면 한 번에 많은 요청을 처리하다가 장애가 생길 수 있음. 메시지 큐를 사용하면 순차적으로 요청들을 처리할 수 있어 부하를 줄일 수 있다.
3. 쉽게 확장할 수 있음