Event, Queue, Email

아이고마워·2022년 8월 6일
0

Laravel

목록 보기
5/5


클라이언트이메일을 입력하면 서버에서는 queue를 통해 비동기이메일을 전송합니다.

이벤트

  1. 이벤트 객체를 생성하고
    php artisan make:event NewsLetterEvent
  2. 위 이벤트발생시 실행할 이벤트 리스너를 생성하고
    php artisan make:listen NewsLetterEventListener --event=NewsLetterEvent
  3. EventServiceProvider에 등록을 해주면 됩니다.
// EventServiceProvider.php
...
protected $listen = [
	...
    NewsletterEvent::class => [
            NewsletterEventListener::class,
			... // 등록할 이벤트 리스너들 추가 목록
	]
...
  1. 실행은 event 헬퍼 함수를 통해 할 수 있습니다.
    event(new NewsletterEvent($email));

이메일

  1. email 객체를 생성해 줍니다.
    php artisan make:mail Newsletter
// Mail/Newsletter.php
 public function __construct($user)
{
     $this->user = $user;
}

public function build()
{
    $public_path = public_path('images/golang.png');

    return $this->subject($this->user['email'] . '의 회원가입을 축하합니다.')
        ->attach($public_path)
        ->view('mail.newsletter')
        ->with(['custom' => 'thank you thank you!']);
}
  1. 메일 템플릿을 작성해 줍니다.
// mail.newsletter.blade.php
<p>{{$user['email']}}님 안녕하세요!
</p>
<p>{{ $custom }}</p>
<img src="{{ $message->embed(public_path('images/docker_whale.png')) }}" alt="">
  1. 실행합니다.
$user = [
    'email' => $this->email
];

$mail = new Newsletter($user);

Mail::to($this->email)->send($mail);

이메일 같이 경우 처리되는데 시간이 걸리는 작업들은 비동기로 처리하는게 유리합니다.

1) 비동기 처리를 위해서는 queue를 실행해야합니다. 그러지 않으면 job들이 쌓이기만 하고 처리는 되지 않습니다.
php artisan queue:work

2) 먼저 queue connection(queue driver)을 설정해줍니다.

// .env
QUEUE_CONNECTION=database

3) job들을 쌓을 queue table을 생성해 줍니다.
php artisan queue:table
php artisan migrate

job을 쌓을 jobs 테이블과, 실패시 쌓이는 failed_jobs 테이블이 생성되었습니다.

4) 처리할 Job을 생성해 줍니다.
php artisan make:job NewsletterJob

// NewsletterJob.php
public function __construct($email)
{
    $this->email = $email;
}

public function handle()
{
	$user = [
		'email' => $this->email
	];

	$mail = new Newsletter($user);
	Mail::to($this->email)->send($mail);
}

이메일 보내는 처리를 적어 주었습니다.

로직 순서 정리

github source

https://github.com/kaelch/laravel8/tree/event

0개의 댓글