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

woong choi님의 프로필 이미지

작성한 질문수

시니어 면접관이 알려주는 개발자 취업과 이직 한방에 해결하기 [실전편]

비동기 아키텍처의 이해-1

비동기 메시지 처리 아키텍처 이미지 질문

해결된 질문

작성

·

74

0

image.png

해당 다이어그램을 소개시켜주시는 부분에서 궁금한 부분이 있습니다

결제만 정상적으로 하고 유저에게 성공응답을 주며, 주문완료 이벤트를 발행하게 됩니다. 이때 재고가 없을 경어에 문제가 발생할 것 같은데요.

궁금한점은 재고차감에서 실제 재고가 없어서 차감을 하지 못할 경우에, 유저에게 주문 실패 또는 배송 및 이메일 발송을 모두 최소해야 할 것 같습니다.
따라서 이벤트를 2개로 나누어서, 결제완료 이벤트와 주문완료 이벤트를 분리하거나, 재고 차감까지 동일 트랜잭션으로 묶어야 적절한 그림이 될 것 같은데 어떻게 생각하시는지 궁금합니다.

답변 1

0

코드빌런님의 프로필 이미지
코드빌런
지식공유자

위 시퀀스는 비동기 아키텍처를 설명하기 위한 지극히 일반적인 프로세스의 케이스를 설명한것이라서, 예외 케이스등을 설계한 시퀀스 다이어그램이랑은 다소 차이가 있습니다.

재고의 경우 처리 방식이 상품의 성격이나(안전재고가 있다거나, 0원 상품이 있다거나, 매일 입고가 된다거나), 회사의 프로세스(재고 처리는 주문보다 후처리이므로 주문을 받고, 재고가 없으면 취소 환불 프로세스를 태운다거나)에 디펜던시가 있습니다. 그런 관점을 설명한것은 아니고, 주문과 나머지 프로세스들을 분리할 때 비동기적 입장에서 처리하면 나머지 영역들도 분리할 수 있다는 설명을 위한 이미지라고 이해하시면 될거 같습니다.

 

일반적으로는 주문서를 랜딩할 때 재고를 체크하고, 다시 결제 페이지 진입 전에 재고를 한번 더 체크할 것입니다. 그래서 결제 페이지까지 진입했다면 재고 체크 로직을 통과한 것이기 때문에 뒤에 차감만 태우는것이 맞고, 상품의 재고는 주문 도메인의 영역이 아니라 상품 도메인의 영역이기 때문에 트랜잭션을 분리하고, 비동기적으로 상품에 재고 차감을 요청한다가 비동기 아키텍처의 관점에서는 더 나은 선택이 될걸로 보입니다.

그런데 뒤에 중복된 차감으로 마이너스 재고일 때, 즉, 재고가 없을 경우의 업무는 정책마다 다소 차이가 있을거라, 주문 성공까진 다 처리하고 후에 환불/취소 배치를 돌릴지, 트랜잭션을 재고까지 묶을지는 업무 설계의 방식에 따라서 취사선택할 문제라서 비동기의 관점과는 성격이 다른 영역이라고 이해하시면 되겠습니다.

답변이 도움이 되었으면 좋겠습니다.

좋은 질문 감사합니다.