Skip to main content

Notification이란

Laravel의 알림(Notification) 시스템은 메일·SMS·Slack·데이터베이스 등 여러 배송 채널에 대해 통일된 API로 알림을 보내는 구조입니다. Mail과 Notification의 차이 청구서 결제 완료 알림처럼 여러 채널에 같은 알림을 보내고 싶다면 Notification이 적합합니다.

Notification 클래스 생성

make:notification Artisan 명령으로 클래스를 생성합니다.
생성된 클래스는 app/Notifications/ 디렉터리에 배치됩니다. 클래스에는 via() 메서드와 각 채널용 메시지 생성 메서드가 포함됩니다.

알림 전송 방법

Notifiable 트레이트 사용하기

App\Models\User에는 기본적으로 Notifiable 트레이트가 포함되어 있습니다. notify() 메서드로 알림을 보냅니다.
Notifiable 트레이트는 User 모델뿐만 아니라 임의의 모델에 추가할 수 있습니다.

Notification 파사드 사용하기

여러 사용자에게 동시에 전송하려면 Notification 파사드를 사용합니다.
즉시 전송(큐를 건너뜀)하려면 sendNow()를 사용합니다.

배송 채널 지정

via() 메서드에서 사용할 채널을 배열로 반환합니다.
사용자의 설정에 따라 채널을 전환할 수도 있습니다.
이용 가능한 주요 채널은 다음과 같습니다.

메일 채널로 알림 보내기

toMail() 메서드에서 MailMessage 인스턴스를 반환합니다.
MailMessage의 주요 메서드는 다음과 같습니다. 에러를 알리는 경우 error() 메서드를 추가하면 버튼이 빨간색으로 표시됩니다.

마크다운 알림 메일

마크다운 형식의 리치한 메일도 사용할 수 있습니다. --markdown 옵션으로 클래스를 생성합니다.
toMail() 대신 마크다운 메서드를 사용합니다.

데이터베이스 채널로 알림 보내기

데이터베이스 채널을 사용하면 알림을 DB에 저장하고 앱의 UI 상에 표시할 수 있습니다.

테이블 준비

먼저 notifications 테이블을 생성합니다.

toArray 메서드 정의

toArray() 메서드에서 저장할 데이터를 배열로 반환합니다.
이 데이터는 notifications 테이블의 data 컬럼에 JSON 형식으로 저장됩니다.

알림 조회

Notifiable 트레이트가 제공하는 notifications 릴레이션으로 알림을 조회할 수 있습니다.
읽지 않은 알림만 조회하려면 unreadNotifications를 사용합니다.

읽음 처리

markAsRead()로 알림을 읽음 상태로 만듭니다.

알림 큐 처리

알림 전송에 시간이 걸리는 경우 ShouldQueue 인터페이스와 Queueable 트레이트를 추가해 큐 처리로 만듭니다. make:notification으로 생성한 클래스에는 처음부터 임포트되어 있습니다.
ShouldQueue를 구현하면 notify()를 호출하는 것만으로 자동으로 큐에 들어갑니다.
지연 전송도 가능합니다.

여러 채널로의 동시 전송

via() 메서드에서 여러 채널을 반환하고 각각의 메서드를 정의하는 것만으로, 같은 알림을 여러 채널에 동시에 전송할 수 있습니다.

온디맨드 알림

앱에 계정이 없는 사용자에게도 알림을 보내고 싶다면 Notification::route()를 사용합니다.

정리

마지막 수정일 2026년 7월 13일