이벤트 드리븐 아키텍처와 스트림 처리 (Spring Cloud Stream)

ayboori·2024년 8월 7일
0

Spring

목록 보기
18/24
post-thumbnail

이벤트 드리븐 아키텍처 (Event-Driven Architecture)

참고

  • 이벤트 드리븐 아키텍처는 시스템에서 발생하는 이벤트(상태 변화나 행동)를 기반으로 동작하는 소프트웨어 설계 스타일입니다. 이벤트는 비동기적으로 처리되며, 서비스 간의 느슨한 결합을 통해 독립적으로 동작할 수 있게 합니다.

주요 개념

  • 이벤트: 시스템 내에서 발생하는 상태 변화나 행동을 나타내는 메시지입니다. 주로 json, xml 등의 포맷으로 교환된다.
  • 이벤트 소스: 이벤트를 생성하여 이벤트 버스에 전달하는 역할을 합니다.
  • 이벤트 핸들러: 이벤트를 수신하여 처리하는 역할을 합니다.
  • 이벤트 버스 (= Queue): 이벤트 소스와 이벤트 핸들러 간의 메시지 전달을 중개합니다. 처리 방식으로는 대표적으로 ActiveMQ, RabbitMQ 가 있으며 메시지 모델로는 Apache Kafka를 많이 활용한다. 

이벤트 드리븐 아키텍처의 장점

  • 느슨한 결합

    • 서비스 간의 강한 종속성을 제거하여 독립적인 개발과 배포가 가능
    • 이벤트 기반 통신을 통해 서비스 간의 결합도 낮춤
  • 확장성

    • 수평 확장이 용이하여 대규모 시스템에서 유용
    • 이벤트 프로듀서와 컨슈머를 독립적으로 확장 가능
  • 비동기 처리

    • 이벤트를 비동기적으로 처리하여 시스템의 응답성 향상
    • 요청과 응답을 비동기적으로 처리하여 성능 최적화

이벤트 드리븐 아키텍처의 단점

  • 복잡성 증가
    • 이벤트 기반 통신으로 인해 시스템의 복잡성 증가 가능
    • 이벤트 흐름과 상태 관리를 체계적으로 설계 필요
  • 장애 전파
    • 이벤트 실패 시 다른 서비스로 장애가 전파될 수 있음
    • 모든 앱이 이벤트 버스를 통해서만 통신하기 때문
    • 이벤트 재처리 및 장애 복구 메커니즘 구현 필요
      ex1) 에러 처리 전용 app으로 전파시키는 queue를 생성해 에러 전파
      ex2) 이벤트 소스로 에러 전파
    • 에러 메시지 확인, 객체, 사유를 담아 에러를 전파 (throw처럼 생각하기) 시켜 에러 처리 app에서 에러에 맞게 동작 (재시도, 작업 저장 등등)

예시: 온라인 쇼핑몰

  1. 이벤트 소스: 사용자가 온라인 쇼핑몰에서 주문을 합니다.
    • 주문 서비스가 '주문 생성' 이벤트를 발생시킵니다.
  2. 이벤트 버스: Kafka나 RabbitMQ와 같은 메시지 브로커가 '주문 생성' 이벤트를 전달합니다.
  3. 이벤트 핸들러:
    • 재고 서비스: '주문 생성' 이벤트를 수신하여 재고를 확인하고 업데이트합니다.
    • 결제 서비스: '주문 생성' 이벤트를 수신하여 결제 처리를 합니다.

기존의 app이 app을 호출하는 방식과 달리 producer와 consumer 사이에 message queue가 존재하는 방식

Spring Cloud Stream

Spring Cloud Stream이란?

  • Spring Cloud Stream은 이벤트 드리븐 마이크로서비스를 구축하기 위한 프레임워크입니다.
  • Kafka, RabbitMQ 등의 메시지 브로커와 통합하여 이벤트 스트리밍을 처리합니다.
  • 프로듀서와 컨슈머 간의 통신을 추상화하여 간편하게 이벤트 기반 애플리케이션을 개발할 수 있습니다.

주요 특징

  • 바인더 추상화: 메시지 브로커와의 통합을 위한 추상화 레이어를 제공합니다.
  • 프로듀서/컨슈머 모델: 이벤트를 생성하고 처리하는 프로듀서와 컨슈머 모델을 지원합니다.
  • 유연한 설정: 다양한 설정 옵션을 통해 손쉽게 커스터마이징할 수 있습니다.
profile
프로 개발자가 되기 위해 뚜벅뚜벅.. 뚜벅초

0개의 댓글