"일꾼이 일을 잘하려면 먼저 도구를 갈고 닦아야 한다." - 공자, 『논어』.
첫 장 > 프로그램 작성 > 알림 및 작업 처리를 중앙 집중화하세요

알림 및 작업 처리를 중앙 집중화하세요

2024-11-08에 게시됨
검색:531

Centralize your notification and job handling

다양한 이벤트(예: 사용자 생성, 비밀번호 재설정 등) 이후 여러 이메일 알림 전송을 단순화하려면 몇 가지 단계를 수행하여 알림 및 작업 처리를 중앙 집중화할 수 있습니다.. 이 접근 방식을 사용하면 각 이벤트에 대해 별도의 작업이나 알림을 만들지 않고도 작업이 더 쉽고 확장 가능해집니다.

이메일 알림 처리를 단순화하기 위한 전략:

  1. 일반화된 이메일 알림 작업을 사용합니다.
  2. 이벤트 리스너 아키텍처 활용.
  3. 그룹 유사 알림.

1. 일반 이메일 알림 작업 생성:

각 알림에 대해 별도의 작업을 만드는 대신 알림과 사용자를 매개변수로 사용하는 재사용 가능한 단일 작업을 만들 수 있습니다. 이렇게 하면 동일한 작업을 사용하여 다양한 알림을 처리할 수 있습니다.

일반화된 SendEmailNotificationJob:

namespace App\Jobs;

use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;
use Illuminate\Notifications\Notification;
use App\Models\User;

class SendEmailNotificationJob implements ShouldQueue
{
    use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;

    public $user;
    public $notification;

    /**
     * Create a new job instance.
     *
     * @param  User $user
     * @param  Notification $notification
     * @return void
     */
    public function __construct(User $user, Notification $notification)
    {
        $this->user = $user;
        $this->notification = $notification;
    }

    /**
     * Execute the job.
     *
     * @return void
     */
    public function handle()
    {
        // Send the notification
        $this->user->notify($this->notification);
    }
}

이 일반화된 작업을 사용하면 동일한 작업을 사용하여 다양한 유형의 이메일 알림을 전달할 수 있습니다.

사용 예:

use App\Jobs\SendEmailNotificationJob;
use App\Notifications\UserWelcomeNotification;
use App\Models\User;

$user = User::find(1); // Example user

// Dispatch a welcome email notification
SendEmailNotificationJob::dispatch($user, new UserWelcomeNotification());

// Dispatch a password reset notification
SendEmailNotificationJob::dispatch($user, new PasswordResetNotification());

2. 이벤트 리스너 아키텍처 활용:

각 이벤트 후에 수동으로 작업을 디스패치하는 대신, Laravel의 이벤트 리스너 아키텍처를 사용하면 특정 이벤트(예: 사용자 생성)를 기반으로 알림 및 작업을 자동으로 트리거할 수 있습니다.

1단계: 이벤트 정의:

UserCreated와 같은 이벤트를 정의할 수 있습니다:

php artisan make:event UserCreated

UserCreated 이벤트 예:

namespace App\Events;

use App\Models\User;
use Illuminate\Foundation\Events\Dispatchable;
use Illuminate\Queue\SerializesModels;

class UserCreated
{
    use Dispatchable, SerializesModels;

    public $user;

    public function __construct(User $user)
    {
        $this->user = $user;
    }
}

2단계: 리스너 생성:

이벤트가 시작될 때 알림을 보내는 리스너를 만들 수 있습니다.

php artisan make:listener SendUserWelcomeNotification --event=UserCreated

예제 리스너:

namespace App\Listeners;

use App\Events\UserCreated;
use App\Jobs\SendEmailNotificationJob;
use App\Notifications\UserWelcomeNotification;

class SendUserWelcomeNotification
{
    public function handle(UserCreated $event)
    {
        // Dispatch the email notification job
        SendEmailNotificationJob::dispatch($event->user, new UserWelcomeNotification());
    }
}

3단계: 사용자 생성 시 이벤트 발생:

사용자가 생성될 때마다 이벤트를 실행할 수 있으며 Laravel이 자동으로 나머지를 처리합니다.

use App\Events\UserCreated;

$user = User::create($data);
event(new UserCreated($user));

이 접근 방식을 사용하면 알림 처리 논리를 비즈니스 논리에서 분리하여 시스템 확장성을 높일 수 있습니다.

3. 비슷한 알림 그룹화:

유사한 알림(예: 환영 이메일, 비밀번호 재설정 등과 같은 사용자 관련 알림)이 많은 경우 모든 사용자 알림을 중앙 집중식으로 처리하는 알림 서비스를 만들 수 있습니다.

예 알림 서비스:

namespace App\Services;

use App\Models\User;
use App\Jobs\SendEmailNotificationJob;
use App\Notifications\UserWelcomeNotification;
use App\Notifications\PasswordResetNotification;

class NotificationService
{
    public function sendUserWelcomeEmail(User $user)
    {
        SendEmailNotificationJob::dispatch($user, new UserWelcomeNotification());
    }

