서비스를 몇 개로 쪼개는 중인데 서비스끼리 어떻게 통신할지에서 계속 막힙니다. 지금은 그냥 다 REST로 서로 HTTP 호출하고 있어요. 주문 서비스가 결제 서비스 부르고, 결제 끝나면 알림 서비스 부르고 이런 식이요.
대충 이런 흐름입니다.
// 주문 서비스
await axios.post('http://payment/charge', data);
await axios.post('http://notify/send', data);
return res.json({ ok: true });
문제는 알림 서비스가 잠깐 죽으면 주문 자체가 실패로 떨어지더라고요. 알림 같은 건 좀 늦게 가도 되는 건데 이것 때문에 주문이 안 되는 게 말이 안 되는 것 같아서요. 그래서 메시지큐(카프카나 래빗MQ) 쓰라는 얘길 들었는데, 이걸 넣으면 뭐가 어떻게 달라지는지 감이 안 잡혀요.
궁금한 점은요. 어떤 호출은 REST로 두고 어떤 건 큐로 넘기는, 그 판단 기준이 뭔가요? 전부 다 큐로 바꾸면 안 되나요? 응답을 바로 받아야 하는 경우(재고 확인 같은)는 큐로 하기 애매할 것 같긴 한데요.
그리고 비동기로 하면 "지금 처리됐는지"를 호출한 쪽에서 모르잖아요. 이런 경우 결과는 어떻게 다시 받아오고, 중간에 메시지가 유실되거나 두 번 처리되면 어떻게 막는지도 궁금합니다. 실무에서 보통 어떻게 섞어 쓰는지 큰 그림이 알고 싶어요.