이때 메시지 큐를 이용하면 문제를 해결할 수 있습니다. A 애플리케이션은 고객에게서 데이터 처리 요청을 받아 와 메시지 큐에 전달합니다. B 애플리케이션의 응답을 기다리지 않으니 이제 두 번째 데이터 처리 요청을 받을 수 있습니다. 이 요청도 메시지 큐에 전달하기만 하면 됩니다. 응답 속도가 향상되겠군요. 다음으로 B 애플리케이션이 잠시 꺼졌다가 켜져도 문제없이 작동할 것입니다. 데이터 처리 요청은 큐에 쌓여 있고 B 애플리케이션이 꺼내 가기 전에는 큐에 계속 있을 테니까요. 다시 말해 비동기식으로 데이터를 전송할 수 있습니다. 큐를 활용하여 문제를 획기적으로 해결할 수 있지요.
실제 웹 서비스에 적용된 사례를 살펴보겠습니다. 마이크로서비스 아키텍처는 이제 친숙한 개념이 되었습니다. 하나의 거대한 애플리케이션이 아니라 서비스별로 작게 쪼개 서로 독립적으로 기능을 수행합니다. 여러 서비스로 쪼개다 보면 서비스 간에 데이터 통신이 필요해지는데, 이때 메시지 큐를 이용합니다. 앞서 언급했던 모든 장점을 가지게 되지요. 한 예로 주문 서비스를 주문 요청 서비스와 결제 서비스, 배송 서비스 등으로 쪼개고, 서비스 간에 메시지 큐로 요청을 전달하면 획기적으로 응답 시간을 줄일 수 있습니다. 대표적인 메시지 큐로는 RabbitMQ, ActiveMQ, Kaf ka 등이 있습니다.
이제 한 가지 상황을 가정하고 이 문제를 생산자-소비자 패턴을 이용해서 해결해 봅시다. 멀티스레딩과 파이썬의 스레드-안전 큐를 이용해서 모델링할 것입니다. 키오스크 한 대와 요리 로봇 세 대를 이용해서 무인 음식점을 열 계획이라고 하겠습니다. 파는 음식은 피자와 치킨입니다. 키오스크는 고객에게서 거의 실시간으로 주문을 받을 수 있고, 요리 로봇은 음식을 만드는 데 시간이 10초 걸립니다. 하루에 피자, 치킨을 합쳐 딱 열 개만 팔려고 합니다.