배움/PHP
Laravel11 브로드캐스팅 PrivateChannel , reverb 사용 예시
spaces25
2025. 5. 19. 08:59
반응형
Laravel 11에서 브로드캐스팅을 사용할 때, PrivateChannel과 Reverb (Pusher 대체 OSS)를 함께 사용하는 기본적인 예제.
✅ 개요
- Laravel 버전: 11
- 브로드캐스팅 타입: PrivateChannel
- 브로드캐스터: Reverb
- 클라이언트: Laravel Echo + Pusher(JS) 호환
- 보안: 인증된 사용자만 접근 가능한 프라이빗 채널
1. Reverb 설치 및 설정
🔧 Reverb 설치
composer require laravel/reverb
php artisan reverb:install
🧪 Reverb 서버 실행
php artisan reverb:start
📄 .env 설정
BROADCAST_DRIVER=reverb
2. 이벤트 생성
php artisan make:event OrderShipped
📄 OrderShipped.php
use Illuminate\Broadcasting\PrivateChannel;
use Illuminate\Contracts\Broadcasting\ShouldBroadcast;
class OrderShipped implements ShouldBroadcast
{
public $order;
public function __construct($order)
{
$this->order = $order;
}
public function broadcastOn(): PrivateChannel
{
return new PrivateChannel('orders.' . $this->order->user_id);
}
public function broadcastWith(): array
{
return ['order' => $this->order];
}
}
3. 브로드캐스트 인증 설정
📄 routes/api.php 또는 routes/channels.php
Broadcast::channel('orders.{userId}', function ($user, $userId) {
return (int) $user->id === (int) $userId;
});
4. 클라이언트 설정 (Echo + Pusher JS)
📦 설치
npm install laravel-echo pusher-js
📄 resources/js/bootstrap.js 예시
import Echo from 'laravel-echo';
import Pusher from 'pusher-js';
window.Pusher = Pusher;
window.Echo = new Echo({
broadcaster: 'pusher',
key: process.env.MIX_PUSHER_APP_KEY, // .env 설정과 일치하게
wsHost: window.location.hostname,
wsPort: 6001,
forceTLS: false,
disableStats: true,
enabledTransports: ['ws', 'wss'],
authEndpoint: '/broadcasting/auth',
});
5. 프론트에서 구독
window.Echo.private(`orders.${userId}`)
.listen('OrderShipped', (e) => {
console.log('Order shipped:', e.order);
});
6. 인증 미들웨어 (/broadcasting/auth)
Laravel은 기본적으로 인증된 사용자에 대해 /broadcasting/auth를 제공합니다. 로그인 사용자만 채널에 접근할 수 있습니다. web 또는 sanctum을 이용한 인증이 필요합니다.
✅ 요약
구성요소 | 설명 |
이벤트 | OrderShipped implements ShouldBroadcast |
채널 | PrivateChannel 사용 |
인증 | routes/channels.php에서 사용자 ID 비교 |
서버 | Reverb (php artisan reverb:start) |
클라이언트 | Echo + Pusher.js |
반응형