0Pricing
WebSockets & Real-Time Systems with Spring · 강의

사용자 알림 구현

사용자에게 실시간으로 즉시 경고와 업데이트를 전달하는 견고한 알림 시스템을 구축합니다.

사용자 알림 구현은(는) CoddyKit의 무료 WebSockets & Real-Time Systems with Spring 강의입니다. 이것은 4개 중 3번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 WebSockets & Real-Time Systems with Spring 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. WebSockets & Real-Time Systems with Spring 강의에는 총 4개의 강의가 포함되어 있습니다.

이 강의의 일부는 아직 번역되지 않았으며 영어로 표시됩니다.

What are User Notifications?

User notifications are essential for modern applications. They keep users informed about important events, updates, or messages in real-time.

Think about social media alerts, new email warnings, or game invites. They boost engagement and ensure users don't miss crucial information.

Core Notification System

A robust real-time notification system typically involves a few key components:

  • Backend Service: To generate and send notifications.
  • Message Broker: To route notifications efficiently to the correct users.
  • Client-Side Logic: To receive, display, and manage notifications.

We'll focus on the in-app, real-time aspect using Spring WebSockets and STOMP.

Crafting a Notification Model

First, we need a data structure for our notifications. This model defines what information each notification carries.

Key fields often include:

  • id: Unique identifier.
  • recipientId: Who gets the notification.
  • senderId: Who sent it (optional).
  • message: The actual content.
  • type: Category (e.g., "message", "alert", "friend_request").
  • timestamp: When it was created.
  • isRead: Has the user seen it? (true/false)

Server-Side Notification Creation

On the server, an event (like a new message or a user action) triggers the creation of a Notification object. This object is then processed and sent.

Here's a simple Java class representing our notification model:

public class Notification {
  private String id;
  private String recipientId;
  private String senderId;
  private String message;
  private String type;
  private long timestamp;
  private boolean isRead;

  // Constructor
  public Notification(String recipientId, String senderId, String message, String type) {
    this.id = java.util.UUID.randomUUID().toString();
    this.recipientId = recipientId;
    this.senderId = senderId;
    this.message = message;
    this.type = type;
    this.timestamp = System.currentTimeMillis();
    this.isRead = false;
  }

  // Getters (and setters if needed)
  public String getId() { return id; }
  public String getRecipientId() { return recipientId; }
  public String getSenderId() { return senderId; }
  public String getMessage() { return message; }
  public String getType() { return type; }
  public long getTimestamp() { return timestamp; }
  public boolean isRead() { return isRead; }
  public void setRead(boolean read) { isRead = read; }

  @Override
  public String toString() {
    return "Notification [recipient=" + recipientId + ", msg='" + message + "']";
  }
}

Directing User Notifications

To send a notification to a specific user, we leverage STOMP's user destinations. Spring's messaging template simplifies this.

The destination typically looks like /user/{userId}/queue/notifications. When the server sends a message to this destination, Spring automatically routes it to the WebSocket session(s) associated with that userId.

This ensures only the intended recipient receives the notification.

Pushing Notifications (Server Concept)

On the server, when an event triggers a notification, a backend service will create a Notification object. Then, using Spring's SimpMessagingTemplate, it sends this notification to the recipient's private STOMP queue.

The convertAndSendToUser method is crucial here, mapping the user ID to their active WebSocket session(s).

While SimpMessagingTemplate needs a Spring context, we can illustrate the notification object and a conceptual send:

public class Notification {
  private String recipientId;
  private String message;
  private long timestamp;

  public Notification(String recipientId, String message) {
    this.recipientId = recipientId;
    this.message = message;
    this.timestamp = System.currentTimeMillis();
  }

  public String getRecipientId() { return recipientId; }
  public String getMessage() { return message; }
  public long getTimestamp() { return timestamp; }

  @Override
  public String toString() {
    return "Notification [to=" + recipientId + ", msg='" + message + "']";
  }

