Redis Pub/Sub 메시징

RedisBeginner
지금 연습하기

소개

이 실습에서는 Redis의 Pub/Sub 메시징 시스템을 살펴봅니다. 채널을 구독하고, 메시지를 게시하고, 구독을 취소하는 방법을 학습합니다. SUBSCRIBE, PUBLISH, UNSUBSCRIBE, PSUBSCRIBE 명령어를 사용해 Pub/Sub의 기본 작업을 단계별로 수행합니다.

SUBSCRIBE로 채널 구독하기

이 단계에서는 Redis에서 SUBSCRIBE 명령어를 사용해 채널을 구독하는 방법을 알아봅니다. 채널을 구독하면 해당 채널에 게시된 메시지를 받을 수 있습니다. 이는 Redis Pub/Sub 메시징 시스템의 기본 개념입니다.

터미널 1: 채널 구독

첫 번째 터미널을 엽니다. 여기서는 이 터미널을 터미널 1이라고 부르겠습니다. LabEx 환경에서 제공되는 Xfce 터미널을 사용할 수 있습니다.

redis-cli 명령어를 사용해 Redis 서버에 연결합니다.

redis-cli

Redis 프롬프트가 다음과 같이 표시됩니다: 127.0.0.1:6379>.

SUBSCRIBE 명령어를 사용해 mychannel이라는 채널을 구독합니다.

SUBSCRIBE mychannel

출력은 다음과 비슷합니다.

Reading messages... (press Ctrl-C to quit)
1) "subscribe"
2) "mychannel"
3) (integer) 1

출력의 각 항목은 다음을 의미합니다.

  • "subscribe": 채널 구독이 성공적으로 완료되었음을 나타냅니다.
  • "mychannel": 구독한 채널의 이름입니다.
  • (integer) 1: 현재 구독 중인 채널의 수입니다.

중요: 터미널 1은 redis-cli 세션을 활성 상태로 유지하고 채널 구독 상태로 열어 두세요. 이 터미널을 닫거나 Ctrl+C를 누르지 마세요. 그러면 채널 구독이 취소됩니다. 다음 단계에서는 두 번째 터미널을 사용해 메시지를 게시합니다.

PUBLISH로 메시지 게시하기

이 단계에서는 Redis에서 PUBLISH 명령어를 사용해 채널에 메시지를 게시하는 방법을 알아봅니다. 메시지 게시는 Pub/Sub 시스템의 핵심 기능으로, 특정 채널의 모든 구독자에게 데이터를 전송할 수 있습니다.

터미널 2: 메시지 게시

두 번째 터미널을 엽니다. 여기서는 이 터미널을 터미널 2라고 부르겠습니다. Xfce 터미널에서 새 탭을 열어도 됩니다.

redis-cli 명령어를 사용해 Redis 서버에 연결합니다.

redis-cli

Redis 프롬프트가 다음과 같이 표시됩니다: 127.0.0.1:6379>.

이제 PUBLISH 명령어를 사용해 mychannel 채널에 메시지를 게시합니다.

PUBLISH mychannel "Hello, Redis!"

터미널 2에는 메시지를 받은 클라이언트 수가 표시됩니다.

(integer) 1

이 경우 터미널 1에서 mychannel을 구독하고 있으므로 출력값은 (integer) 1입니다.

터미널 1에서 메시지 확인

이제 터미널 1로 돌아갑니다. 이 터미널은 앞 단계에서 mychannel을 구독한 곳입니다. 방금 게시한 메시지가 실시간으로 표시됩니다.

1) "message"
2) "mychannel"
3) "Hello, Redis!"

각 항목은 다음을 의미합니다.

  • "message": 게시된 메시지임을 나타냅니다.
  • "mychannel": 메시지가 게시된 채널입니다.
  • "Hello, Redis!": 실제 메시지 내용입니다.

실시간 메시징 테스트

이제 실시간 메시징을 직접 테스트할 수 있습니다. 터미널 2로 돌아가 메시지를 더 게시한 다음, 터미널 1로 전환해 메시지가 즉시 표시되는지 확인하세요. 다양한 메시지를 입력해 실시간 통신을 확인해 보세요.

예를 들어 터미널 2에서 다음을 실행합니다.

PUBLISH mychannel "This is message 2"
PUBLISH mychannel "Real-time messaging works!"

중요: 터미널 1터미널 2의 redis-cli 세션을 모두 활성 상태로 유지하세요. 다음 단계에서도 두 터미널을 계속 사용합니다.

UNSUBSCRIBE로 구독 취소하기

이 단계에서는 Redis에서 UNSUBSCRIBE 명령어를 사용해 채널 구독을 취소하는 방법을 알아봅니다. 구독을 취소하면 특정 채널의 구독자 목록에서 클라이언트가 제거되므로 해당 채널에 이후 게시되는 메시지를 더 이상 받을 수 없습니다.

터미널 1: 구독 모드 종료

현재 mychannel을 구독 중인 터미널 1로 이동합니다. "Reading messages... (press Ctrl-C to quit)"라는 구독 상태가 표시되어야 합니다.

터미널 1은 구독 모드이므로 일반 Redis 명령어를 직접 실행할 수 없습니다. Ctrl+C를 눌러 구독 모드를 종료하고 터미널 프롬프트로 돌아갑니다. 그런 다음 Redis에 다시 연결합니다.

redis-cli

