인프런 커뮤니티 질문&답변
코레오그래피 방식으로 SAGA 패턴을 구성할때 메시지 설계는 어떤식으로 해야하는지 궁금합니다
작성
·
17
0
안녕하세요 강의를 보면서 SAGA 패턴에 대해 공부하면서 궁금한 부분이 생겼습니다
코레오그래피 방식으로 주문 비지니스를 구성한다고 할때 메시지 브로커를 통해서 자신의 역할만 수행한다고 하셨는데 그러면 각 서비스가 어떻게 메시지를 설계해야하는지 궁금합니다
주문서비스가 주문 요청을 받으면 재고 서비스에 주문한 상품에 대한 재고 감소를 진행하고 마지막으로 결제서비스가 결제를 진행할때 결제에 대한 금액을 결제서비스가 재고 서비스의 API를 통해 상품의 가격을 조회후 결제를 진행하는것인지 아니면 재고 서비스가 재고 감소를 실행하면서 상품의 가격 정보도 같이 재고 감소 성공 메시지에 추가하여 결제서비스가 이 메시지 정보를 통해 결제를 진행하는것인지 궁금합니다
답변 1
0
안녕하세요 minsik2434님 질문 주셔서 감사합니다.
기본적으로 코레오그래피 패턴을 구현하신다면, 특정 서비스의 API를 호출하면서 동작하지 않습니다. EDA 기반의 아키텍처가 기본이기 떄문에 보통은 모두 다 메시지를 통해서 처리를 하게 됩니다.
물론 어쩔 수 없는 상황은 항상 존재합니다. 필요하다면 API도 가능하겠죠
이러한 상황에서 처리해야하는 정보를 이벤트에 담아서 전송을 하는 형태로 진행이 될 겁니다.
예를들어서 (주문 → 재고 → 결제) 흐름으로 흘러간다면,
주문 서비스(Order Service)
사용자가 주문 요청을 하면
OrderCreated이벤트를 발행할 겁니다.메시지에는 주문 식별자, 주문한 상품 목록, 수량, 사용자 정보 정도가 포함될겁니다.
이정도 포멧이면 될 꺼 같아요.
{
"eventType": "OrderCreated",
"orderId": "123123123",
"userId": "USER",
"items": [
{ "productId": "001", "quantity": 2 },
{ "productId": "2002", "quantity": 1 }
]
}
재고 서비스(Inventory Service)
OrderCreated이벤트를 구독하고, 주문에 포함된 상품의 재고를 감소시킵니다.재고가 충분하면
InventoryReserved이벤트를 발행하고, 부족하면InventoryFailed이벤트를 발행합니다.이때 상품의 가격 정보나 결제에 필요한 정보가 있다면, 재고 서비스가 이를 이벤트에 포함시켜 다음 단계로 전달할 수 있습니다.
여기서 핵심은 뭔가 추가적인 정보가 필요하다면, 이 이벤트를 담아서 전송을 하는 겁니다. 그래야 다른 서비스가 해당 값을 참조하여 처리하는것이죠
질문에 대한 답변이 되었을까요?? 뭐든 다른서비스가 처리해야 할 정보가 있다면 단순하게 포함만 시켜서 전달한다 라고 이해하시면 더 편하실꺼 같아요. 감사합니다.





감사합니다 각 서비스가 발행해야하는 메시지가 궁금했는데 이해가 잘 되었습니다