이벤트 시스템(1) - 소개

hyozkim·2020년 2월 14일
0

도메인 이벤트란?

  • A representation of something that happened in the domain.(DDD)
  • A domain event is, something that happened in the domain that you want other parts of the same domain(in-process) to be aware of.

-> 도메인 모델에서 어떤 일이 일어났을 때(상태가 변경) 이를 대표하는 이벤트를 도메인 이벤트라고 하고 다른 도메인에 이를 알고 자신의 상태를 변경할 수 있다.

도메인 이벤트를 전파시키면서 자신의 해야할 일을 하고, 그 이벤트를 받은 서비스가 자체적으로 다른 이벤트를 만들어 가는 것을 이벤트 드리븐(Event Driven) 이라고 말한다.

예를 들어, 회원 가입을 하면 "유저가 가입을 했다"라는 이벤트를 발생시킵니다. 가입 이벤트를 다른 서비스에 전파시킬 수 있습니다. 웹 푸쉬 서비스, 이메일을 보내기 서비스, 친구 추천 서비스 등 전파를 시킬 수 있습니다. 또한, 다른 서비스들 또한 전파를 시킬 수 있다.

메소드 콜 방식으로 처리?

도메인 이벤트가 아닌 기존의 방식(메소드 콜)으로 처리하고자 한다고 가정해보자.
이벤트(메시지)를 받을 대상이 추가될 때마다 매번 수정을 해야한다.

예를 든 것처럼, 회원 가입시 join 메소드가 호출되면 웹 푸쉬, 이메일 보내기, 친구 추천 각 서비스 메소드를 모두 호출해야 한다. 만약 새로운 메시지를 받을 대상이 추가된다면 매번 join 메소드 상위 UserSerive를 변경해야 한다.

이벤트버스(EventBus, Messae Broker 동일)을 사용하게 되면 매우 강하게 결합된 연관관계를 느슨하게 만들 수 있다. 즉, microservice로 쪼개어 운영이 가능하다.

도메인 이벤트 처리시 장점

  • 이벤트 핸들러는 특정 도메인 이벤트에 반응하고 필요한 처리를 수행
  • 비지니스 로직 복잡도 감소
  • 비지니스 로직 사이의 결합도 감소
    • 모델 수정에 따른 영향이 최소화 됨
    • 추가적인 기능은 핸들러를 추가하면 됨
    • microservice로 다른 독립적인 서비스로 확장 가능
  • Kafka,EventBus,Azure,RabbitMQ 등 같은 메시지 브로커를 통해 쉽게 확장할 수 있음

Domain Driven Architecture

1) Event Update Command 발생
2) 해당 서비스 DB update
3) EventBus(Message Broker) 발행(Publish)
4) EventBus(Message Broker)로부터 구독(Subscribe)

Eventual consistency between microservices based on event-driven async communication.
(이벤트 드리븐을 기반으로 모든 마이크로서비스 데이터 일관성 비동기화 처리)

EventBus와 Kafka 용어 및 동작 차이점

이름구분 방법Publish/Subscribe 채널저장 방식
kafkaTopicEventBusfile system(재처리가능)
guavaClass TypeMessage BrokerQueue

분산 트랜잭션 처리

publish, subscribe event 처리시 에러가 나서 취소를 해야하는 경우는 어떡하나요?
정합성이 틀어진 경우? 트랜잭션 처리 체크를 해야 한다.

1) Two Phase Commit
2) SAGA Pattern

order가 잘 완료됬는지? 트랜잭션 완료에 대한 신호.
이벤트 기반으로 분산 트랜잭션 처리를 잘 할 수 있다.
복구 로직을 생각하면서 짜야함.
이 서비스 밖에서 처리.. (배치 처리를 하던가.. 주문자가 취소를 하던가.. 운영자가 취소하던가..) DB상태가 봐뀌었나 이런식으로 체크하는게 아니고, 모든 것을 이벤트 기반으로 한다는 것.

profile
차근차근 develog

0개의 댓글