메시지 큐 (Message Queue)

컴퓨터과학·AI
한 줄 정의: 여러 프로그램(시스템) 사이에서 주고받는 작업 요청을 순서대로 줄 세워 두었다가, 받는 쪽이 자기 속도에 맞춰 하나씩 꺼내 처리하도록 하는 중간 저장소입니다.

쉽게 풀면

병원 접수창구에서 번호표를 뽑고 대기하는 상황을 떠올려 봅시다. 환자(요청)들이 한꺼번에 몰려도, 번호표 시스템(큐) 덕분에 접수 담당자(처리 시스템)는 자기 처리 속도대로 순서대로 한 명씩 응대할 수 있습니다. 메시지 큐도 똑같은 역할을 합니다. 데이터를 보내는 시스템(생산자, producer)이 처리할 작업을 큐에 넣어두면, 받는 시스템(소비자, consumer)이 준비될 때 큐에서 꺼내 처리합니다. 두 시스템이 동시에 켜져 있지 않아도 되고, 받는 쪽이 잠깐 느려지거나 멈춰도 요청이 사라지지 않고 큐에 안전하게 쌓여 있다가 처리됩니다. 이런 방식을 비동기(asynchronous) 처리라고 부르며, 대규모 데이터 수집 파이프라인이나 여러 서버로 나뉜 시스템(마이크로서비스) 간의 통신에 널리 쓰입니다. Kafka, RabbitMQ 같은 소프트웨어가 대표적인 메시지 큐 도구입니다.

왜 중요한가

메시지 큐는 시스템 간의 처리 속도 차이를 흡수하고 장애 상황에서도 요청이 유실되지 않도록 해주기 때문에, 대규모 분산 시스템·클라우드 아키텍처·IoT 데이터 파이프라인을 다루는 논문에서 신뢰성과 확장성을 확보하는 핵심 구성요소로 등장합니다. 특히 여러 서비스가 독립적으로 배포되고 확장되는 마이크로서비스 구조에서는 서비스 간 직접 연결을 줄이고 결합도를 낮추는 수단으로 연구되는 경우가 많습니다.

논문에서는 이렇게 쓰입니다

"실시간으로 수집되는 센서 데이터는 메시지 큐(Apache Kafka)를 통해 버퍼링된 후, 별도의 배치 처리 모듈에서 순차적으로 분석되었다."

이 문장은 한꺼번에 몰려드는 대량의 데이터를 즉시 처리하지 않고, 메시지 큐에 잠시 쌓아둔 뒤 분석 시스템이 여유 있을 때 순서대로 꺼내 처리했다는 뜻입니다.

"마이크로서비스 간 통신에 메시지 큐(RabbitMQ)를 도입함으로써, 특정 서비스에 장애가 발생하더라도 나머지 서비스들의 요청 처리가 지연 없이 유지됨을 확인하였다."

서비스 하나가 멈추더라도 다른 서비스들이 큐에 요청을 계속 쌓아둘 수 있기 때문에, 전체 시스템이 한꺼번에 무너지지 않고 부분적인 장애로 국한된다는 의미입니다. 소프트웨어 공학·분산 시스템 연구에서 시스템의 내결함성을 설명할 때 자주 인용되는 방식입니다.

"IoT 환경에서 다수의 디바이스로부터 발생하는 급격한 트래픽 폭증을 메시지 큐를 이용해 완충함으로써, 백엔드 서버의 처리 부하를 안정적인 수준으로 유지하였다."

단시간에 몰리는 대량의 요청을 서버가 그대로 받아내지 않고 큐가 완충 역할을 해줌으로써 시스템 과부하를 방지했다는 뜻으로, IoT·엣지 컴퓨팅 연구에서 트래픽 관리 기법으로 자주 언급됩니다.

조금 더 깊게 보면

메시지 큐를 논문에서 다룰 때는 메시지가 정확히 한 번만 처리되는지(exactly-once), 최소 한 번은 처리되지만 중복이 발생할 수 있는지(at-least-once), 혹은 유실될 수 있는지(at-most-once) 같은 전달 보장 수준이 중요한 설계 변수로 언급됩니다. 또한 여러 소비자가 동시에 큐를 처리할 때 메시지 순서가 유지되는지, 처리 실패 시 메시지를 어떻게 재시도하거나 별도의 오류 큐(dead letter queue)로 옮기는지도 시스템의 신뢰성을 평가하는 데 함께 고려되는 요소입니다.

주의할 점

메시지 큐를 쓰면 시스템 간 결합도가 낮아지고 안정성이 높아지지만, 메시지가 처리되는 순서 보장 여부나 중복 처리 가능성은 사용하는 큐의 종류와 설정에 따라 달라집니다. 논문에서 데이터 처리 파이프라인을 설명할 때는 이러한 처리 순서와 유실 방지 정책이 결과의 신뢰성에 영향을 줄 수 있다는 점을 함께 확인해야 합니다.

관련 용어