이 튜토리얼에서는 Redis 데이터스토어를 발행/구독(Publish/Subscribe) 메시징 시스템으로 활용하는 방법을 알아봅니다.
Redis Pub/Sub 시스템이란?
Redis는 발행/구독(Publish/Subscribe) 메시징 패러다임을 구현하고 있습니다. 이 패러다임에서는 메시지를 보내는 쪽인 발행자(Publisher)가 특정 수신자인 구독자(Subscriber)에게 직접 메시지를 전송하도록 프로그래밍되지 않습니다. 대신 발행자는 어떤 구독자가 메시지를 받을지, 아니면 아무도 받지 않을지조차 알지 못한 채 특정 채널에 메시지를 발행(publish)합니다.
반대로 메시지를 받고 싶은 구독자는 하나 이상의 채널을 구독(subscribe)함으로써 자신의 관심을 표현하며, 누가 메시지를 보냈는지 알지 못한 채 해당 채널에 발행된 메시지만 수신하게 됩니다.
Redis 용어로 정리하면 다음과 같습니다.
- 발행자(Publisher): 메시지를 채널에 발행하는 주체
- 구독자(Subscriber): 하나 이상의 채널을 구독하여 메시지를 소비하는 주체
메시지에는 어떤 종류의 정보든 담을 수 있습니다. 단순한 텍스트 메시지일 수도 있고, 작업 처리에 필요한 정보일 수도 있습니다. 구독자는 원하는 만큼 여러 채널을 동시에 구독할 수 있으며, 발행자 역시 어떤 채널에든 자유롭게 메시지를 발행할 수 있습니다.
이처럼 발행자와 구독자가 서로 결합되지 않은 구조(decoupling)를 가지기 때문에 시스템의 확장성과 유연성이 크게 향상됩니다.
Pub/Sub과 키-값 데이터베이스의 관계
Redis Pub/Sub은 Redis의 키-값(Key-Value) 데이터베이스와는 아무런 관련이 없습니다. 데이터베이스 번호를 포함해 어떤 수준에서도 서로 간섭하지 않습니다. 예를 들어, 발행자가 db 인덱스 10에서 메시지를 발행하더라도 db 인덱스 1에 접속한 구독자도 해당 메시지를 정상적으로 받을 수 있습니다.
Redis Pub/Sub 주요 명령어
Redis Pub/Sub과 관련된 핵심 명령어는 다음과 같습니다.
| 번호 | 명령어 | 설명 |
|---|---|---|
| 1 | PSUBSCRIBE | 지정된 패턴과 일치하는 하나 이상의 채널 구독 |
| 2 | PUBSUB | Pub/Sub 시스템의 현재 상태 조회 |
| 3 | PUBLISH | 특정 채널에 메시지 발행 |
| 4 | PUNSUBSCRIBE | 지정된 패턴과 일치하는 하나 이상의 채널 구독 해제 |
| 5 | SUBSCRIBE | 하나 이상의 채널 구독 |
| 6 | UNSUBSCRIBE | 하나 이상의 채널 구독 해제 |
실습 예제
이번 예제에서는 redis-cli 인스턴스 세 개를 사용해 Redis Pub/Sub 시스템을 직접 시연해 보겠습니다. 첫 번째 클라이언트는 C1과 C2 두 개의 채널을 구독하고, 나머지 두 클라이언트는 각각 C1 채널과 C2 채널에 메시지를 발행합니다.
1. 첫 번째 클라이언트 – C1, C2 채널 구독
첫 번째 클라이언트가 C1과 C2 채널을 구독합니다.

2. 두 번째 클라이언트 – C1 채널에 메시지 발행
두 번째 클라이언트가 C1 채널에 Hello 메시지를 발행합니다.

3. 세 번째 클라이언트 – C2 채널에 메시지 발행
세 번째 클라이언트가 C2 채널에 World 메시지를 발행합니다.

4. 결과 확인 – 구독자가 메시지 수신
첫 번째 클라이언트 화면에 C1과 C2 채널에서 전달받은 메시지가 순서대로 표시됩니다.

참고 자료
- Redis 공식 문서 – Pub/Sub 명령어
이 글이 도움이 되었다면 댓글로 의견을 남겨주시고, 주변에도 널리 공유해 주세요!