창고와 배송지 간 거리 찾기
팀원들과 orders 테이블에 주문정보가 생성되고 결제가 이루어지면(payments 테이블) 배송지와 가장 가까운 창고를 찾아서 재고를 1 차감하는 로직을 만들기로 함. Q. 이 경우 결제하는 api에 함께 처리되도록 하는 게 좋을까? 아니면 api를 따로 만드는 게 좋을까?
- 분리된 API 사용
- 결제 처리 후, 결제가 성공적으로 완료되었다는 이벤트를 발생시키고, 이 이벤트를 감지하는 다른 서비스나 함수에서 재고 차감 및 창고 선택 로직을 처리하도록 하자.
- 이벤트 드리븐 아키텍처를 활용
- 배경 처리 (Background Processing)
결제 후 재고 차감은 비동기적으로 처리하여 사용자에게 빠른 응답을 제공하고, 백그라운드에서 재고 관리 로직을 수행할 수 있다.
이벤트 드리븐 아키텍처(Event-Driven Architecture, EDA)
- 시스템이 이벤트를 생성하고, 이를 기반으로 서로 통신하는 방식의 아키텍처
- 다양한 애플리케이션, 서비스, 시스템 간의 결합도를 낮추고, 이벤트를 중심으로 상호 작용한다.
이벤트 드리븐 아키텍처의 주요 개념과 구성 요소
- 확장성: 시스템의 각 부분이 독립적으로 확장될 수 있어 대규모 시스템에서 효과적이다.
- 유연성: 새로운 이벤트 소비자를 추가하거나 변경하는 것이 용이하다.
- 결합도 감소: 컴포넌트 간의 결합도가 낮아 각 컴포넌트를 독립적으로 개발하고 유지보수할 수 있다.
- 내구성과 신뢰성: 이벤트 소비자가 실패하더라도 이벤트는 이벤트 채널에 저장되어 있어 복구 후 처리할 수 있다.