    public function sendPasswordResetEmail(User $user)
    {
        SendEmailNotificationJob::dispatch($user, new PasswordResetNotification());
    }

    // You can add more methods for different types of notifications
}

사용 예:

컨트롤러나 이벤트 리스너에서 이제 간단히 서비스를 호출할 수 있습니다.

$notificationService = new NotificationService();
$notificationService->sendUserWelcomeEmail($user);

결론:

  • 단일 작업: 일반화된 작업(SendEmailNotificationJob)을 사용하여 다양한 유형의 알림을 처리할 수 있습니다.
  • 이벤트 리스너 아키텍처: Laravel의 이벤트 리스너 시스템을 활용하여 시스템 이벤트에 기반한 알림을 자동으로 트리거합니다.
  • 중앙 집중식 알림 서비스: 더 나은 관리 및 재사용성을 위해 유사한 알림을 하나의 서비스로 그룹화합니다.

이 접근 방식은 코드를 DRY(반복하지 마세요) 상태로 유지하는 데 도움이 되며 보낼 이메일 알림이 여러 개 있을 때 유지 관리가 더 쉬워집니다.

릴리스 선언문 이 글은 https://dev.to/msnmongare/centralize-your-notification-and-job-handling-1oid?1에서 복제됩니다.1 침해 내용이 있는 경우, [email protected]으로 연락하여 삭제하시기 바랍니다.
최신 튜토리얼 더>
  • 패키지 및 CLASSPATH 찾기
    패키지 및 CLASSPATH 찾기
    디렉터리별로 패키지 미러링: Java 패키지는 파일 시스템의 디렉터리에 매핑됩니다. Java Runtime이 패키지를 찾는 세 가지 방법: 현재 작업 디렉터리: 런타임 시스템은 작업 디렉터리를 시작점으로 사용합니다. 패키지가 현재 디렉터리의 하위 디렉터리에 있으면 검색...
    프로그램 작성 2024-11-08에 게시됨
  • PHP의 PATH_INFO는 무엇이며 Apache에서 어떻게 작동합니까?
    PHP의 PATH_INFO는 무엇이며 Apache에서 어떻게 작동합니까?
    PHP의 PATH_INFO: 미스터리 공개PATH_INFO 변수는 다양한 맥락에서 발견되었지만 그 진정한 성격은 여전히 ​​파악하기 어렵습니다. PATH_INFO에 대한 명확한 이해를 얻으려면 그 기원을 조사해야 합니다.Apache 웹 서버 및 PATH_INFOPATH...
    프로그램 작성 2024-11-08에 게시됨
  • JavaScript의 메소드 오버로딩
    JavaScript의 메소드 오버로딩
    JavaScript, 메서드 오버로딩(예: Java 또는 C#과 같은 언어)은 함수가 하나의 정의만 가질 수 있기 때문에 직접 지원되지 않습니다. 그러나 JavaScript는 동적이므로 다음과 같은 기술을 사용하여 오버로드를 모방할 수 있습니다. 인수 개수 또는 유형을...
    프로그램 작성 2024-11-08에 게시됨
  • Linux 환경에서 pthread를 사용하여 스레드 우선순위를 효과적으로 향상하려면 어떻게 해야 합니까?
    Linux 환경에서 pthread를 사용하여 스레드 우선순위를 효과적으로 향상하려면 어떻게 해야 합니까?
    pthreads의 스레드 우선순위 강화: 종합 가이드Linux 환경에서 pthread를 활용할 때 스레드 우선순위를 조정해야 하는 경우가 많습니다. 성능을 최적화합니다. 이 가이드에서는 스레드 우선순위의 범위와 설명을 둘러싼 불확실성과 우선순위를 너무 높게 설정하는 것...
    프로그램 작성 2024-11-08에 게시됨
  • 초기 AI를 사용한 단위 테스트 생성
    초기 AI를 사용한 단위 테스트 생성
    단위 테스트 생성 가속화 및 코드 품질 개선 최근에는 자동 단위 테스트 생성을 위해 설계된 AI 에이전트인 Early에 대해 자세히 알아볼 기회가 있었습니다. TypeScript 및 ExpressoTS Framework를 정기적으로 사용하는 사람으로서 ...
    프로그램 작성 2024-11-08에 게시됨
  • Java에서 문자 배열을 문자열로 어떻게 변환합니까?
    Java에서 문자 배열을 문자열로 어떻게 변환합니까?
    Char 배열을 문자열로 변환Java에서는 String 생성자를 사용하여 char 배열을 다시 문자열로 변환할 수 있습니다. 다음 코드는 이 변환을 수행하는 방법을 보여줍니다.char[] a = {'h', 'e', 'l', 'l', 'o', ' ', 'w', 'o', ...
    프로그램 작성 2024-11-08에 게시됨
  • 데이터 엔지니어링에 대한 최고의 가이드.
    데이터 엔지니어링에 대한 최고의 가이드.
    데이터 엔지니어링은 대규모 데이터를 수집, 저장, 분석하기 위한 시스템을 설계하고 구축하는 관행입니다. 이는 거의 모든 산업 분야에 적용할 수 있는 광범위한 분야입니다. 이 글은 데이터 엔지니어가 되는 방법에 대한 단계별 가이드를 제공하는 것을 목표로 합니다. 대부분의...
    프로그램 작성 2024-11-08에 게시됨
  • React에서 방송 채널 API를 사용하는 방법
    React에서 방송 채널 API를 사용하는 방법
    오늘날의 웹 애플리케이션에서는 여러 탭이나 창에서 정보를 업데이트된 상태로 유지하면 사용자 경험을 크게 향상시킬 수 있습니다. 예를 들어, 사용자가 한 탭에서 로그아웃하면 해당 작업이 다른 모든 탭에 반영되기를 원합니다. 브로드캐스트 채널 API를 사용하면 동일한 출처...
    프로그램 작성 2024-11-08에 게시됨
  • Pandas에서 체인 할당이 효율적인가요?
    Pandas에서 체인 할당이 효율적인가요?
    Pandas의 연결 할당소개인기 있는 데이터 조작 라이브러리인 Pandas의 연결 할당은 데이터 프레임의 값에 대해 연속적으로 수행되는 작업입니다. 작업이 제대로 처리되지 않으면 성능 문제가 발생할 수 있습니다.연결된 할당 경고Pandas는 연결 할당의 잠재적인 비효율...
    프로그램 작성 2024-11-08에 게시됨
  • JavaScript Promise: 알아야 할 기본 사항
    JavaScript Promise: 알아야 할 기본 사항
    소개 자바스크립트는 단일 스레드 프로그래밍 언어입니다. 즉, 한 번에 하나의 작업만 실행할 수 있습니다. 데이터 가져오기 또는 타이머 설정과 같은 비동기 작업의 경우 이는 까다로워지며, 이로 인해 실행 흐름이 차단되고 앱 속도가 느려질 수 있습니다. 스...
    프로그램 작성 2024-11-08에 게시됨
  • AngularJS ng-repeat 데이터를 Bootstrap 열 3개에 어떻게 정렬할 수 있나요?
    AngularJS ng-repeat 데이터를 Bootstrap 열 3개에 어떻게 정렬할 수 있나요?
    3개의 부트스트랩 열에서 AngularJS ng-repeat 데이터 정렬AngularJS는 ng-repeat를 제공하여 데이터 배열을 기반으로 요소를 동적으로 생성합니다. 상당한 수의 요소를 처리할 때 요소를 열로 정렬하면 사용자 인터페이스와 가독성이 향상될 수 있습니...
    프로그램 작성 2024-11-08에 게시됨
  • Cypress에서 업로드 및 다운로드를 검증하는 방법
    Cypress에서 업로드 및 다운로드를 검증하는 방법
    소개 파일 업로드 및 다운로드 처리는 엔드투엔드 테스트에서 일반적인 시나리오입니다. 이 게시물에서는 Cypress를 사용하여 파일 업로드와 다운로드를 모두 처리하는 방법을 살펴보겠습니다. Cypress에는 이러한 작업에 대한 기본 지원이 부족하지만 몇 ...
    프로그램 작성 2024-11-08에 게시됨
  • 조절과 디바운싱: 언제 어떤 속도 제한 기술을 사용해야 합니까?
    조절과 디바운싱: 언제 어떤 속도 제한 기술을 사용해야 합니까?
    속도 제한 기능에 대한 제한 및 디바운싱 구별소프트웨어 개발 영역에서 함수 호출 빈도를 관리하는 것은 최적화에 매우 중요합니다. 성능을 향상하고 불필요한 리소스 소비를 방지합니다. 제한 및 디바운싱은 속도 제한 기능에 사용되는 두 가지 인기 있는 기술이지만 미묘한 차이...
    프로그램 작성 2024-11-08에 게시됨
  • 무료 사전 API 사용 방법
    무료 사전 API 사용 방법
    표지 사진: Christopher Gower, Unsplash 언어 학습 앱, 글쓰기 도우미 또는 단어와 관련된 프로젝트를 개발 중이고 단어 의미를 검색하기 위한 API가 필요합니까? 무료 사전 API는 언어 데이터를 작업에 통합할 수 있는 무료이며 접근 가능한 방법...
    프로그램 작성 2024-11-08에 게시됨
  • 조건이 문자열 필드에 0이 아닌 값을 포함할 때 MySQL 쿼리가 모든 행을 반환하는 이유는 무엇입니까?
    조건이 문자열 필드에 0이 아닌 값을 포함할 때 MySQL 쿼리가 모든 행을 반환하는 이유는 무엇입니까?
    MySQL 쿼리는 필드 값이 0이 아닌 모든 행을 반환합니다. 분석 및 솔루션"와 같은 조건으로 MySQL 테이블을 쿼리하는 경우 email=0" 이메일 필드에 0이 아닌 값만 포함되어 있으면 모든 행을 다시 받는 것은 예상치 못한 일입니다. 이러한 ...
    프로그램 작성 2024-11-08에 게시됨

부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.

Copyright© 2022 湘ICP备2022001581号-3