이제 UNSUBSCRIBE 명령어를 실행합니다. 연결을 끊는 과정에서 이미 구독이 제거되었지만, 이 명령어를 통해 Redis의 구독 취소 응답 형식을 확인할 수 있습니다.

UNSUBSCRIBE mychannel

참고: Ctrl+C를 누르면 실제로는 모든 구독과의 연결이 이미 종료됩니다. 따라서 여기의 UNSUBSCRIBE 명령어는 동작을 보여 주기 위한 예시입니다. 실제로는 연결이 끊어질 때 모든 채널의 구독이 자동으로 취소됩니다.

터미널 1의 출력은 다음과 비슷합니다.

1) "unsubscribe"
2) "mychannel"
3) (integer) 0

출력의 각 항목은 다음을 의미합니다.

  • "unsubscribe": 채널 구독이 취소되었음을 나타냅니다.
  • "mychannel": 구독을 취소한 채널의 이름입니다.
  • (integer) 0: 현재 구독 중인 채널의 수입니다. mychannel 구독을 취소했으므로 이제 0입니다.

터미널 2: 구독 취소 후 메시지 게시 테스트

이제 터미널 2로 전환해 mychannel에 다른 메시지를 게시합니다.

PUBLISH mychannel "Is anyone still there?"

터미널 2에 다음과 같이 표시됩니다.

(integer) 0

이는 터미널 1에서 채널 구독을 취소했기 때문에 메시지를 받은 클라이언트가 없다는 뜻입니다.

메시지가 수신되지 않는지 확인

터미널 1을 확인하세요. 채널 구독을 취소했으므로 새 메시지가 표시되지 않아야 합니다.

이 과정을 통해 채널 구독을 취소하면 해당 채널에 이후 게시되는 메시지를 받을 수 없다는 것을 확인할 수 있습니다. 게시자는 계속 메시지를 보낼 수 있지만, 이를 받을 구독자는 없습니다.

중요: 다음 단계에서도 사용할 수 있도록 두 터미널과 각 redis-cli 세션을 모두 활성 상태로 유지하세요.

PSUBSCRIBE로 패턴 기반 구독하기

이 단계에서는 Redis에서 PSUBSCRIBE 명령어를 사용해 패턴으로 채널을 구독하는 방법을 알아봅니다. PSUBSCRIBE를 사용하면 지정한 패턴과 일치하는 여러 채널을 한 번에 구독할 수 있습니다. 관련된 여러 채널의 메시지를 각각 구독하지 않고 한꺼번에 받아야 할 때 유용합니다.

터미널 1: 패턴 기반 구독

앞 단계에서 mychannel 구독을 취소했으므로 터미널 1에는 일반 Redis 프롬프트가 표시되어야 합니다.

터미널 1에서 PSUBSCRIBE 명령어를 사용해 news.* 패턴과 일치하는 채널을 구독합니다.

PSUBSCRIBE news.*

출력은 다음과 비슷합니다.

Reading messages... (press Ctrl-C to quit)
1) "psubscribe"
2) "news.*"
3) (integer) 1

출력의 각 항목은 다음을 의미합니다.

  • "psubscribe": 패턴 구독이 성공적으로 완료되었음을 나타냅니다.
  • "news.*": 구독한 패턴입니다. .*는 모든 문자와 일치하는 와일드카드입니다.
  • (integer) 1: 현재 구독 중인 패턴의 수입니다.

터미널 2: 패턴과 일치하는 채널에 게시

터미널 2로 이동해 PUBLISH 명령어를 사용하여 news.sports 채널에 메시지를 게시합니다.

PUBLISH news.sports "Sports news update!"

터미널 2에는 메시지를 받은 구독자 수가 표시됩니다.

(integer) 1

패턴 일치 확인

패턴을 구독한 터미널 1로 다시 전환합니다. 방금 게시한 메시지가 표시됩니다.

1) "pmessage"
2) "news.*"
3) "news.sports"
4) "Sports news update!"

각 항목은 다음을 의미합니다.

  • "pmessage": 패턴과 일치하는 메시지임을 나타냅니다.
  • "news.*": 메시지와 일치한 패턴입니다.
  • "news.sports": 메시지가 실제로 게시된 채널입니다.
  • "Sports news update!": 메시지 내용입니다.

여러 채널 테스트

터미널 2에서 다음과 같이 패턴과 일치하는 다른 채널에도 메시지를 게시해 보세요.

PUBLISH news.technology "New AI breakthrough!"
PUBLISH news.weather "Sunny skies ahead!"
PUBLISH sports.basketball "This won't match the pattern"

터미널 1에서 news.*와 일치하는 채널의 메시지만 수신되는지 확인하세요. sports.basketballnews.* 패턴과 일치하지 않으므로 메시지가 수신되지 않습니다.

중요: 두 터미널과 각 redis-cli 세션을 모두 활성 상태로 유지하세요. 패턴 구독을 사용하면 서로 관련된 여러 채널을 동시에 수신할 수 있습니다.

요약

이 실습에서는 Redis Pub/Sub 메시징의 기본 개념을 살펴보았습니다. SUBSCRIBE 명령어로 채널을 구독하고, PUBLISH 명령어로 채널에 메시지를 게시하며, UNSUBSCRIBE 명령어로 채널 구독을 취소하는 방법을 배웠습니다. 또한 PSUBSCRIBE 명령어를 사용해 패턴과 일치하는 여러 채널을 구독하는 방법도 익혔습니다. 이러한 명령어는 Redis를 활용한 실시간 메시징 애플리케이션을 구축하는 데 필수적입니다.