더북(TheBook)

15.1 생산자 -소비자 패턴: 큐

혹시 MQ(Message Queue)란 용어를 들어 본 적 있나요? MQ라는 이름이 강하게 암시하듯 애플리케이션 개발에 큐가 활용된 예입니다. 이렇게 큐가 활용된 패턴을 생산자 -소비자 패턴(producer-consumer pattern)이라고 합니다. 멀티스레드 환경에서 스레드-안전(thread-safe) 큐를 이용하는 사례로 자주 소개하고 있지요. 아주 중요한 패턴이니 한번 살펴볼까 합니다. 이 절에서는 어떤 문제를 해결하는 데 큐를 이용했는지 간단하게 살펴보고, 한 가지 상황을 가정한 후 그 문제를 해결하는 데 생산자 -소비자 패턴을 적용해 봅시다.

메시지 큐에서 메시지란 한 애플리케이션이 다른 애플리케이션에 보내는 데이터를 의미합니다. 두 가지 애플리케이션이 있습니다. A 애플리케이션은 고객에게서 데이터 처리 요청을 받는 서비스를 제공하고, B 애플리케이션은 이 요청을 넘겨받아 실제 데이터를 처리하는 서비스를 제공한다고 합시다. 메시지 큐가 없다면 A 애플리케이션과 B 애플리케이션은 같은 시간에 서로 커넥션을 연결해야 할 것입니다. 그리고 A 애플리케이션은 B 애플리케이션이 데이터를 잘 받아 처리한 후 그 결과를 보내 줄 때까지 기다려야 합니다.

이런 동기식 데이터 송수신은 여러 가지 문제점이 있습니다. 가장 큰 문제점은 A 애플리케이션이 B 애플리케이션의 응답을 기다려야 하기 때문에 A 애플리케이션은 느릴 수밖에 없다는 것입니다. 고객이 두 번째 데이터 처리 요청을 하려면 첫 번째 요청에 대한 응답을 받아야만 합니다. 두 번째로 B 애플리케이션이 작동을 멈추기라도 한다면 A 애플리케이션은 자신이 오류가 난 것도 아닌데 고객에게서 두 번째 데이터 처리 요청을 받을 수 없게 됩니다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.