본문으로 건너뛰기

회원 알림 + 공지 브로드캐스트

Core Base/Notification 은 회원 알림 인프라(ADR-066)와 관리자 발신 공지형 브로드캐스트를 제공합니다. 모든 프로젝트에 symlink 로 자동 공유됩니다.

구성 요소

영역설명
카테고리 5종system / security (강제 수신) · commerce / community (토글 가능) · marketing (opt-in 필수 — 정보통신망법 §50)
사용자 환경설정회원이 /user/notifications 에서 카테고리 × 채널(인앱/이메일) 토글 + 다이제스트 주기(즉시/일간/주간)
인앱 알림센터모든 관리 패널 헤더의 종 아이콘 드롭다운 + 회원 알림 목록 페이지
이메일테넌트별 커스터마이징 가능한 이메일 템플릿 (TenantEmailRenderer)
외부 채널ExternalNotification 플러그인 설치 시 SMS/카카오 알림톡/푸시/웹훅 자동 연동

도메인 알림 발행 (개발자)

CoreCategoryNotification 을 상속하면 채널 결정(사용자 환경설정 반영), 이메일 템플릿, 다이제스트, 외부 채널이 자동 처리됩니다.

class WelcomeNotification extends CoreCategoryNotification
{
protected function category(): NotificationCategory
{
return NotificationCategory::System;
}

protected function buildMailViewData(mixed $notifiable, ?TenantInterface $tenant): array
{
return ['title' => 'Welcome!', 'body' => "Hi, {$notifiable->name}"];
}
}

$user->notify(new WelcomeNotification());

공지 브로드캐스트 (운영자)

관리자가 직접 작성해서 회원에게 보내는 공지입니다. 사이트 관리 그룹 > 공지 알림 메뉴에서 사용합니다.

노출 조건

  • 독립사이트 owner 패널(SaaS/Tenant) 또는 Platform 에서만 메뉴가 보입니다 (사이트 유형 게이트).
  • feature key announcements 가 프로젝트 config/permissions.php 에 정의돼 있어야 하며(미정의 시 fail-closed 로 숨김), 서브관리자는 부여된 권한(read/create/update/delete + send/cancel/test_send)만 사용할 수 있습니다.
  • 작성은 사이트 패널(SaaS/Tenant)에서만 — 공지의 소유(어느 사이트의 공지인지)가 패널 컨텍스트에서 자동 결정됩니다. Platform 은 열람/발송/취소 운영만 담당합니다.

작성 옵션

옵션설명
카테고리marketing 선택 시 수신 동의(opt-in) 회원에게만 전달 — 별도 처리 불필요
발송 대상전체 회원 (사이트 범위) 또는 개별 회원 지정 (이름/이메일 검색)
발송 채널인앱(알림센터) + 이메일 — 이메일은 회원별 수신 설정을 따릅니다
신규 가입자 노출켜면 발송 이후 가입한 회원에게도 계속 노출 (상시 공지). 끄면 발송 시점 회원만 (일회성)
예약 시각지정 후 발송 액션을 누르면 해당 시각에 자동 발송

발송 흐름

draft → (예약 시: scheduled) → sending → sent
└──────────┴─→ canceled (발송 전까지 취소 가능)
  • 미리보기 / 나에게 테스트 발송으로 확인 후 발송하세요.
  • 발송은 멱등입니다 — 중복 클릭/중복 cron 실행에도 한 번만 발송됩니다.
  • 전체 공지는 회원 수와 무관하게 즉시 처리됩니다(공지 1행 + 읽음 상태 방식). 이메일은 큐에서 청크로 발송됩니다.

프로젝트 활성화 체크리스트

Core 코드는 자동 반영되지만, 프로젝트별로 다음이 필요합니다.

  1. make migrate NAME={project}announcements / announcement_reads 테이블 생성 (미마이그레이션 상태에서도 기존 알림은 정상 동작 — 공지 기능만 비활성)
  2. config/permissions.phpannouncements feature 블록 추가 (_template 참조)
  3. 예약 발송 사용 시 routes/console.php 에 스케줄 등록:
    Schedule::command('announcements:send-scheduled')->everyFiveMinutes();
  4. 큐 워커 동작 확인 (이메일/개별 발송은 큐 잡)

이벤트 자동 알림 (템플릿 레지스트리)

가입 환영처럼 사이트 이용 중 자동으로 발송되는 알림의 문안을 관리페이지에서 관리합니다.

  • 메뉴: 사이트 설정 > 알림 템플릿 — 코드가 등록한 이벤트 목록에서 선택해 문안(4언어)과 발송 채널을 오버라이드합니다. 오버라이드하지 않은 이벤트는 기본 문안으로 발송됩니다.
  • 변수: 문안에 {name} 같은 변수를 쓰면 발송 시점 값으로 치환됩니다 (편집 화면에 사용 가능한 변수 힌트 표시).
  • 채널: 인앱+이메일이 기본입니다. 시스템/보안 알림은 채널을 끌 수 없습니다. 카카오 알림톡 칸은 v2(외부 채널 연계)를 위한 준비 슬롯입니다.
  • 개발자: 서비스 코드에서는 notify_event('이벤트키', $user, [변수]) 한 줄로 발행합니다. 새 이벤트는 ServiceProvider 에서 NotificationEventRegistry 에 등록합니다 (상세: Core Base/Notification/README.md).

운영자 알림 (S2)

새 가입·1:1 문의·결제 완료를 사이트 운영자가 등록한 채널로 통보받습니다.

  • 메뉴: 사이트 설정 > 운영자 알림 — 채널(이메일/웹훅[Slack·Discord]/텔레그램/카카오 알림톡)을 여러 개 등록하고, 이벤트별로 켜고 채널을 고릅니다. 테스트 발송으로 즉시 검증할 수 있습니다.
  • 이벤트는 켠 것만 발송됩니다(opt-in) — 설정하지 않은 사이트는 아무 동작도 하지 않습니다.
  • 알림톡 채널은 ExternalNotification 플러그인과 자격증명이 구성된 사이트에서만 발송됩니다.
  • 개발자: notify_operators('이벤트키', $saasId, $tenantId, [변수]) — 새 운영자 이벤트는 레지스트리에 audience: operator 로 등록합니다.

관련 문서

  • Core 모듈 상세: platform/web/laravel/core/Base/Notification/README.md
  • 감사로그: 공지 CRUD·발송·취소는 관리자 액션 감사로그에 자동 기록됩니다 → 감사 로그
  • 권한: feature key 기반 서브관리자 위임 → 권한 시스템