강의

멘토링

로드맵

Inflearn brand logo image

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

qheogus55님의 프로필 이미지
qheogus55

작성한 질문수

가장 쉽고 깊게 알려주는 Kafka 완벽 가이드 [ By. 비전공자 & Kakao 개발자 ]

넷플릭스는 어떻게 끊김없이 영상을 추천할까? (Kafka 아키텍처 파헤치기)

이벤트 기반 주문 질문 있습니다.

해결된 질문

작성

·

8

·

수정됨

0

MSA기반 주문 서비스에서 동기식으로 호출할때 재고 차감 - 쿠폰 사용 - 주문 완료 이런식으로 구성되어 있을때 쿠폰 사용 실패일때는 바로 사용자에게 응답이 가능하다고 생각을 하고 있습니다.

하지만 EDA기반으로 재고 차감 - 쿠폰 사용 - 주문 완료를 구현하면 주문이 완료되고 쿠폰사용에 실패가 되어 사용자는 주문이 완료되었지만 다시 실패메시지가 가고 그때서야 이유를 알수 있다고 생각을 하고 있습니다.

그래서 사용자 경험 상 동기식이 맞다고 판단되는데 제가 잘못 생각을 하고 있는걸까요?

MSA 기반 EDA 주문 구조에서 재고가 부족하여 실패한다면 사용자에게 바로 응답을 해줄수 있을까욤?.

답변 2

0

Hong님의 프로필 이미지
Hong
지식공유자

안녕하세요 qheogus55님 질문 남겨주셔서 감사합니다.

이 부분은 어떤 기능을 EDA 아키텍처를 도입해서 사용할지를 정해야 하는거 같아요.

 

말씀해주신 부분처럼 사용자 경험 관점에서는 당연히 동기식이 더 직관적입니다. 실패인지 성공인지 알 수 있기 때문이에요. 하지만 상황에 따라서 일부 처리를 EDA 기반의 아키텍처로 뺼수도 있겠죠

 

예를들어서 사용자가 성공했다는 행위를 쿠폰 발급까지만 진행하고, 쿠폰 발급에 대힌 메일 전송과 같은 기능은 이벤트화해서 처리하거나 이런식으로 시간이 오래 소요 될 수 있는 행위에 대해서는 이벤트화 하는것이 좋습니다.

 

EDA 기반의 아키텍처에서 가장 큰 문제가 될 수 있는 부분이 말씀해주신 재고와 관련된 서비스 입니다.

그래서 간단하게 해결을 하자면

1. 재고 확인
2. 확인 후 문제가 없다면, 이벤트를 전송 (이떄 해야하는 작업이 많겠죠)
3. 특정 이벤트 작업 후 재고 처리
    3.1 에러가 발생하면 복구 트랜잭션 발행
    3.2 아니면 성공하는 이벤트들에 대해서 추가적으로 수집하여 전체적인 총괄 처리

이런식으로 해결하는것이 일반적인 패턴입니다.

그래서 이런 구현에 대해서 Saga 패턴도 고민해 보시면 좋을꺼같아요.

 

질문에 대한 답변이 되었으면 좋겠네요. 혹시 추가적인 질문 있다면 남겨주세요!! 감사합니다 :)

0

안녕하세요, 인프런 AI 인턴입니다. qheogus55님.

질문하신 이벤트 기반 아키텍처(EDA)와 동기식 아키텍처에서의 사용자 경험 차이에 대해 고민하고 계신 것 같습니다. 이 주제는 시스템의 설계 결정에서 매우 중요한 측면을 다루고 있기 때문에 깊이 있는 이해가 필요합니다.

동기식 방식:

  • 특징: 각 요청마다 즉각적으로 다음 단계로 진행 여부를 결정합니다. 예를 들어, 재고 차감이나 쿠폰 사용이 실패하면 즉시 사용자에게 응답하여 실패를 알리고, 이를 처리할 수 있습니다.
  • 장점: 사용자 경험 면에서 즉각적인 피드백을 제공하여 직관성을 높입니다.
  • 단점: 각 서비스가 서로 강하게 결합되어 있으며, 성능상의 병목 현상이 발생할 수 있습니다. 특히, 여러 서비스가 연계된 경우, 하나의 서비스 문제로 전체 프로세스가 중단될 수 있습니다.

이벤트 기반 아키텍처(EDA):

  • 특징: 서비스들이 비동기적으로 메시지를 통해 상호작용하게 되며, 각 서비스는 독립적으로 처리됩니다. 재고 차감, 쿠폰 사용, 주문 완료가 각각의 이벤트로 처리됩니다.
  • 장점: 높은 확장성과 서비스 독립성, 시스템의 복원력이 큽니다. 여러 이벤트가 병렬로 처리될 수 있으므로 확장성이 증가합니다.
  • 단점: 사용자에게 즉각적인 피드백을 주기 어렵고, 복잡한 에러 처리 로직이 필요할 수 있습니다.

사용자 경험 관련:

EDA 기반에서 쿠폰 사용의 실패와 같은 의존적인 이벤트로 사용자 경험을 개선하기 위해서는, 시스템이 실패 시점을 사용자에게 신속하게 알릴 수 있도록 설계를 개선할 수 있습니다. 예를 들면, 사용자에게 주문의 각 단계에 대한 실시간 피드백을 UI에 노출하고, 쿠폰 사용 실패 시 주문을 자동 취소하는 등의 정책을 설정할 수 있습니다.

추가적인 방안:

  1. CQRS와 이벤트 소싱: 이벤트 기반의 복잡성을 감소시키고 일관성을 증가시키는 방법으로 CQRS와 이벤트 소싱 같이 활용할 수 있습니다.
  2. 보상 트랜잭션 패턴: 이벤트가 실패할 경우 예를 들어 주문을 디프로세스하고, 주문을 자동 취소하는 등의 대응 전략을 마련할 수 있습니다.

관련하여 더 깊이 있는 논의가 필요하시다면, 이벤트 기반 아키텍처와 마이크로서비스 패턴 관련 자료를 참고해 보시는 것도 좋겠습니다.

저는 질문자님의 이해를 돕고자 관련 논의를 포함한 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

qheogus55님의 프로필 이미지
qheogus55

작성한 질문수

질문하기