  public static void main(String[] args) {
    // This simulates creating and conceptually sending a notification
    String userId = "user123";
    String notificationMessage = "You have a new message!";
    Notification newNotification = new Notification(userId, notificationMessage);

    System.out.println("Created notification: " + newNotification);
    System.out.println("Spring's SimpMessagingTemplate would then send this to /user/" + userId + "/queue/notifications");
    System.out.println("Client-side would receive this via their WebSocket subscription.");
  }
}

Client Listens for Updates

On the client side (e.g., a web browser), the user needs to subscribe to their personal notification queue. This is done via the WebSocket connection, once authenticated.

The subscription destination will match the server-side sending pattern: /user/queue/notifications.

Any message sent by the server to this destination for the authenticated user will be received by the client.

Client-Side Subscription (JS)

Here's a basic JavaScript snippet using a STOMP client library (like stomp.js or @stomp/stompjs) to connect and subscribe.

// Assume 'stompClient' is already connected to WebSocket
// and authenticated.

// Function to handle incoming notifications
function onNotificationReceived(notification) {
  console.log("Received notification:", notification.body);
  // Parse JSON body, e.g., JSON.parse(notification.body)
  // Then update UI to display the notification
  displayNotification(JSON.parse(notification.body));
}

// Function to display notification in UI
function displayNotification(notifObj) {
    const notifArea = document.getElementById("notificationArea");
    const newNotif = document.createElement("div");
    newNotif.innerHTML = `<b>${notifObj.message}</b> 
                              <small>(${new Date(notifObj.timestamp).toLocaleTimeString()})</small>`;
    notifArea.prepend(newNotif);
}

// Subscribe to the user's private notification queue
stompClient.subscribe('/user/queue/notifications', onNotificationReceived);

console.log("Subscribed to /user/queue/notifications");
// In a real app, you'd have a 'connect' function first.
// Example: stompClient.connect({}, frame => { ... subscribe here ... });

Marking Notifications as Read

Once a user views a notification, it's good practice to mark it as read. This typically involves a separate interaction, not directly through WebSockets for the update itself.

The client can send a simple REST API call (e.g., a PUT or POST request) to the backend, indicating which notification(s) should be marked as read.

The backend then updates the notification's isRead status in the database.

Notification Delivery Check

You've built a system to send real-time notifications to specific users. How does the server ensure a notification reaches only the intended recipient?

Recap: Building Notifiers

In this lesson, we explored how to implement a real-time user notification system.

  • We designed a Notification model.
  • Learned to use Spring's SimpMessagingTemplate with convertAndSendToUser for targeted delivery.
  • Understood how clients subscribe to their private queues (/user/queue/notifications).
  • Discussed marking notifications as read via a REST API.

These principles allow you to build engaging, interactive applications that keep users informed instantly!

자주 묻는 질문

“사용자 알림 구현” 강의는 무료인가요?

네 — “사용자 알림 구현” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 WebSockets & Real-Time Systems with Spring 강의 전체를 잠금 해제할 수 있습니다. WebSockets & Real-Time Systems with Spring 강의에는 총 4개의 강의가 포함되어 있습니다.

“사용자 알림 구현”에서 뭘 배우나요?

사용자에게 실시간으로 즉시 경고와 업데이트를 전달하는 견고한 알림 시스템을 구축합니다. 브라우저에서 직접 실행하는 실습 코드로 WebSockets & Real-Time Systems with Spring을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.

WebSockets & Real-Time Systems with Spring을(를) 시작하는 데 경험이 필요한가요?

사전 경험은 필요하지 않습니다. CoddyKit의 WebSockets & Real-Time Systems with Spring은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 3번째 강의입니다.

“사용자 알림 구현” 강의는 얼마나 걸리나요?

대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.

이 WebSockets & Real-Time Systems with Spring 강의에서 코드를 작성하고 실행할 수 있나요?

네. 모든 WebSockets & Real-Time Systems with Spring 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.

이 강의의 모든 강의

  1. 서버 전송 이벤트(SSE)와 WebSockets 비교
  2. 실시간 데이터 푸시 아키텍처
  3. 사용자 알림 구현
  4. 상태 및 온라인 상태 추적
← WebSockets & Real-Time Systems with Spring(으)로 돌아가기