클라이언트
가 이메일
을 입력하면 서버
에서는 queue
를 통해 비동기
로 이메일
을 전송합니다.
특정 이벤트 객체
는 다수의 이벤트리스너 객체
와 연관된다고 생각하면 됩니다. 특정 이벤트가 발생
하면 이 이벤트와 관련된 이벤트리스너
에서 원하는 로직들이 실행됩니다.php artisan make:event NewsLetterEvent
php artisan make:listen NewsLetterEventListener --event=NewsLetterEvent
// EventServiceProvider.php
...
protected $listen = [
...
NewsletterEvent::class => [
NewsletterEventListener::class,
... // 등록할 이벤트 리스너들 추가 목록
]
...
event(new NewsletterEvent($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!']);
}
// mail.newsletter.blade.php
<p>{{$user['email']}}님 안녕하세요!
</p>
<p>{{ $custom }}</p>
<img src="{{ $message->embed(public_path('images/docker_whale.png')) }}" alt="">
$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);
}
이메일 보내는 처리를 적어 주었습니다.