PHP PHP + Redis로 간단한 Pub/Sub 구현하기
페이지 정보

영삼이
본문
✅ 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
또는 composer
로 predis/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()
로 하나 이상의 채널 구독 가능 -
메시지를 받을 때마다 콜백이 실행됨
🔁 실행 흐름
-
Subscriber를 CLI로 실행 → 계속 대기
-
Publisher가 메시지를 전송
-
Subscriber에서 메시지 수신 및 처리
🎯 실무 활용 사례
사례 | 설명 |
---|---|
실시간 알림 | 새 댓글, 채팅 수신 시 브라우저 알림 |
비동기 작업 분산 | 워커들에게 메시지로 작업 전달 |
마이크로서비스 통신 | 서비스 간 이벤트 브로커 역할 |
⚠️ 주의사항
-
PHP 서브스크립션은 블로킹 모드 → 백그라운드에서 실행하거나 CLI로 분리 필요
-
메시지 보존 안 됨 (Redis 자체는 Pub/Sub 메시지를 저장하지 않음)
-
실시간 알림을 위해선 별도 WebSocket 연동 필요
🧠 요약
-
PHP와 Redis로 간단한 Pub/Sub 메시징 구현 가능
-
서비스 간 결합도를 낮추는 이벤트 기반 구조 설계에 유용
-
고성능 비동기 아키텍처로 확장 가능
- 이전글PHP에서 다형성(Polymorphism) 제대로 쓰는 팁 25.03.28
- 다음글PHP에서 커스텀 DI 컨테이너 만들기 25.03.28
댓글목록
등록된 댓글이 없습니다.