Event 클래스의 생성자말고 추가 데이터 전달하는 방법을 알아보자.

1. Example 클래스에 메소드 추가 

broadcastWith() function 추가 ( return array )

http://realtime-with-laravel-reverb.test:8000/broadcast 실행하여 Example  브로드캐스트 실행

Reverb 서버 로그 확인 > array ( [] )

개발자 도구 > 콘솔 확인

array ( [] ) 확인

Array에 전달하고자 하는 데이터 설정 ( User id, name 추가 )

User ID, Name 추가 ( 생성자에서 받아온 유저 데이터 )

http://realtime-with-laravel-reverb.test:8000/broadcast 실행하여 Example  브로드캐스트 실행

Reverb 서버 로그 확인 ( id, name 추가 )

개발자 도구 > 콘솔 확인

2. Message Model 추가하여 Broadcast에 사용하기

realtime-with-laravel-reverb $ php artisan make:model Message -m
php artisan make:model Message -m
Models > Message.php 생성

database > migrations > php 파일 생성 > 마이그레이션 실행

migrations > php 파일 생성 ( -m 옵션 )
realtime-with-laravel-reverb $ php artisan migrate
php artisan migrate
messages 테이블 생성
messages 테이블 생성
messages Table > New Record 
Web.php > /broadcast 부분에 Message 데이터 추가 
Message find(1) 데이터 추가

Example.php > 생성자 부분에 Message 데이터 추가 ( protected )

http://realtime-with-laravel-reverb.test:8000/broadcast Example  브로드캐스트 실행 
Reverb 서버 로그 > message 데이터 확인

개발자 도구 > 콘솔 확인

 

 

 

* Broadcast Event(Example)에 데이터 추가

 

1. Example.php > Example 클래스에 메시지 추가

Example.php > Example 클래스
message string 멤버 변수 추가 ( public )

http://realtime-with-laravel-reverb.test:8000/broadcast 실행하여 Example  브로드캐스트 실행

Reverb 서버 로그 > data > message 추가 확인

개발자 도구 > 콘솔 확인

data > message 추가 확인

Example Class 생성자에 전달한 데이터 추가

Example > 생성자

Routes > Web.php

/broadcast > Example 생성 시 데이터 추가

현재 가입되어 있는 유저 정보 하나를 가져와 생성자에 설정

use App\Models\User;
User::find(1)
sqlite 테이블 확인

Example Class 생성자에 데이터 추가 

User 데이터 추가 ( public )

* Laravel에서는 이벤트를 처리할 때 이벤트 클래스가 public 생성자를 사용하는 경우가 일반적입니다. 이벤트 클래스는 보통 외부에서 인스턴스화되므로 생성자는 public으로 선언되는 경우가 많습니다. 반면, 이벤트가 특정 로직을 처리하고자 할 때 protected나 private 생성자를 사용할 수 있지만, 이는 이벤트 시스템에서 흔히 사용되는 방식은 아닙니다.

 

따라서 Laravel 이벤트 시스템에서는 주로 public 접근 제한자가 사용되며, 이벤트 클래스는 기본적으로 public 생성자를 사용해 외부에서 인스턴스화하고 디스패치할 수 있습니다.



http://realtime-with-laravel-reverb.test:8000/broadcast 실행하여 Example  브로드캐스트 실행

Reverb 서버 로그 > user 정보 확인 ( public 일 경우에만 확인 가능 )

개발자 도구 > 콘솔 확인

public 일 경우에만 확인 가능
Example > protected 접근제한자 설정
protected 설정 시 데이터 확인 불가

 

* /dashboard 페이지 로드 시 Event Listening 처리하기

 

1. dashboard 페이지에 Event Listening 처리 추가

Chrome > 보기 > 개발자 정보 > 개발자 도구 실행

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.js > Echo 사용
resources > js > echo.js
resources > js > echo.js

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 출력

 

* realtime with laravel reverb

작성된 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 Example implements 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 )

* Reverb 서버 종료하여 오류 메시지 확인

Reverb 서버 종료 후 Broadcasting 실행 시 발생되는 오류

* realtime with laravel reverb

작성된 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 > YES
Broadcasting 기능을 위한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로 설정됩니다.

 

HomeBrew 이용 설치

Homebrew를 사용하여 MariaDB를 설치하는 것이 가장 간편합니다. 먼저 Homebrew를 업데이트합니다. 터미널을 열고 아래 명령어를 입력하세요.

$ brew update
  • Homebrew로 MariaDB 10.5을 설치할 수 있습니다. 특정 버전을 설치하려면, 버전 정보를 포함하여 설치해야 합니다.
