개발 지식

개발 지식

PHP PHP + Redis로 간단한 Pub/Sub 구현하기

페이지 정보

profile_image
영삼이
0건 189회 25-03-28 23:13

본문

✅ PHP + Redis로 간단한 Pub/Sub 구현하기

Pub/Sub(발행/구독) 패턴은 메시지를 보내는 쪽(Publisher)과 받는 쪽(Subscriber)을 분리하는 비동기 통신 방식입니다. PHP와 Redis를 조합하면 간단하면서 실용적인 메시지 브로커 역할을 구현할 수 있습니다. 이 글에서는 PHP로 Redis Pub/Sub을 직접 다뤄보는 방법을 소개합니다.


📦 Redis 설정 및 PHP Redis 확장

Redis 서버가 설치되어 있어야 하며, PHP에서는 phpredis 확장을 사용합니다.

sudo apt install php-redis

또는 composerpredis/predis 설치 가능:

composer require predis/predis

이 글에서는 phpredis 기준으로 설명합니다.


🚀 퍼블리셔(Publisher) 예제

[code=php]
$redis = new Redis();
$redis->connect('127.0.0.1', 6379);

$channel = 'notifications';
$message = json_encode(['type' => 'new_message', 'content' => 'Hello, world!']);

$redis->publish($channel, $message);

echo "메시지 전송 완료";
[/code]
  • publish() 메서드를 사용해 채널로 메시지를 전송


📡 서브스크라이버(Subscriber) 예제

[code=php]
$redis = new Redis();
$redis->connect('127.0.0.1', 6379);

$callback = function ($redis, $channel, $message) {
    $data = json_decode($message, true);
    echo "채널 [$channel] 수신: ";
    print_r($data);
};

$redis->subscribe(['notifications'], $callback);
[/code]
  • subscribe()로 하나 이상의 채널 구독 가능

  • 메시지를 받을 때마다 콜백이 실행됨


🔁 실행 흐름

  1. Subscriber를 CLI로 실행 → 계속 대기

  2. Publisher가 메시지를 전송

  3. Subscriber에서 메시지 수신 및 처리


🎯 실무 활용 사례

사례 설명
실시간 알림 새 댓글, 채팅 수신 시 브라우저 알림
비동기 작업 분산 워커들에게 메시지로 작업 전달
마이크로서비스 통신 서비스 간 이벤트 브로커 역할

⚠️ 주의사항

  • PHP 서브스크립션은 블로킹 모드 → 백그라운드에서 실행하거나 CLI로 분리 필요

  • 메시지 보존 안 됨 (Redis 자체는 Pub/Sub 메시지를 저장하지 않음)

  • 실시간 알림을 위해선 별도 WebSocket 연동 필요


🧠 요약

  • PHP와 Redis로 간단한 Pub/Sub 메시징 구현 가능

  • 서비스 간 결합도를 낮추는 이벤트 기반 구조 설계에 유용

  • 고성능 비동기 아키텍처로 확장 가능


댓글목록

등록된 댓글이 없습니다.