인프런 커뮤니티 질문&답변

백린이님의 프로필 이미지
백린이

작성한 질문수

EDA 기반 Microservice 구현 (with Hexagonal, DDD)

이벤트 흐름 설계 변경

보상트랜잭션 후 클라이언트 알림 방법 등

작성

·

248

0

강사님 덕분에, EDA, DDD, 헥사고날 등 어려운 개념에 대해 좀더 친숙해질 수 있어서 너무 감사합니다!
강의를 다 듣고 몇가지 궁금증이 생겨 질문 남겨요!

 

  1. 대여 취소, 반납 취소 등으로 보상트랜잭션이 필요한 경우, 보통 클라이언트에게 알림(?)은 어떻게 보내나요? 알림 서버를 사용하나요?

  2. EDA 시, 1개의 서버의 응답이 너무 느린 경우, 비동기더라도 느릴수 있는데, 이럴 걸 대비하여 자체적으로 타임아웃시간을 정해서 해당 시간 초과면 시간 초과 응답을 클라이언트한테 보내나요?

답변 1

1

han jeong heon님의 프로필 이미지
han jeong heon
지식공유자

답변드리면.

1의 경우는 클라이언트에 알림을 보내는 방법은 어떤 도메인 성격이냐에 따라 보낼수도 있고 보내는 방법도 너무 다양할 것 같습니다. 일반적인 btc라하면 이메일이나, sms, sns등을 통해 보내고 있고, 보내는 방식도 다양하겠지만 예시와 같이 EDA아키텍처를 사용하는 경우는 동일하게 메시지/이벤트 규를 사용하고 있습니다.

2의 경우는 일반적으로 1개의 서버로 구성하지 않고 여러개의 서버를 클러스터로 구성합니다. 카프카 같은 경우는 가능하고요. 따라서 ^ ^ 비동기라 해서 그렇게 느리지가 않습니다.

백린이님의 프로필 이미지
백린이
질문자

  1. 만약, A라는 이벤트로 인해 X 도메인, Y 도메인, Z 도메인에 상태변경이 필요한대, Y 도메인의 서버 문제로, Y 도메인의 상태가 변경 불가능한 경우, 결국 A 라는 이벤트는 보상 트랜잭션이 필요한대, 이때, 비동기인데, 어떻게 실패에 대한 응답을 클라이언트에게 어떻게 줄까요? 예를 들어, 주문 이벤트인데, 재고 수량 부족으로 주문이 실패한 경우, 클라이언트에게 알려줘야 하는데, 이런 상황은 이메일이나 sms, sns 로 해당 실패 상황을 알리는게 좀 이상할 것 같아서요. 혹시, websocket을 사용할까요?

  2. 아하! 저는 비동기 자체보다는 외부 환경에 의해 예를 들어 네트워크 문제로 통신이 느리거나 끊긴 경우, 프로듀서로 이벤트를 보냈지만, 카프카가 못받는 경우 또는 프로듀서에 이벤트를 보냈지만 컨슈머가 받지 못한 경우 등에 대해 어떻게 처리해야할까 궁금했습니다. 어떻게 보면 1번의 질문과 비슷한 내용 같아요!

백린이님의 프로필 이미지
백린이

작성한 질문수

질문하기