migrations > php 파일 생성 ( -m 옵션 )realtime-with-laravel-reverb $ php artisan migrate php artisan migratemessages 테이블 생성messages 테이블 생성messages Table > New Record Web.php > /broadcast 부분에 Message 데이터 추가 Message find(1) 데이터 추가
Example.php > 생성자 부분에 Message 데이터 추가 ( protected )
* Laravel에서는 이벤트를 처리할 때 이벤트 클래스가 public 생성자를 사용하는 경우가 일반적입니다. 이벤트 클래스는 보통 외부에서 인스턴스화되므로 생성자는 public으로 선언되는 경우가 많습니다. 반면, 이벤트가 특정 로직을 처리하고자 할 때 protected나 private 생성자를 사용할 수 있지만, 이는 이벤트 시스템에서 흔히 사용되는 방식은 아닙니다.
따라서 Laravel 이벤트 시스템에서는 주로 public 접근 제한자가 사용되며, 이벤트 클래스는 기본적으로 public 생성자를 사용해 외부에서 인스턴스화하고 디스패치할 수 있습니다.
http://realtime-with-laravel-reverb.test:8000/ > login 개발자 도구 실행 > 요소 > 선택 기능 활성화> resources > views > dashboard.blade.php 파일 오픈 dashboard.blade.php > 이 파일에 Listening 기능 추가
"You're logged in!" 문구 출력 부분의 div 코드 추가 > x-init
You're logged in! 문구 출력 부분의 div 사용* x-init는 Alpine.js에서 사용되는 디렉티브로, DOM이 초기화될 때 특정 JavaScript 코드를 실행할 수 있게 해줍니다. x-init는 일반적으로 컴포넌트가 처음 로드될 때 실행되는 초기화 작업을 설정하는 데 사용되며, 예를 들어 데이터를 초기화하거나 이벤트 리스너를 등록할 때 유용합니다.
x-init="Echo.channel('chat')" 코드 추가하고 Reverb 서버 로그 확인 > Subscribe 등록
Reverb 서버 로그 > Message Received > subscribe 'chat' Reverb 서버 로그Echo Subscribe 채널(chat)에 Listener 등록 http://realtime-with-laravel-reverb.test:8000/broadcast 실행하여 Example 브로드캐스트 실행 Reverb 서버 로그 > event개발자 도구 > 콘솔 확인 개발자 도구 > 콘솔 > event 출력
작성된 Laravel 개발 환경 - macOS 14.3.1 - PHP 8.2.26 - Laravel Installer 5.10.0 - laravel/laravel (v11.3.3)
1. Reverb 서버 실행
* Assets 사용을 위한 빌드 - npm build realtime-with-laravel-reverb $ npm run dev * Reverb 서버 디버그 옵션으로 실행 realtime-with-laravel-reverb $php artisan reverb:start --debug
2. Channel 등록
routes>channels.php 파일을 열어서 channel을 추가 'chat' 채널 사용을 위해 추가
3. Event 등록
* Event 등록하여 이벤트를 Broadcasting 하도록 설정 realtime-with-laravel-reverb $ php artisan make:event Example * PrivateChannel에서 (Public)Channel, 'chat' 채널명으로 변경하여 테스트 * Event > Example 클래스를 ShoulBroadcastNow 구현 class Exampleimplements ShouldBroadcastNow
1. ShouldBroadcast:
• 이벤트가 큐(queue)에 저장된 후, 백그라운드 작업을 통해 브로드캐스트됩니다. • 비동기 처리로 이벤트가 전송되기 때문에 메인 애플리케이션의 실행 흐름을 방해하지 않습니다. • 큐 설정 및 실행이 필요합니다.
2. ShouldBroadcastNow:
• 이벤트가 즉시 브로드캐스트됩니다. • 큐에 저장되지 않고 동기적으로 처리되기 때문에 즉각적으로 클라이언트에 전송됩니다. • 큐 시스템이 설정되어 있지 않더라도 작동합니다.
1) ShouldBroadcastNow 인터페이스를 구현하면 이벤트가 즉시 브로드캐스트됩니다.
2) broadcastOn() 메서드에서 브로드캐스트할 채널을 설정합니다.
3) broadcastAs() 메서드를 사용해 이벤트의 이름을 설정할 수 있습니다.
ShouldBroadcastNow는 큐를 사용하지 않고 즉시 처리해야 할 때 유용합니다. 하지만 동기 처리이기 때문에 애플리케이션 성능에 주의해야 합니다.
3. Routes에 Broadcasting 하도록 추가 (web.php)
Route::get('/broadcast', function () { broadcast(new Example()); });
4. Laravel 웹서버 실행
realtime-with-laravel-reverb $ php artisan serve http://realtime-with-laravel-reverb.test:8000회원가입 > 로그인 이후 Dashborad 페이지
5. Example (Event) > Broadcasting 하고 받은 메시지 확인
* Broadcasting URL 호출하기 http://realtime-with-laravel-reverb.test:8000/broadcast Control Frame Received ( null )
작성된 Laravel 개발 환경 - macOS 14.3.1 - PHP 8.2.26 - Laravel Installer 5.10.0 - laravel/laravel (v11.3.3)
1. Laravel 프로젝트 생성
$ laravel new realtime-with-laravel-reverb Laravel Breeze로 회원 인증 자동 설정 필요 ( 나중에 SQLite로 DB 사용 - 간단하게 )쉽게 확인하기 위해 일단 SQLite로 Database 설정 $ cd realtime-with-laravel-reverb realtime-with-laravel-reverb $ 이후 Visual Studio Code로 해당 프로젝트 오픈
2. Visual Studio Code에서 프로젝트 오픈 후 확인
생성된 프로젝트
3. Laravel에 broadcasting 기능 Install 하기 ( php artisan 사용 )
realtime-with-laravel-reverb $ php artisan install:broadcasting Install Reverb > YESBroadcasting 기능을 위한Node dependencies install 및 build > YES
1) .env 파일에서 BROADCAST_CONNECTION=log 항목이 reverb 로 변경됨
BROADCAST_CONNECTION
* BROADCAST_CONNECTION=reverb
Reverb 설정 자동 추가됨
2) .env 파일의 REVERB_HOST를 localhost에서 테스트 서버 호스트로 변경
REVERB_HOST="realtime-with-laravel-reverb.test"
3) resource/js/echo.js 자동 생성됨
Reverb 설정을 이용하여 Echo 생성 > 공통 사용
4) resource/js/bootstrap.js 파일 하단에 echo.js 포함
import './echo';
5) config 디렉토리에 broadcasting.php / reverb.php 파일 자동 생성되어 포함
6) config/reverb.php에서 허용할 서버의 도메인을 지정할 수 있음
allowed_origins > * ( 접속하는 모든 도메인을 허용 )
예를 들어 wontae.com서버의 접속만 허용하려면 'allowed_origins' => ['wontae.com'],
3. Broadcasting 기능 사용을 위한 환경 설정 완료 > Reverb 서버 실행 방법
1) Reverb 서버 실행 realtime-with-laravel-reverb $ php artisan reverb:start 2) Reverb 서버 디버그 모드로 실행 realtime-with-laravel-reverb $php artisan reverb:start --debug
* hosts 파일에 realtime-with-laravel-reverb.test 등록해서 사용 $ sudo vi /private/etc/hosts
Homebrew로 PHP7.2 설치하기 PHP 7.2이 설치되어 있는지 확인합니다. PHP 7.2이 설치되어 있지 않다면, Homebrew를 통해 설치할 수 있습니다.
$ brew install php@7.2
Apache 설정파일 위치 Homebrew로 설치된 Apache - /opt/homebrew/etc/httpd/httpd.conf 또는 /usr/local/etc/httpd/httpd.conf macOS 기본 Apache - /etc/apache2/httpd.conf
# 기본 Apache의 경우
$ sudo nano /etc/apache2/httpd.conf
# Homebrew로 설치된 Apache의 경우
$ sudo nano /opt/homebrew/etc/httpd/httpd.conf
PHP 7 모듈 로드 설정 Apache에서 PHP 7 모듈을 로드하도록 설정합니다. LoadModule 지시자를 추가하여 PHP 모듈을 로드할 수 있도록 설정해야 합니다. httpd.conf 파일의 LoadModule 부분을 추가합니다.
... LoadModule php_module /opt/homebrew/opt/php/lib/httpd/modules/libphp.so ... #php7.2 설치시 위치 변경 LoadModule php7_module /opt/homebrew/opt/php@7.2/lib/httpd/modules/libphp7.so
PHP 파일 인식 설정 Apache가 .php 확장자를 가진 파일을 PHP로 해석하도록 설정하려면 AddType 지시자를 추가해야 합니다. httpd.conf 파일의 하단에 다음 줄을 추가합니다.
... AddType application/x-httpd-php .php
DocumentRoot 디렉터리 설정 확인 PHP 파일을 테스트하려면 PHP 파일을 저장할 디렉터리 (DocumentRoot)가 제대로 설정되어 있어야 합니다. 기본적으로 /opt/homebrew/var/www 또는 /var/www/html 디렉터리가 DocumentRoot로 설정됩니다.
mysql_secure_installation 실행 시 에러 해결 Enter current password for root (enter for none): ERROR 1698 (28000): Access denied for user 'root'@'localhost'
# 안전모드로 접속
$ sudo mysql
# root 사용자 비밀번호 설정
MariaDB [(none)]> ALTER USER 'root'@'localhost' IDENTIFIED BY '새로운비밀번호';
# 권한 변경 사항 적용 > 비밀번호 설정 후, 권한 테이블을 다시 로드
MariaDB [(none)]> FLUSH PRIVILEGES;
# MariaDB에서 로그아웃
MariaDB [(none)]> EXIT;