$ brew install mariadb@10.5
    • 설치가 완료되면, MariaDB의 경로를 /opt/homebrew/opt/mariadb@10.5/bin으로 설정할 수 있습니다.
    • .zshrc에 경로를 추가하고 터미널 재시작 
$ echo 'export PATH="/opt/homebrew/opt/mariadb@10.5/bin:$PATH"' >> ~/.zshrc

 

HomeBrew 이용 설치된 MariaDB 실행 
MariaDB를 설치한 후, 서비스를 시작해야 합니다. 아래 명령어로 MariaDB를 실행하고 시작합니다.
$ brew services start mariadb@10.5

 

MariaDB 초기 설정
MariaDB 설치가 완료되면 mysql_secure_installation을 실행하여 보안 설정을 완료
$ mysql_secure_installation
더보기

mysql_secure_installation을 실행하면 몇 가지 설정을 순서대로 진행할 수 있습니다. 각 단계에서 입력할 내용은 아래와 같습니다.

 

1. Root 비밀번호 설정

MariaDB는 기본적으로 루트 계정에 대해 비밀번호가 설정되어 있지 않습니다. 시스템이 새 비밀번호 설정을 요청할 때 원하는 루트 비밀번호를 입력하고 확인합니다.

2. 익명 사용자 제거

익명 사용자는 테스트 목적으로만 필요하므로, 프로덕션 환경에서는 제거하는 것이 좋습니다.

“Remove anonymous users?” 질문에 Y를 입력하여 익명 사용자를 제거합니다.

3. 원격 루트 로그인 금지

보안을 위해 루트 계정으로 원격 접속을 금지하는 것이 좋습니다.

“Disallow root login remotely?” 질문에 Y를 입력하여 원격 접속을 금지합니다.

4. 테스트 데이터베이스 제거

테스트 데이터베이스는 설치 시 기본으로 생성되며, 프로덕션 환경에서는 필요하지 않습니다.

“Remove test database and access to it?” 질문에 Y를 입력하여 테스트 데이터베이스를 삭제합니다.

5. 권한 테이블 다시 불러오기

설정 변경 후 권한 테이블을 다시 로드하여 적용해야 합니다.

“Reload privilege tables now?” 질문에 Y를 입력합니다.

 

이제 MariaDB가 보안 설정과 함께 준비된 상태가 됩니다.

MariaDB 설정 확인
설정이 완료되면, 아래 명령어로 MariaDB에 접속하여 정상적으로 설정되었는지 확인할 수 있습니다.
$ mysql -u root -p
MariaDB 실행/중지/재실행
Homebrew를 사용하여 MariaDB를 설치했다면, 아래 명령어로 MariaDB를 시작, 중지, 다시 시작할 수 있습니다.
$ brew services start mariadb@10.5
$ brew services stop mariadb@10.5
$ brew services restart mariadb@10.5

// 수동
$ mysql.server start
$ mysql.server stop

 

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;
  • macOS 기본 설치된 Apache 제외하고 Homebrew 설치하여 사용
  • macOS 기본 설치된 Apache 사용 방법
Apache 시작: `sudo apachectl start`
Apache 중지: `sudo apachectl stop`
Apache 재시작: `sudo apachectl restart`
Apache 상태 확인: `sudo apachectl status`

 


Homebrew를 통해 최신 Apache를 설치

  • Homebrew 설치 이후 아래 명령어 실행
$ brew install httpd

 

  • Apache 설정 파일
Apache 설정 파일은 /opt/homebrew/etc/httpd/httpd.conf에 위치합니다.
(Apple Silicon Mac에서는 /opt/homebrew/ 경로, Intel Mac에서는 /usr/local/etc/httpd/httpd.conf 경로에 위치할 수 있습니다.)

 

  • httpd.conf 파일 수정하여 아파치 설정 변경
$ nano /opt/homebrew/etc/httpd/httpd.conf
DocumentRoot 설정
웹 파일을 저장할 기본 디렉터리를 설정합니다. 기본값은 /opt/homebrew/var/www입니다. 원하는 디렉터리로 변경할 수 있습니다.
포트 변경
기본적으로 포트 8080으로 설정됩니다. 80 포트를 사용하려면 Listen 값을 80으로 수정합니다.
Listen 80

 

  • Homebrew로 설치한 Apache 명령어
$ brew services start httpd
$ brew services stop httpd
$ brew services restart httpd

수동 명령
$ httpd -k start
$ httpd -k stop
$ httpd -k restart

 

+ Recent posts