메시지 큐란 무엇인가
메시지 큐(Message Queue)는 데이터를 보내는 쪽(Producer)과 받는 쪽(Consumer) 사이에 위치해서, 메시지를 임시로 저장해주는 중간 저장소입니다. Producer는 메시지를 큐에 넣기만 하면 되고, Consumer는 자신의 속도에 맞춰 큐에서 메시지를 꺼내 처리합니다. 두 시스템이 서로의 상태나 처리 속도를 신경 쓰지 않고 독립적으로 동작할 수 있게 해주는 것이 핵심입니다. 대표적으로 RabbitMQ, Kafka, Amazon SQS 같은 도구가 메시지 큐 역할을 합니다.
동작 원리와 비유로 이해하기
메시지 큐를 이해할 때 흔히 드는 비유가 음식점 주문서입니다. 손님(Producer)이 주문을 하면 주방(Consumer)이 바로 요리를 시작하지 않아도, 주문서를 주문판(큐)에 걸어두면 손님은 자리에 앉아 기다릴 수 있습니다. 주방은 순서대로 주문서를 꺼내 요리를 진행하죠. 만약 주방이 바쁘더라도 손님이 계속 기다리며 서 있을 필요가 없는 것처럼, 메시지 큐를 사용하면 요청을 보낸 쪽이 응답을 기다리지 않고 다음 작업을 이어갈 수 있습니다.
동작 흐름은 보통 다음과 같습니다.
- Producer가 처리할 작업을 메시지로 만들어 큐에
publish합니다. - 큐는 메시지를 순서대로 또는 우선순위에 따라 저장합니다.
- Consumer가 큐를 구독(subscribe)하고 있다가 메시지를 꺼내 실제 로직을 처리합니다.
- 처리가 끝나면 Consumer는 완료 신호(ack)를 보내고, 큐는 해당 메시지를 삭제합니다.
실무에서 비동기 처리가 필요한 이유
동기 처리 방식에서는 하나의 요청이 끝날 때까지 다음 작업을 진행할 수 없습니다. 예를 들어 회원가입 시 이메일 발송, 알림 전송, 통계 업데이트 등을 모두 즉시 처리하려고 하면 사용자는 응답이 올 때까지 오래 기다려야 하고, 이메일 서버가 느려지면 전체 서비스가 지연됩니다.
메시지 큐를 도입하면 회원가입 요청 자체는 빠르게 응답을 반환하고, 이메일 발송이나 통계 업데이트 같은 부가 작업은 큐에 쌓아두었다가 별도의 워커가 순차적으로 처리합니다. 이렇게 하면 다음과 같은 장점이 생깁니다.
- 서비스 간 결합도가 낮아져 한쪽 시스템에 장애가 생겨도 전체 서비스가 멈추지 않습니다.
- 트래픽이 급증해도 큐에 메시지를 쌓아두고 순차적으로 처리해 시스템 부하를 조절할 수 있습니다.
- 실패한 작업을 재시도하거나 로그를 남기기 쉬워 안정적인 운영이 가능합니다.
결국 메시지 큐는 시스템을 유연하고 확장 가능하게 만들어주는 핵심 인프라로, 대규모 트래픽을 다루는 서비스일수록 그 필요성이 커집니다.