- [Backend] EDA2025년 07월 15일
- 아몬드맛빼빼로
- 작성자
- 2025.07.15.:06
반응형
MSA
나의 애플리케이션을 ‘독립적으로 배포 가능한 서비스 단위’로 분할을 하여, 서로 간의 변경과 조합이 가능하도록 이루는 구조를 갖는 것을 의미하며 현대적 백엔드 개발의 중심적인 아키택쳐로 평가받고 있다.

그러나 공학에서 '완벽'은 없듯이
문제점 설명 서비스 간 통신 문제 각 서비스는 독립적으로 배포되고 운영되기에 다른 서비스와 통신시 지연이 발생할 수 있다. 데이터 일관성 문제 각 서비스는 독립적인 데이터를 각각 가지고 있기에 서비스가 서로 다른 데이터를 가져 문제 발생의 여지가 있다. 트랜젝션 문제 서비스가 독립적으로 동작하기에 각각의 서비스에서 발생하는 트랜젝션을 확인하기 어렵다. 이러한 문제들이 있다.이러한 문제들을 일정 부분 해결할 수 있는 것이 EDA,이벤트 기반 아키택쳐이다.
E..D..A?
기본적으로 이벤트 기반 아키택쳐는 Pub-Sub(발행-구독) 패턴이다.무언가 상태변화가 발생하면 발행자는 이벤트를 발행(publicatio)하고 미리 해당 이벤트를 구독(subscription)해둔 수신자가 해당 이벤트를 수신하여 사전 정의된 동작을 수행한다.이러한 구조를 통하여 이벤트를 발행하는 발행자와 이벤트를 처리하는 수신자는 독립적으로 운영되며 느슨한 결합을 유지할 수 있다.덕분에 확장성과 유연성을 극대화 할 수 있으며 서비스 간 통신 문제를 일정량 해결할 수 있다.

다음 EDA 예시에서는 이벤트가 다음 순서로 처리된다.
1. 이벤트 생성자(Event Proceducers)인 'WebSite'내에서 '이벤트(Event)'가 발생한다
- 사용자가 웹 사이트에서 '물품'을 구매하기 위해 동작을 수행
2. 해당 이벤트는 이벤트 라우터(Event Router)로 전달된다.
- 사용자의 물품 구매를 위한 이벤트가 라우터로 전달
3. 이벤트 게시가 수행되기 전에 이벤트 라우터(Event Router)를 통해, 'Order Events'에 대한 이벤트 수신에 대한 구독을 지정한 이벤트 소비자(Event Consumers)인 'Order Service'가 있다
- Order Service는 Order Event를 받겠다는 구독을 이벤트 라우터로부터 해 둔 상태
4. 이벤트 라우터로 해당 이벤트가 전달이 되면, 이벤트 소비자(Event Consumers)인 'Order Service'로 전달된다
- Order Event가 발생하여 라우터를 통해 Order Service로 전달
5. 이벤트 소비자(Event Consumers)에서는 이에 대한 이벤트들을 통해 이후 동작 처리를 수행한다
- Order Service에서는 추가적으로 Order State Store의 상태를 변경하고 Shopping Service에게 이벤트를 전달하여 Shopping State Store의 상태를 변경앞서 언급되었든 MSA의 일부 문제들을 보완할 수 있다.
MSA의 문제 EDA의 특징 설명 서비스 간 통신 문제 통신 복잡성 해결 이벤트 라우터'를 통해 서비스 간의 통신을 중계하므로 통신 복잡성이 감소하고, 느슨한 결합으로 인해 네트워크 지연이나 통신 오류에 대한 영향 역시 감소한다. 데이터 일관성 문제 데이터 일관성 유지 이벤트의 상태 변화를 통해 데이터를 공유하므로, 독립적인 서비스 간의 데이터 일관성을 유지하는 데 도움이 된다. 트랜젝션 문제 트랜잭션 관리 개선 '이벤트 기반'으로 동작하므로, 여러 서비스에서 발생하는 트랜잭션을 더 효과적으로 관리할 수 있다. EDA의 그 외 특징
특징 설명 이기종 시스템의 통합 각 시스템 간의 기술스택의 독립성을 유지하면서 상호 운용성을 유지하고자 할때 유용하다. 시스템 변경과 확장 시스템 간의 느슨한 결합을 지원하므로, 변경이나 확장이 필요한 경우 시스템의 다른 부분에 큰 영향을 주지 않고 변경이나 확장을 할 수 있어 유연성이 향상된다. 팬아웃 및 병렬 처리 이벤트에 반응하여 작동해야 하는 시스템이 많은 경우, EDA를 사용하여 각 소비자에게 푸시할 사용자 지정 코드를 작성할 필요 없이 이벤트를 팬아웃할 수 있으며 동시에 병렬 처리가 하다. 더보기팬아웃?
- 한 이벤트를 여러 수신자에게 전달하는 것을 의미한다.
- 이벤트 기반 아키텍처에서는 중앙 이벤트 라우터가 여러 소비자에게 동시에 전송하므로 각 소비자는 동일한 이벤트를 독립적으로 처리할 수 있다.
- 이를 통해 시스템은 병렬 처리를 할 수 있고 이는 성능 향상과 확장성에 도움이 된다.
'Backend' 카테고리의 다른 글
[Backend] pt-online-schema-change (0) 2025.09.04 [Backend] 네이버가 오픈소스를..? Fixture Monkey (0) 2025.08.24 [Backend] OAuth와 JWT (0) 2025.06.08 [Backend] MQ (0) 2025.05.05 [Backend] CloudWatch 이론 (0) 2025.04.29 다음글이전글이전 글이 없습니다.댓글